Я хочу, чтобы выполнить бесконечную 360 градусов поворота анимации, так что я закодирован:CATransaction повернуть слой на 360 градусов странных
- (void)rotate
{
__weak typeof(self) weakSelf = self;
[CATransaction begin];
[CATransaction setDisableActions:NO];
[CATransaction setCompletionBlock:^{
[weakSelf rotate];
}];
[CATransaction setAnimationDuration:1.0];
[CATransaction setAnimationTimingFunction:
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
self.squareLayer.transform = CATransform3DRotate(self.squareLayer.transform, M_PI, 0, 0, 1);
[CATransaction commit];
}
M_PI означает 180 градусов, так что я считаю, что слой может быть повернут от 0
к M_PI * 1
, M_PI * 2
...
Но оказывается, чтобы быть вращение от 0
до M_PI
, затем M_PI
к 0
.
я могу сделать это через CABasicAnimation
:
CABasicAnimation *animatin = [CABasicAnimation animationWithKeyPath:@"transform"];
animatin.duration = 1.0;
animatin.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(0, 0, 0, 1)];
animatin.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0, 0, 1)];
animatin.repeatCount = HUGE_VALF;
animatin.fillMode = kCAFillModeForwards;
[self.squareLayer addAnimation:animatin forKey:@"a"];
коды выше повернуть слой на 360 градусов отлично.
Но я действительно смущен о первой реализации, почему она вращается так странно?
Какова реализация 'rotate'? Является ли это первой реализацией, которая называет себя снова и снова? –
Да, он поворачивает M_PI своим текущим преобразованием каждый раз. – Bzmario