在整个屏幕上触摸拖动视图
Posted
技术标签:
【中文标题】在整个屏幕上触摸拖动视图【英文标题】:Touch drag a View all over the screen 【发布时间】:2016-01-24 08:14:18 【问题描述】:我有一个 UIImageView 与框架 (0,0,320,200) 一起放置。
我已经使用简单的手势向它添加了触摸拖动。
- (void)touchesMoved:(NSSet *)set withEvent:(UIEvent *)event
CGPoint p = [[set anyObject] locationInView:self.superview];
self.center = p;
它工作正常,但是一旦我将它拖到屏幕底部,假设并移开我的手指然后尝试触摸它,它就会停止检测视图上的触摸并开始检测屏幕上视图上的触摸。现在这个 imageView 被放置在所有视图之上,所以我什至不确定它为什么没有被触摸,
现在,如果以某种方式使用任何按钮使其移动到原来的位置,它就会再次开始检测触摸。
那么这里发生了什么?
【问题讨论】:
【参考方案1】:例如,在您的 viewDidLoad
方法中设置 gestureRecognizer
。
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(wasDragged:)];
[YourImageView addGestureRecognizer:panRecognizer];
一旦您的 ImageView 被移动,gestureRecognizer
对象将触发您创建的目标方法wasDragged:
,您可以从这里更新视图的位置。
- (void)wasDragged:(UIPanGestureRecognizer *)recognizer
UIImagewView *imageView = (UIImagewView *)recognizer.view;
CGPoint translation = [recognizer translationInView:imageView];
imageView.center = CGPointMake(imageView.center.x + translation.x, imageView.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:imageView];
按照您所说的将它拖到屏幕底部后,您应该可以将其从上次离开的位置再次拖到。
我希望这会有所帮助。
【讨论】:
为什么在 UIImageView 的中心移到 UIView 之外后,它会忽略触摸? 无论如何,您都可以忽略默认值是 YES。我已经编辑了答案以将其删除,因为您无需在此处进行设置。我使用它是因为我有一个特定的设置,我在移动时更改图像。以上是关于在整个屏幕上触摸拖动视图的主要内容,如果未能解决你的问题,请参考以下文章