CATransform3DRotate вращаться на 360 градусов
Я начал использовать CATransform3D в последнее время, и это кажется очень приятным. У меня просто есть 1 проблема с ротацией, хотя. Я пытаюсь повернуть свой взгляд на 360 градусов вправо, но если я просто положу pass 360 в CATransform3DRotate, это не сработает (он просто не двигается вообще.)
Вот мой код:
CALayer *layer = dock.layer;
CATransform3D r = CATransform3DIdentity;
r.m34 = 1.0 / -500;
r = CATransform3DRotate(r, DegreesToRadians(360.0f), 100.0f, 1.0f, 100.0f);
layer.transform = r;
Кто-нибудь знает, как исправить эту проблему? Заранее спасибо! :)
1 ответ:
Вы можете анимировать слой через один (или несколько) полных оборотов вокруг его оси Z, анимируя путь ключа слоя
transform.rotation
, например:CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; animation.duration = .25; animation.fromValue = [NSNumber numberWithFloat:0]; animation.toValue = [NSNumber numberWithFloat:2 * M_PI]; [layer addAnimation:animation forKey:animation.keyPath];
Вы можете анимировать вокруг осей X или Y, используя ключевые пути
transform.rotation.x
иtransform.rotation.y
. (Путь ключаtransform.rotation.z
имеет тот же эффект, что и путь ключаtransform.rotation
.) Вы можете применить несколько вращений, на отдельных осях, одновременно.Другой способ сделать это, который, вероятно, работает лучше, если вы хотите вращаться вокруг внеосевого вектора,-это использовать ключевой кадр анимация, например:
CALayer *layer = [sender layer]; CATransform3D transform = CATransform3DIdentity; transform.m34 = 1.0 / -50; layer.transform = transform; CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; animation.values = [NSArray arrayWithObjects: [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 0 * M_PI / 2, 100, 1, 100)], [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 1 * M_PI / 2, 100, 1, 100)], [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 2 * M_PI / 2, 100, 1, 100)], [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 3 * M_PI / 2, 100, 1, 100)], [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 4 * M_PI / 2, 100, 1, 100)], nil]; animation.duration = 2; [layer addAnimation:animation forKey:animation.keyPath];