0

我试图在某些事件上调用这些方法:

        -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

  -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

但我不知道如何填写参数: 1 - (NSSet *)touches 2 - withEvent:(UIEvent *)event

任何人都可以为我提供一个示例参数来调用 (void)touchesEnded 和 (void)touchesMoved: (and - (void)touchesBegan

4

2 回答 2

0

这些方法由系统自动调用。你永远不会直接打电话给他们。

你应该做什么,这取决于你的目标。如果您只想“模拟”触摸,只需使用辅助方法即可。然后,让 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 方法只是创建您的特殊对象,并将它们传递给您的方法,无论系统生成触摸还是模拟它们,您都可以拥有完全相同的行为。

现在,您没有得到的是系统事件的自动生成。

如果你被它的性能杀死,有一些简单的方法可以避免创建额外的集合和对象,但这不是你的问题。

于 2012-04-19T15:50:55.017 回答
0

UITouch 和 UIEvent 没有公共构造函数,因此无法生成 touch 方法所需的参数。

正如 dasblinkenlight 所说,肯定有另一种方法可以解决您的问题。但是,目前的方法是绝对不可能的。

于 2012-04-19T13:52:49.553 回答