2015-07-17 4 views
11

Я пытаюсь анимировать вращение на 180 градусов в UIImageView в Swiftодушевленное вращение UIImageView в быстрой

UIView.animateWithDuration(1.0, animations: {() -> Void in 
     self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(180 * M_PI)) 
    }) { (succeed) -> Void in 

    } 

Но разве анимацию вообще. Я хочу использовать animateWithDuration, потому что я хочу вернуть его в какой-то момент, используя CGAffineTransformMakeIdentity

Использование UIView анимационных работ.

UIView.beginAnimations(nil, context: nil) 
    UIView.setAnimationDuration(1) 
    UIView.setAnimationCurve(UIViewAnimationCurve.EaseIn) 
    let radians = CGFloat(180 * M_PI/180) 
    arrowImageView.transform = CGAffineTransformMakeRotation(radians) 
    UIView.commitAnimations() 
+0

см https://stackoverflow.com/a/48838627/7576100 – Jack

ответ

-2

Попробуйте вызвать arrowImageView.layoutSubviews(), смотрите ниже:

UIView.animateWithDuration(1.0, animations: {() -> Void in 
     self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(180 * M_PI)) 
     self.arrowImageView.layoutSubviews() 
    }) { (succeed) -> Void in 

    } 
7

Прежде всего, если вы хотите, чтобы повернуть на 180 градусов, который должен перевести в радианы. 180 градусов в радианах - pi. 360 градусов будет 2 * pi. 180 * pi заставит вашу анимацию вращаться около 90 раз за одну секунду и в конечном итоге с исходной ориентацией.

Во-вторых, я не знаю, почему ваш код не работает, но я знаю, что код ниже делает работу:

let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation") 
rotationAnimation.fromValue = 0.0 
rotationAnimation.toValue = M_PI 
rotationAnimation.duration = 1.0 

self.arrowImageView.layer.addAnimation(rotationAnimation, forKey: nil) 
3

Вы ушел из «/ 180» на «CGFloat (180 * M_PI)». Попытка:

 UIView.animateWithDuration(1.0, animations: { 
      self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI)) 
     }) 
8

Это код поворота изображения. скор 3,0

UIView.animate(withDuration:2.0, animations: { 
      self.dropDownImage.transform = CGAffineTransform(rotationAngle: CGFloat(imageRotation)) 
     }) 
3

Убедитесь, что в главном потоке

DispatchQueue.main.async { 
    UIView.animateWithDuration(1.0, animations: {() -> Void in 
    self.arrowImageView.transform = CGAffineTransformMakeRotation(CGFloat(180 * M_PI)) 
    }) { (succeed) -> Void in 

    } 
} 
1

Я нашел этот ответ из Интернета, и я проверить это, работает прекрасно. Надеюсь, что это поможет любому, просто изменить UIView вашей потребности, такие как, UIView, UIButton, UIImageView и т.д., и доступ с myUIView.rotate() функции, здесь myUIView должен быть замените на Ваше имя (IBOutlet -> name) с правильным видом для расширения. Это link, что я нашел этот ответ. И этот метод является eazy и работает!

extension UIView{ 
    func rotate() { 
     let rotation : CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z") 
     rotation.toValue = NSNumber(double: M_PI * 2) 
     rotation.duration = 1 
     rotation.cumulative = true 
     rotation.repeatCount = FLT_MAX 
     self.layer.addAnimation(rotation, forKey: "rotationAnimation") 
    } 
} 
+0

в быстром 4 ** M_PI ** есть был заменить ** Double.pi ** и ** ** FLT_MAX заменить ** Float.greatestFiniteMagnitude ** и ** кумулятивный ** с ** isCumulative ** :) –

Смежные вопросы