1

我需要一个复杂的连续动画,UIView其中涉及设置CATransform3D需要计算的旋转和平移属性,因此没有标准动画。

我转向使用CALayer动画。并有这个:

self.displayLink = [self.window.screen displayLinkWithTarget:self selector:@selector(update:)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

- (void)update:(CADisplayLink*)sender
{
    CGFloat elapsedTime = sender.timestamp - self.lastTimestamp;
    self.lastTimestamp = sender.timestamp;

    self.rotation += elapsedTime * 0.1;  // Factor determines speed.

    // This is just example for SO post; the real animation is more complicated!
    CATransform3D transform;
    transform = CATransform3DMakeRotation(self.rotation, 1.0, 0.0, 0.0);
    self.imageLayer.transform = transform;
}

self.imageLayer是一个已经设置了图像并作为子图层添加到我的基本视图的CALayer对象。contents

它确实会旋转“一点”,但不是连续旋转,有时它似乎会停止或向后旋转一点。

似乎transform经常分配一个新的并没有任何效果,因为该self.rotation值增加了很多。添加一个[self setNeedsDisplay]没有帮助。

我还没有对CALayers 做太多事情,所以我想我错过了一些非常基本的东西。试图找到它一段时间,但我发现的所有例子似乎都离我想要的太远了。

4

1 回答 1

4
于 2015-06-22T18:10:31.453 回答