2017-07-21 7 views
2

J'essaye d'animer la position d'un objet UIView avec CABasicAnimation sur un bouton Tap. L'objet s'anime et se déplace vers la position "to", mais revient à la position d'origine une fois l'animation terminée. Je souhaite conserver la position de l'objet de vue même après la fin de l'animation. C'est l'extrait de code qui effectue l'animation. viewObject est l'objet que j'essaie d'animer.L'objet d'animation iOS revient à sa position d'origine

let animation = CABasicAnimation(keyPath: "position") 
animation.timingFunction = CAMediaTimingFunction(controlPoints: 0.86, 0, 0.07, 1.0) 
animation.duration = 0.5 
animation.fromValue = NSValue(cgPoint: CGPoint(x: viewObject.center.x, y: viewObject.center.y)) 
animation.toValue = NSValue(cgPoint: CGPoint(x: viewObject.center.x + 64, y: viewObject.center.y)) 
viewObject.layer.add(animation, forKey: "position") 
+0

animation.fillMode = kCAFillModeForwards; animation.removedOnCompletion = NON; –

+0

s'il vous plaît essayez ceci –

+0

Cela a résolu le problème. Mais je ne comprends pas pourquoi je devrais définir la propriété fillMode. – SarwanKumr

Répondre

1

ajoutez ce qui suit les lignes avant d'ajouter l'animation

animation.isRemovedOnCompletion = false 
animation.fillMode = kCAFillModeForwards 
0
UIView.animateWithDuration(0.7, delay: 1.0, options: .CurveEaseOut, animations: 
{ 
    Code 
}, completion: 
{ 
    finished in 
    println("Nothing to do!") 
}) 

Il suffit de faire l'animation dans un bloc et quand il se termine. maintenez cette position et ne retournez pas. Il doit rester à la même position

et ajoutez cette ligne dans le code cabasicanimation.removedOnCompletion = false; Cette ligne faire ne retourne pas dans le même état

+0

Ceci est une ancienne syntaxe. Au moins vérifier avant de répondre. –

2

S'il vous plaît ajoutez le code suivant:

Objectif C:

animation.fillMode = kCAFillModeForwards; 
animation.removedOnCompletion = NO; 

Swift 3:

animation.isRemovedOnCompletion = false 
animation.fillMode = kCAFillModeForwards 
0

Je pense que vous devez donner à nouveau cadre à la fin. Donc, cela peut être une bonne approche

UIView.animate(withDuration: 0.7, delay: 1.0, options: .curveLinear, animations: { 

    let animation = CABasicAnimation(keyPath: "position") 
    animation.timingFunction = CAMediaTimingFunction(controlPoints: 0.86, 0, 0.07, 1.0) 
    animation.duration = 0.5 
    animation.fromValue = NSValue(cgPoint: CGPoint(x: self.viewObject.center.x, y: self.viewObject.center.y)) 
    animation.toValue = NSValue(cgPoint: CGPoint(x: self.viewObject.center.x + 64, y: self.viewObject.center.y)) 
    self.viewObject.layer.add(animation, forKey: "position") 

}, completion: { finished in 
    self.viewObject.frame.origin.x = self.viewObject.frame.origin.x + 64 

}) 

Essayez ceci. Cela fonctionnera parfaitement