2015-02-04 5 views
9

Moim celem jest animacja UIImageView. Ogłosiłem NSLayoutConstraint w viewDidLoad. W viewDidLoad użyłem tego kodu:Jak animować NSLayoutConstraint w Swift?

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

Dlaczego nie mój obraz przenieść?

+0

Korzystanie przykładowy kod w swoim pytaniu jak jest! – SwiftArchitect

Odpowiedz

28

Zanim trafisz na numer viewDidLoad, mechanizm ograniczeń nie został jeszcze zastosowany, a lokalizacja początkowa widoków nie została jeszcze ustalona. Możesz więc dodać oryginalne ograniczenia w viewDidLoad, ale będziesz chciał odroczyć animateWithDuration do późniejszego etapu procesu (np. viewDidAppear).


Na przykład, załóżmy, że masz jakieś ograniczenia, które dodaje się w konstruktora Interface (IB). Możesz dodać @IBOutlet odniesienie do niej przez sterowania -dragging od przymusu w zarysie dokumentu w lewym panelu interfejsu Builder dół do asystent montażysty:

enter image description here

Teraz masz odniesienie do że ograniczenie, można teraz programowo zmienić wartość constant dla tego ograniczenia (ale znowu to zrobić w viewDidAppear, nie viewDidLoad, jeśli chcesz zobaczyć ten animowany gdy widok jest prezentowany):

@IBOutlet weak var topConstraint: NSLayoutConstraint! 

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

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

Proces jest taki sam dla tworzonych programowo wiązań. Wystarczy zapisać odniesienie do ograniczenia, a następnie viewDidAppear zaktualizować constant, a następnie animować połączenie do layoutIfNeeded().

+0

Proszę podać szczegółowe wyjaśnienia ... – Tuhin

+0

Jeśli jest to możliwe, to proszę napisać kod z objaśnieniami ... Dziękuję za odpowiedź. – Tuhin

+0

@ iCrunCher - Zobacz poprawioną odpowiedź. – Rob

6

Proszę ustawić ograniczenia w viewDidAppear i spróbuj poniżej korekty

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

rozwiązało to moje problemy z animacją, dzięki za kilka! –