1

我需要一些有关该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];
}
4

2 回答 2

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
}
于 2012-12-21T18:13:58.123 回答
2

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

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

于 2012-12-21T18:22:52.303 回答