在Apple Watch

时间:2015-06-04 07:14:04

标签: ios objective-c apple-watch

我有一个秒表类,可以在tick方法中定期更新视图。该方法通过

触发
[self performSelector:@selector(tick) withObject:self afterDelay:0.1f];

这在iPhone上可以正常更新视图。每十分之一秒。

现在我想在Apple Watch上使用同一个类来实现这一目标。当我启动秒表时,视图会更新一些正常。然而,2秒后帧速率下降,秒表变得无法使用。

以下是整个tick方法:

- (void)tick {
if (!self.running) return;
NSTimeInterval currentTime = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval elapsed = currentTime - startTime;
if (countdown) {
    curTime = originalTime - (elapsed * 1000);
}else {
    curTime = originalTime + (elapsed * 1000);
    curTime -= offset;
}

[self.delegate stopwatch:self tick:curTime];
long thisThousand = curTime / 1000;

if (curTime > 0 || !countdown) {
    if (thisThousand != lastThousand) {
        long seconds = curTime / 1000;
        if (countdown) seconds++;
        [self.delegate stopwatch:self fullSecond:seconds];
    }
    lastThousand = curTime / 1000;
    [self performSelector:@selector(tick) withObject:self afterDelay:0.1f];
} else {
    curTime = 0;
    [self.delegate stopwatch:self fullSecond:0];
    [self.delegate stopwatchStoped:self];
    [self stopTimer];
}
}

有关如何使其发挥作用的任何想法。或者另一种解决方案?

非常感谢!

修改: UI只是一个简单的标签而不是花哨的动画。标签应该设置在0:00:00.1到0:00:00.2之间。依此类推。

1 个答案:

答案 0 :(得分:-1)

如果您要从此方法更新视图(我假设[self.delegate stopwatch:self fullSecond:seconds]更新了视图?)如果是,那么您应该查看CoreAnimation。动画更好地设计用于处理视图随时间的变化(毕竟动画是什么!)。如果您要为秒针制作动画,则可以创建一个动画,使其成为" tick"并简单地无限期地重复该过程。还有一些委托方法可以在动画完成时通知您,您可以使用它们进行任何其他计算。

Look here了解CoreAnimation上的文档。

performSelector:afterDelay:的替代方法是使用NSTimer

// timer is an iVar
timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(tick) userInfo:nil repeats:YES];

// then to stop the timer
[timer invalidate];

我会先建议CoreAnimation。