在任何touchesBegan,touchesEnded和touchesMoved函数中,我可以使用fallowing代码来了解每次触摸的状态,但在我们之外我不能:|
NSSet *allTouches = [event allTouches];
for(GLuint index = 0; index < [allTouches count]; ++index)
{
UITouch *touch = [[allTouches allObjects] objectAtIndex:index];
if([touch phase] != UITouchPhaseCancelled)
{
CGPoint touchPoint = [touch locationInView:self];
//do something with touchPoint that has state [touch phase]
}
}
答案 0 :(得分:1)
您应该保留当前触摸所有点的列表。确保不只保留UIEvent
或UITouch
个对象(它们不能保证长寿) - 而是创建自己的数据数据结构。您需要的几率就是跟踪当前触摸点的位置。
答案 1 :(得分:0)
如果您不想修复破损的设计,为什么不保留正在运行的活动触摸列表来解决您的问题?
NSMutableSet * touch;
在touchesBegan中添加它们,在touchesEnded和touchesCancelled中删除它们......
您可以使用“全局”对象(即单例)来跟踪这些对象并同步数据访问。我不知道如何查询这个集合会比直接向UIKit询问这些信息有所不同。
如果您需要有关标准UIKit对象(即UIButton)的信息,您可能需要对这些对象进行子类化 - 我不确定您是否可以在所有类中获得所需的效果(因为它们 - 或者它们的子视图 - 可以处理以他们想要的任何方式接触。)