我正在学习iOS,但我找不到如何向UIView添加拖放行为.
我试过了:
[_view addTarget:self action:@selector(moved:withEvent:) forControlEvents:UIControlEventTouchDragInside];
它说“UIView没有可见的接口声明选择器addTarget(etc)”
此外,我尝试添加平移手势识别器,但不确定这是否是我需要的
- (IBAction)test:(id)sender { NSLog(@"dfsdfsf"); }
它被称为,但不知道如何获得事件的坐标.在iOS中注册移动事件回调/拖放操作的标准简单方法是什么?
提前致谢.
解决方法
绝对是UIPanGestureRecognizer的方法.如果您希望用户拖动视图,则需要在superview的坐标系中进行手势的“翻译”(移动):
- (IBAction)panWasRecognized:(UIPanGestureRecognizer *)recognizer { CGPoint translation = [recognizer translationInView:_view.superview];
完成翻译后,您可以通过更改其中心来移动(“拖动”)视图:
CGPoint center = _view.center; center.x += translation.x; center.y += translation.y; _view.center = center;
最后,您想要将平移手势识别器的转换设置为零,因此下次收到消息时,它只会告诉您自上一条消息以来手势移动了多少:
[recognizer setTranslation:CGPointZero inView:_view.superview]; }
这里可以轻松复制/粘贴:
- (IBAction)panWasRecognized:(UIPanGestureRecognizer *)recognizer { CGPoint translation = [recognizer translationInView:_view.superview]; CGPoint center = _view.center; center.x += translation.x; center.y += translation.y; _view.center = center; [recognizer setTranslation:CGPointZero inView:_view.superview]; }