我有一个秒表类,可以在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之间。依此类推。
答案 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。