gpt4 book ai didi

ios - 如何应用复杂的 CALayer 变换更改?

转载 作者:行者123 更新时间:2023-12-01 18:11:15 24 4
gpt4 key购买 nike

我需要 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.imageLayerCALayer谁的 contents已设置图像并作为子层添加到我的基本 View 中。

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

似乎分配了一个新的 transform很多时候没有任何效果,因为 self.rotation值(value)增加了​​很多。添加 [self setNeedsDisplay]没有帮助。

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

最佳答案

当您创建自己的图层然后修改其属性时,它会隐式地为它们设置动画(请参阅 “Animating Simple Changes to a Layer’s Properties”。您没有看到您期望的更改,因为 Core Animation 正在为更改设置动画而不是立即应用它们。

您需要禁用隐式动画。有几种方法可以禁用它;见 “Changing a Layer’s Default Behavior” .或 search stack overflow for “disable implicit animations” .这是一种方法:

NSDictionary *actions = @{ @"transform": [NSNull null] };
self.imageLayer.actions = actions;

只需执行一次,在其中创建 imageLayer .

关于ios - 如何应用复杂的 CALayer 变换更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30986736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com