简单拖放视图?

Ixx*_*Ixx 7 ios

我正在学习iOS,我找不到如何添加拖放行为UIView.

我试过了:

[_view addTarget:self action:@selector(moved:withEvent:) forControlEvents:UIControlEventTouchDragInside];
Run Code Online (Sandbox Code Playgroud)

它说" UIView声明选择器没有可见的接口addTarget (etc)"

此外,我尝试添加平移手势识别器,但不确定这是否是我需要的

- (IBAction)test:(id)sender {
       NSLog(@"dfsdfsf");
  }
Run Code Online (Sandbox Code Playgroud)

它被称为,但不知道如何获得事件的坐标.在iOS中注册移动事件回调/拖放操作的标准简单方法是什么?

提前致谢.

rob*_*off 15

A UIPanGestureRecognizer绝对是要走的路.如果您希望用户拖动视图,则需要在superview的坐标系中进行手势的"平移"(移动):

- (IBAction)panWasRecognized:(UIPanGestureRecognizer *)recognizer {
    CGPoint translation = [recognizer translationInView:_view.superview];
Run Code Online (Sandbox Code Playgroud)

完成翻译后,您可以通过更改其来移动("拖动")视图center:

    CGPoint center = _view.center;
    center.x += translation.x;
    center.y += translation.y;
    _view.center = center;
Run Code Online (Sandbox Code Playgroud)

最后,您想要将平移手势识别器的转换设置为零,因此下次收到消息时,它只会告诉您自上一条消息以来手势移动了多少:

    [recognizer setTranslation:CGPointZero inView:_view.superview];
}
Run Code Online (Sandbox Code Playgroud)

这里一起来轻松复制/粘贴:

- (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];
}
Run Code Online (Sandbox Code Playgroud)