Мне нужна сложная непрерывная анимация UIView
, которая включает в себя настройку поворота и свойств перевода CATransform3D
, поэтому стандартная анимация не является вариантом.Как применить сложные изменения трансформации CALayer?
Я обратился к использованию 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]
не помогло.
Я еще не много сделал с CALayer
s, но я думаю, что я пропустил что-то очень простое. Пытался найти его в течение некоторого времени, но все примеры, которые я нашел, выглядят слишком далеко от того, что я хочу.
@GeneratorOfOne Скорость вращения должна быть анимирована; он должен замедляться со временем. Значит, этот метод правильный? Должен ли я использовать «NSTimer»? –