2015-02-04 6 views
9

Mein Ziel ist es, eine UIImageView zu animieren. Ich habe eine NSLayoutConstraint in viewDidLoad erklärt. In viewDidLoad, habe ich diesen Code:Wie animiere ich eine NSLayoutConstraint in Swift?

UIView.animateWithDuration(1, animations: { 
    myConstraint.constant = 100 
    self.view.layoutIfNeeded() 
}, completion: {finished in }) 

Warum mein Bild bewegt sich nicht?

+0

das Codebeispiel in Ihrer Frage verwenden, wie sie ist! – SwiftArchitect

Antwort

28

Wenn Sie viewDidLoad erreichen, wurde die Constraints-Engine noch nicht angewendet und der Startort der Ansichten wurde noch nicht festgelegt. Fühlen Sie sich also frei, die ursprünglichen Einschränkungen in viewDidLoad hinzuzufügen, aber Sie werden die animateWithDuration bis später in dem Prozess (z. B. viewDidAppear) verschieben möchten.


Nehmen wir zum Beispiel an, Sie haben eine Einschränkung, die Sie in Interface Builder (IB) hinzugefügt haben. Sie können einen @IBOutlet Verweis auf mich durch Steuer -dragging von der Einschränkung in der Dokumentgliederung im linken Fenster im Interface Builder hinunter zum Assistenten Editor hinzufügen:

enter image description here

Nun, da Sie einen Verweis auf dass Zwang, können Sie nun den constant Wert für diese Einschränkung programmatisch ändern (aber auch hier tun dies in viewDidAppear, nicht viewDidLoad, wenn Sie diese animierte sehen wollen, wenn die Ansicht dargestellt wird):

@IBOutlet weak var topConstraint: NSLayoutConstraint! 

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    topConstraint.constant = 100 
    UIView.animateWithDuration(2.0) { 
     self.view.layoutIfNeeded() 
    } 
} 

Der Prozess ist derselbe für programmatisch erstellte Einschränkungen. Speichern Sie einfach einen Verweis auf die Einschränkung und aktualisieren Sie dann in viewDidAppear die constant und animieren Sie dann den Aufruf an layoutIfNeeded().

+0

Bitte fügen Sie einige Detailerläuterungen hinzu ... – Tuhin

+0

Wenn es Ihnen möglich ist, dann senden Sie bitte einen Code mit den Erklärungen ... Danke übrigens für Ihre Antwort .. – Tuhin

+0

@iCrunCher - Siehe überarbeitete Antwort. – Rob

6

Bitte geben Sie Ihre Einschränkung in viewDidAppear und versuchen, unter Korrektur

myConstant = 100 
myConstraint.constant = myConstant 
UIView.animateWithDuration(1, animations: { 
self.view.layoutIfNeeded() 
}, completion: {finished in }) 
+0

das löste meine Animationsprobleme, danke ein Haufen !!! –

Verwandte Themen