相关疑难解决方法(0)

在不触发touchesCancelled的情况下滚动UIScrollView

概观

我正在开发一款iPhone游戏,其代码我从其他开发者那里继承而来.游戏网格是具有1000x1000的contentSize的UIScrollView.网格包含通过OpenGL的Texture2D类在屏幕上绘制的几个元素.

UIScrollView的滚动方向与手指移动的方向相反.这背后的想法是模拟用手指"筛选"元素的行为,因为触摸路径中的每个元素都应该受到影响/操纵.

 

问题

问题是UIScrollView的滚动会触发touchesCancelled,从而结束游戏依赖的touchesMoved调用,以了解要操作的元素.即使我的手指移动没有在视觉上触发视图滚动,移动我的手指超过10个像素的距离触发touchesCancelled方法,从而结束未来touchesMoved调用,直到我抬起手指并开始新的触摸事件.

我确信这是触发touchesCancelled方法的滚动事件,因为如果我self.scrollingEnabled = NO;在视图上设置,在屏幕上移动手指会继续触发touchesMoved,因为无论我在屏幕上移动手指多远,触摸都会获得当我抬起手指时(在我完成对元素的筛选之后)按预期调用,并且我的触摸/滑动路径中的每个元素确实按照需要进行操作.但是,设置此属性自然会阻止所需的游戏网格滚动.

 

尝试修复失败

我已尝试设置视图self.canCancelContentTouches = NO;initWithFrame方法,但touchesCancelled仍然被触发,奇怪的是.不知道为什么会这样!也许我已经把它放在错误的位置,但我不太确定这甚至可以解决我的问题,因为文档暗示这样的设置会阻止滚动:"如果这个属性的值为NO,一旦内容视图开始跟踪,无论手指移动,滚动视图都不会滚动." 很明显,这不是我追求的行为,所以财产似乎并不是我感兴趣的东西.虽然我仍然感到困惑,为什么它仍然滚动和调用touchesCancelled,但我离题了.

我还添加了方法,- (BOOL)touchesShouldCancelInContentView:(UIView *)view但它没有被调用,即使没有设置,self.canCancelContentTouches = NO;因为文档说将canCancelTouches属性设置为NO确实会阻止调用touchesShouldCancelInContentView方法:"滚动视图不会调用此方法,如果值为canCancelContentTouches属性为NO." .虽然文档似乎不清楚是否从这种方法返回NO也会阻止滚动像canCancelContentTouches = NO;设置那样.如果没有,那么这应该是理想的解决方案.虽然,我不知道为什么这个方法甚至没有被调用,因为文档只提到一个属性/设置阻止它被调用,并且即使该属性未设置为NO仍然没有被调用(因此默认为YES).

 

我从哪里开始?

所以现在我不知所措.事实是我仍然需要touchesMoved才能在视图开始滚动后继续调用.那可能吗?如果没有,我有什么选择?

iphone cocoa-touch objective-c uiscrollview touchesmoved

10
推荐指数
1
解决办法
3300
查看次数