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];
}

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...