几天前我将我的 iPad 升级到了 5.0,同时将 Xcode 升级到了 4.2,这样我就可以继续测试我的应用程序了。现在,我在使用以前版本的 Xcode 的几个应用程序中遇到了触摸代码问题。
我将 UIImageView 子类化以通过覆盖-(void)TouchesBegan
和添加一些拖动功能-(void)TouchesMoved
。我没有在子类中覆盖-(void)TouchesEnded
,而是在包含图像视图的视图的视图控制器中处理了它。
我将子类拉到UIImageView
一个新项目中进行测试,并将问题缩小到父级UIView
(由 Xcode 创建的模板)似乎没有将触摸事件转发到视图控制器(也是由 Xcode 创建)的事实。
如果我将它添加到我的子类中:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[self.nextResponder touchesEnded:touches withEvent:event];
}
这是我父视图的视图控制器:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ViewController");
}
当我放开我在屏幕上拖动的图像时,我得到了"touches ended event in ImageToDrag"
,但不是来自视图控制器的日志。
但是,如果我通过在子类视图中执行此操作有意跳过视图:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[[self.nextResponder nextResponder] touchesEnded:touches withEvent:event];
}
然后我得到两个日志条目。
我能想出的唯一解释是,由于某种原因,UIView
正在消耗touchesEnded
事件而不是将其传递给视图控制器。
我已经验证exclusiveTouch
设置为NO
,并且在父视图和子类上userInteractionEnabled
设置为。YES
UIImageView
我还测试了 iOS 5.0 和 iOS 4.2 的编译,并将测试应用程序部署到 iOS 5 iPad 和 iOS 4.3.1 iPad。
我能够获得触摸事件的唯一方法viewController
是跳过视图并nextResponder
在子类中使用双精度。尽管该方法有效,但对我来说似乎是一种黑客行为,我相信它稍后会回来咬我。
有没有其他人看到过这种行为?有什么方法可以让我找出UIView
我的触摸事件在做什么?
谢谢,丹