这些方法由系统自动调用。你永远不会直接打电话给他们。
你应该做什么,这取决于你的目标。如果您只想“模拟”触摸,只需使用辅助方法即可。然后,让 touchesXXXX 直接调用它们。
我们没有创建 UITouch 对象的 API,所以如果你想保留它们的信息,你必须镜像它们。就像是...
@interface MyTouch : NSObject {
UITouchPhase phase
NSUInteger tapCount
NSTimeInterval timestamp
UIView *view
UIWindow *window
CGPoint locationInView;
CGPoint locationInWindow;
@end
然后,你可以有这样的方法......
- (void)handleTouches:(NSSet*)touches {
}
触摸的地方是一组 MyTouch 对象。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// For UITouch in touches, create a MyTouch, and add it to your own
// collection of touches.
[self handleTouches:myTouches];
}
如果您对每个 touchesXXXX 方法都执行此操作,则每个方法都会将处理传递给您自己的方法。
现在,通过这样做,您可以控制创建自己的触摸对象。您可以将它们配置为您想要的任何视图或模式。然后,在任何其他代码中,您可以创建 MyTouch 对象的集合,并使用它们调用 handleTouches:。
只要 touchesXXXX 方法只是创建您的特殊对象,并将它们传递给您的方法,无论系统生成触摸还是模拟它们,您都可以拥有完全相同的行为。
现在,您没有得到的是系统事件的自动生成。
如果你被它的性能杀死,有一些简单的方法可以避免创建额外的集合和对象,但这不是你的问题。