Я пытаюсь повернуть CALayer чуть меньше 360 градусов, но вместо этого преобразование поворачивает его в противоположном направлении (это меньше двух углов). Как я могу достичь этого вращения, учитывая, что я также применяю трансляцию трансляции на слое? Кроме того, я хочу иметь возможность контролировать направление вращения. Кажется, CAAnimation не будет прислушиваться и принять более короткий угол преобразования для вращения. Кажется, эти две проблемы, возможно, связаны между собой. Вот как выглядит часть моего быстрого кода:Вращающийся CALayer более чем на 180 градусов с использованием преобразования
func addAnimation() {
var animation : CABasicAnimation = CABasicAnimation(keyPath: "transform")
animation.delegate = self
let translateDistY = CGRectGetMidY(self.view.bounds) - CGRectGetMidY(self.displayLayer.bounds)
let rotationAngle = (CGFloat(M_PI*2.0) - 0.1)
var transform : CATransform3D = CATransform3DMakeTranslation(0, translateDistY, 0)
transform = CATransform3DRotate(transform, rotationAngle, 0, 0, 1)
animation.fromValue = NSValue(CATransform3D: CATransform3DIdentity)
animation.toValue = NSValue(CATransform3D: transform)
animation.duration = 1.3
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
let animStruct = animationStruct(animLayer: self.displayLayer, animation: animation, layerTransform: transform)
self.animationSequence.append(animStruct)
}
func doAnimation() {
if animationSequence.count > 0 {
let animStruct = animationSequence.removeAtIndex(0)
animStruct.animLayer.transform = animStruct.layerTransform
animStruct.animLayer.addAnimation(animStruct.animation, forKey: nil)
}
}
override func animationDidStop(anim: CAAnimation!, finished flag: Bool) {
self.doAnimation()
}
Спасибо Вань за ответ ! Я перейду по ссылке, которую вы предоставили, это определенно будет иметь огромную помощь в моем понимании темы. Я придумал какое-то решение проблемы, которую я публикую ниже. – Carvak