【问题标题】:UIView stick to finger? [closed]UIView坚持手指? [关闭]
【发布时间】:2012-07-12 17:28:44
【问题描述】:

我的问题是这个。用户可以按住网格上的特定图像,一旦用户按住图像 2 秒,另一个视图会在其上方弹出。现在我需要程序工作,因为用户的手指仍然在屏幕上,新创建的视图将随着手指移动。现在它的工作原理是用户必须移开手指并将其放回屏幕上,以便视图随之移动。有什么想法吗?

【问题讨论】:

    标签: iphone objective-c ipad


    【解决方案1】:

    如果您使用UILongPressGestureRecognizer 检测初始按下,您还可以使用它来跟踪移动,因为它会一直调用您的手势操作方法,直到用户抬起手指。

    【讨论】:

    • 我已经实现了 UILongPressGestureRecognizer。它是这样工作的。 LongPressOnVie 然后它使用 NSNotification 调用视图控制器以在我正在按下的视图之上创建新视图。它创建视图但我无法在不移开手指并再次按下的情况下移动视图
    【解决方案2】:

    您可能有很多不同的方法可以做到这一点。想到的一个是通过视图控制器本身管理触摸事件。这将要求您实现-canBecomeFirstResponder,当然还有touches[Began|Moved|Ended|Cancelled]:withEvent: 方法。

    另一种方式,如果您使用UIImageView 来管理和显示单个图像,您可以将其子类化并通过它处理触摸事件。在这种情况下,您实际上不会创建一个新的UIView 来跟踪拖动,您可以只使用NSAffineTransform 让它看起来“弹出”并继续使用相同的视图对象跟踪位置。触摸结束后,应用识别变换以恢复其正常大小。变换是可动画的。

    编辑

    在您的视图控制器实现中,除了实现上述触摸方法外,请执行以下操作以在控制器中实际接收触摸事件:

    @implementation MyViewController
    
    ...
    
    - (BOOL)canBecomeFirstResponder
    {
        return YES;  // Default for UIResponder is NO
    }
    
    ...
    
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        ...
        [self becomeFirstResponder];  // ensures view controller receives touch events
    }
    
    ...
    
    @end
    

    【讨论】:

    • 我的所有代码都已经用所有的 touches 方法编写好了,所以我必须走那条路。你是什​​么意思我的实现 canBecomeFirstResponder,根据文档,它只有一个返回 True 或 False 的属性
    • 如果你想让你的视图控制器成为第一响应者(即接收触摸事件),你需要实现-(BOOL)canBecomeFirstResponder { return YES; }(默认是返回NO)。在视图控制器的 -viewDidAppear: 方法中,添加 [self becomeFirstResponder]; 使其成为第一响应者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 2019-12-21
    相关资源
    最近更新 更多