【发布时间】:2012-07-12 17:28:44
【问题描述】:
我的问题是这个。用户可以按住网格上的特定图像,一旦用户按住图像 2 秒,另一个视图会在其上方弹出。现在我需要程序工作,因为用户的手指仍然在屏幕上,新创建的视图将随着手指移动。现在它的工作原理是用户必须移开手指并将其放回屏幕上,以便视图随之移动。有什么想法吗?
【问题讨论】:
标签: iphone objective-c ipad
我的问题是这个。用户可以按住网格上的特定图像,一旦用户按住图像 2 秒,另一个视图会在其上方弹出。现在我需要程序工作,因为用户的手指仍然在屏幕上,新创建的视图将随着手指移动。现在它的工作原理是用户必须移开手指并将其放回屏幕上,以便视图随之移动。有什么想法吗?
【问题讨论】:
标签: iphone objective-c ipad
如果您使用UILongPressGestureRecognizer 检测初始按下,您还可以使用它来跟踪移动,因为它会一直调用您的手势操作方法,直到用户抬起手指。
【讨论】:
您可能有很多不同的方法可以做到这一点。想到的一个是通过视图控制器本身管理触摸事件。这将要求您实现-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
【讨论】:
(BOOL)canBecomeFirstResponder { return YES; }(默认是返回NO)。在视图控制器的 -viewDidAppear: 方法中,添加 [self becomeFirstResponder]; 使其成为第一响应者。