如何检测屏幕上没有手指?

时间:2012-12-21 18:01:15

标签: objective-c ios nstimer

我需要touchesEnded函数的帮助。我想在屏幕上没有手指时使用NSTimer功能启动touchesEnded。这可能吗?。目前我有一个touchesBegan功能: - )。

这是我的代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSUInteger numTaps = [[touches anyObject] tapCount];

    if (numTaps >= 2)
    {
        self.label.text = [NSString stringWithFormat:@"%d", numTaps];
        self.label2.text = @"+1";
        [self.button setHidden:YES];
    }
}

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

- (void)showButton
{
    [self.button setHidden:NO];
}

2 个答案:

答案 0 :(得分:3)

这很棘手。你没有得到一个事件,告诉你所有的手指都在上升;每个touchesEnded仅告诉您此手指已启动。所以你必须自己跟踪触摸。通常的技术是在它们到达时将触摸存储在可变集中。但是你不能自己存储触摸,所以你必须存储一个标识符。

首先在UITouch上添加一个类别,以获得这个唯一标识符:

@interface UITouch (additions)
- (NSString*) uid;
@end

@implementation UITouch (additions)
- (NSString*) uid {
    return [NSString stringWithFormat: @"%p", self];
}
@end

现在我们必须在整个过程中保持我们的可变设置,当我们接触时,在我们的第一次触摸时创建它并在我们的最后一次触摸消失时将其摧毁。我假设你有一个NSMutableSet实例变量/属性。这是伪代码:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // create mutable set if it doesn't exist
    // then add each touch's uid to the set with addObject:
    // and then go on and do whatever else you want to do
}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    // remove uid of *every* touch that has ended from our mutable set
    // if *all* touches are gone, nilify the set
    // now you know that all fingers are up
}

答案 1 :(得分:2)

要创建空闲计时器,最简单的方法是创建UIApplication的自定义子类,并覆盖sendEvent: - 这里,调用super,并重置计时器。这将涵盖所有接触。您的应用收到的每次触摸都会通过此方法。

要使用自定义应用程序子类,您需要将main.m中的调用修改为UIApplicationMain(),插入自定义类名。