识别界面中的所有触摸

时间:2012-04-03 13:25:01

标签: iphone objective-c ios

我希望能够识别界面中的所有触摸,无论触摸到什么内容。

我试过了:

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

..但这只会识别用户点击不响应点击的内容(例如uiimages)

我需要这种能力的原因是,如果用户没有触摸屏幕5分钟,我想要进行幻灯片放映,所以我想在他们触摸时重置计时器。将此重置代码单独放在每个UI事件中似乎是错误的。

5 个答案:

答案 0 :(得分:3)

您可以继承UIWindow并覆盖sendEvent:方法。

答案 1 :(得分:3)

有几种可能的解决方案,但正如@omz所说 - 覆盖sendEvent:它是最好的解决方案。

@interface YourWindow : UIWindow {
    NSDate timeOfLastTouch;
}
@end

@implementation YourWindow
 - (void)sendEvent:(UIEvent *)event {
    [super sendEvent:event];

    NSSet *touches = [event allTouches];
      UITouch *touch = [touches anyObject];
    if( touch.phase == UITouchPhaseEnded ){
         timeOfLastTouch = [NSDate date];
    }
} 



@end

不要忘记用YourWindow替换UIWindow。

答案 2 :(得分:1)

您可以继承UIWindow并覆盖sendEvent:方法,如下所示:

- (void)sendEvent:(UIEvent *)event {
  if (event.type == UIEventTypeTouches) {
     // You got a touch, do whatever you like
  };

  [super sendEvent:event];  // Let the window do the propagation of the event
}

答案 3 :(得分:1)

你可以使用点击手势

在您的界面中添加UIGestureRecognizerDelegate

@interface ViewController : UIViewController <UIGestureRecognizerDelegate> {

然后在你的viewDidLoad中添加这个

UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapMethod)];
tapped.delegate=self;
tapped.numberOfTapsRequired = 1;
[self.view addGestureRecognizer:tapped];

然后在抽头方法中执行您的计时器代码

-(void)tapped {
 //timer code
}

确保您的UI元素具有setUserInteractionEnabled:YES

答案 4 :(得分:1)

正如@Alladinian在其中一篇评论中所说的,iOS参考文档提到子类化UIApplication是正确的应用程序,因此,似乎更喜欢子类化UIWindow。比照https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html

  

您可能决定将UIApplication子类化为覆盖sendEvent:或   sendAction:to:from:forEvent:实现自定义事件和操作   调度。