我想动画animateWithDuration:animations:
不支持的UI元素,并且不能通过转换动画。
首先想到的是做这样的事情:
_animationStartDate = [NSDate date];
[self performSelector:@selector(manualAnimation) withObject:nil afterDelay:1.0/MYManualAnimationFrameRate];
- (void)manualAnimation
{
NSDate *now = [NSDate date];
NSTimeInterval interval = [now timeIntervalSinceDate:_animationStartDate];
CGFloat progress = interval / MYManualAnimationDuration;
if (progress < 1)
{
[self setValuesOfManualAnimationAtProgress:progress];
[self performSelector:@selector(manualAnimation:) withObject:number afterDelay:1.0/MYManualAnimationFrameRate];
} else {
[self setValuesOfManualAnimationAtProgress:1];
}
}
在重新发明轮子之前,是否有适用于这些动画的API?
如果没有,我应该考虑其他任何事项(例如,在cancelPreviousPerformRequestsWithTarget:selector:object:
中调用dealloc
,动态帧率)?我会通过使用GCD获得一些东西吗?
答案 0 :(得分:2)
在重新发明轮子之前,是否有适用于这些动画的API?
那将是CADisplayLink
“是一个计时器对象,允许你的应用程序将其绘图与显示器的刷新率同步”
每当需要重绘
时,您可以使用它来调用带有此签名的选择器- (void) selector:(CADisplayLink *)sender;
在您的绘图代码中,您可以使用显示链接的timestamp
来了解要绘制的动画的距离。