2016-09-28 2 views
1
nicht

ich neu bin bewegt von obj C zu schnell, ich bin nicht sicher, warum es nicht funktioniert, weil in obj c es funktioniert gut, nehmen Sie bitte einen Blick auf meinen CodeCABasicAnimation zügiges Arbeiten

Hier ist mein Code

func addAnimationOnLayer(layer: CALayer, position: CGPoint, duration: TimeInterval, delay: TimeInterval, fromPosition: CGPoint, toPostion: CGPoint, key: String) { 
     layer.setAffineTransform(CGAffineTransform(translationX: position.x, y: position.y)) 
     CATransaction.begin() 
     CATransaction.setCompletionBlock { 
      layer.setAffineTransform(CGAffineTransform(translationX: 0, y: 0)) 
     } 
     let theAnimation = CABasicAnimation(keyPath: "transform.translation") 
     theAnimation.isRemovedOnCompletion = false 
     theAnimation.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut) 
     theAnimation.fillMode = kCAFillModeForwards 
     theAnimation.duration = duration 
     theAnimation.beginTime = delay 
     theAnimation.fromValue = fromPosition 
     theAnimation.toValue = toPostion 

     layer.add(theAnimation, forKey: key) 
     CATransaction.commit() 
    } 

und ich rufen Sie die Funktion mit diesem

self.addAnimationOnLayer(layer: self.logoImage.layer, position: CGPoint(x: 0, y:100), duration: 0.8, delay: 0.1, fromPosition: CGPoint(x: 0,y: 100), toPostion: CGPoint(x: 0,y: 0), key: "logoStartAnimation") 

Antwort

1

Vor dem Aufruf CATransaction.begin() Versuch CATransaction.flush() aufrufen.

Ihr Code würde dann wie folgt aussehen:

func addAnimationOnLayer(layer: CALayer, position: CGPoint, duration: TimeInterval, delay: TimeInterval, fromPosition: CGPoint, toPostion: CGPoint, key: String) { 
    layer.setAffineTransform(CGAffineTransform(translationX: position.x, y: position.y)) 
    CATransaction.flush() 
    CATransaction.begin() 
    CATransaction.setCompletionBlock { 
     layer.setAffineTransform(CGAffineTransform(translationX: 0, y: 0)) 
    } 
    let theAnimation = CABasicAnimation(keyPath: "transform.translation") 
    theAnimation.isRemovedOnCompletion = false 
    theAnimation.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut) 
    theAnimation.fillMode = kCAFillModeForwards 
    theAnimation.duration = duration 
    theAnimation.beginTime = delay 
    theAnimation.fromValue = fromPosition 
    theAnimation.toValue = toPostion 

    layer.add(theAnimation, forKey: key) 
    CATransaction.commit() 
} 

geben, dass ein Versuch und lassen Sie mich wissen, ich habe Probleme hatte, bevor sie mit Animationen nicht wegen der Bits früherer Animationen übrig geschieht.

+0

Danke für Ihre Hilfe, es scheint, die Animation ist kaputt (schnell bewegt/übersprungen). sogar ich versuche, die CATransaction Zeug zu entfernen, die Animation immer noch nicht funktioniert – Renandus

Verwandte Themen