2012-07-12 76 views
-4

我的问题是这样的。用户可以保持网格上的特定图像,一旦用户将图像保持2秒钟,另一个视图在其上方弹出。现在我需要程序工作,因为用户的手指仍然在屏幕上,新创建的视图将随手指移动。现在它的工作原理是,用户将不得不移除他们的手指并将其放回屏幕上,以便视图随其移动。任何想法的人?UIView坚持手指?

回答

1

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

+0

我已经实现了UILongPressGestureRecognizer。它是这样工作的。 LongPressOnVie然后它使用NSNotification调用视图控制器来创建新的视图,以上我正在按下。它创建视图,但我无法移动视图与删除我的手指,然后再次按下 – Esko918 2012-07-12 18:55:31

1

有很多不同的方法可以做到这一点。想到的一点是通过视图控制器本身管理触摸事件。这将要求您实施-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 
+0

我拥有全部我的代码已经写在所有触摸方法中,所以我将不得不去那条路线。你的意思是我的实现canBecomeFirstResponder,根据文档其唯一的一个属性返回True或False – Esko918 2012-07-12 18:53:47

+0

如果你想让你的视图控制器成为第一响应者(即接收触摸事件),你需要实现 - (BOOL) canBecomeFirstResponder {return YES; }(默认是返回“否”)。在您的视图控制器的'-viewDidAppear:'方法中,添加'[self becomeFirstResponder];'使其成为第一响应者。 – gschandler 2012-07-12 21:46:38