这是设置。
我有一个自定义UIScrollView作为PrimeView的子视图。
自定义UIScrollView可视为重叠的scrollview,它最初会获取所有触摸事件。
现在,当滚动视图没有拖动时,我希望它将触摸事件传递给其他响应者 下面是我目前的代码,但我不确定self.nextResponder和super之间的区别。
我不明白为什么touchesBegan正确传递给superview,但是touchesMoved没有传递给superview。
-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
if (!self.dragging)
{
[self.nextResponder touchesBegan: touches withEvent:event];
}
[super touchesBegan: touches withEvent: event];
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.nextResponder touchesBegan: touches withEvent:event]; //
[super touchesMoved:touches withEvent:event];
}
答案 0 :(得分:3)
Apple的立场是你永远不应该做这样的事情:
[self.nextResponder touchesBegan: touches withEvent:event];
如果你这样做,你就会超越UIKit自己在响应者链中转发消息,结果是不确定的。
此外,在您的touchesMoved:withEvent:
中,您向touchesBegan:withEvent:
发送nextResponder
,这似乎是可疑的。
另外,在你的touchesMoved:withEvent:
中,你将事件传递两次,这似乎是一个坏主意。
如果您想有条件地处理拖动,最好的办法是使用UIPanGestureRecognizer
。如果识别器不接受该事件,它将正常转发到响应者链。
如果您是已注册(付费)的iOS开发人员,则应该可以访问WWDC 2012 videos。我强烈建议您观看“使用滚动视图增强用户体验”视频。我不会多说它,因为它的内容仍然在NDA之下。