非动画UI元素的手动动画

时间:2014-02-07 20:03:26

标签: ios core-animation grand-central-dispatch

我想动画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获得一些东西吗?

1 个答案:

答案 0 :(得分:2)

  

在重新发明轮子之前,是否有适用于这些动画的API?

那将是CADisplayLink“是一个计时器对象,允许你的应用程序将其绘图与显示器的刷新率同步”

每当需要重绘

时,您可以使用它来调用带有此签名的选择器
- (void) selector:(CADisplayLink *)sender;

在您的绘图代码中,您可以使用显示链接的timestamp来了解要绘制的动画的距离。