ios – 视图的简单拖放?

我正在学习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];
}

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...