小编pur*_*ion的帖子

在不触发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
查看次数

重新选择选项卡时,刷新UITabBar选项卡的视图或从UITabBar选项卡的视图中调用方法

除了第一次切换选项卡时,最初触发ViewDidLoad时,切换到(重新选择)该选项卡的所有后续操作似乎都不会触发ViewDidLoad,也不会触发任何其他方法.该视图似乎被缓存并立即重新显示,就像用户从该选项卡切换时留下的那样.但是,当用户重新选择特定选项卡时,我需要刷新其视图.因此,如果可能的话,我需要以某种方式从视图中触发方法而无需额外的用户交互(在选项卡重选之后).

我知道在UITabBarDelegate中有一个方法应该在选项卡切换发生之前或之后被调用,但我不知道这是否是在重新激活时从选项卡视图中触发方法调用的方法标签.我不知道如何从委托中访问选项卡视图的已经活动的实例.任何方向都会有很大帮助!

iphone cocoa-touch objective-c uitabbarcontroller ios

6
推荐指数
1
解决办法
5325
查看次数

从不同的相关记录组中的两列之一中选择包含重复值的所有行

我正在尝试创建一个MySQL查询,该查询将返回包含一组相关记录中的重复值的所有单独行(未分组)."相关记录组"是指具有相同帐号的组(根据下面的示例).

基本上,在共享相同的不同帐号的每组相关记录中,只选择那些行dateamount列的值与该帐户的记录组中的另一行值相同的行.只应将该值视为该帐户组内的重复值.下面的样本表和理想的输出细节应该可以解决问题.

此外,即使它们具有重复值,我也不关心任何返回X状态的记录.

带有相关数据的小样本表:

id   account   invoice   date         amount   status
1    1         1         2012-04-01   0        X
2    1         2         2012-04-01   120      P
3    1         2         2012-05-01   120      U
4    1         3         2012-05-01   117      U
5    2         4         2012-04-01   82       X
6    2         4         2012-05-01   82       U
7    2         5         2012-03-01   81       P
8    2         6         2012-05-01   80       U
9    3         7         2012-03-01   80       P
10   3         8         2012-04-01   79       U
11   3         9         2012-04-01   78       U …
Run Code Online (Sandbox Code Playgroud)

mysql group-by inner-join duplicates having

6
推荐指数
1
解决办法
1万
查看次数