【问题标题】: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 被放置在所有视图之上,所以我什至不确定它为什么没有被触摸,

现在,如果以某种方式使用任何按钮使其移动到原来的位置,它就会再次开始检测触摸。

那么这里发生了什么?

【问题讨论】:

    标签: ios objective-c cocoa-touch


    【解决方案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。我已经编辑了答案以将其删除,因为您无需在此处进行设置。我使用它是因为我有一个特定的设置,我在移动时更改图像。
    猜你喜欢
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多