2012-11-05 33 views
15

Tutaj znalazłem jak animować UIButton „s zmiany tytułowy stosując teraz-przestarzałe beginAnimations:context: metody:animować UIButton zmieniają

UIBUtton title animation for iPhone

jak zrobić to samo przy użyciu bieżących API?

Aktualizacja:

Próbowałem użyć bloku animacji opartej:

NSTimeInterval animationDuration = animated ? 1.f : 0.f; 
[UIView animateWithDuration:animationDuration delay:0.f options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionAllowUserInteraction animations:^{ 
    [button setTitle:newTitle forState:UIControlStateNormal]; 
    [button setTitleColor:newTitleColor forState:UIControlStateNormal]; 
} completion:nil]; 

Zmiana koloru nie jest animowana.

+0

Proszę sprawdzić dokumentację, tt wszystko jest wyjaśnione w odniesieniu UIView: http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview /uiview.html z jasnym wyjaśnieniem zamiennika 'beginAnimations: context:'. –

Odpowiedz

44

Stosować bloki:

[UIView transitionWithView:self.flipLabelButton duration:1 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{ 

    [self.flipLabelButton setTitle:newText forState:UIControlStateNormal]; 

} completion:nil]; 
+0

I to wszystko? Sądziłem, że tylko te właściwości, które są udokumentowane jako "animowalne", mogą być animowane w ten sposób. Albo nie? –

+0

jeśli korzystałeś z funkcji animacji ya, ale funkcje przejścia działają dla wszystkiego, ponieważ dotyczą całego widoku. – jjv360

+0

Zaktualizowałem moje pytanie. Nadal nie animuje. Jakieś pomysły? –

5

Oprócz AnimationGroups istnieją generalnie dwa rodzaje animacji, jeden jest dla animacji nieruchomości, druga jest dla animacji coś jak treści, przejścia lub czegokolwiek, co nie może wykorzystać własność robić animację. więc drugie rozwiązanie jest twój wybór, a można to osiągnąć na dwa sposoby: użycie CATransition:

CATransition *transition = [CATransition animation]; 
transition.type = kCATransitionFade; 
transition.duration = 1; 
[button.layer addAnimation:transition forKey:kCATransition]; 
[button setTitle:newTitle forState:UIControlStateNormal]; 
[button setTitleColor:newColor forState:UIControlStateNormal]; 

drugim sposobem jest użycie bloku UIKit jak @ jjv360 powiedział ale nie można animować kolor w środku, ponieważ oczywiście kolorów nie można odwrócić.

8

Swift 3

UIView.transition(with: button, duration: 0.5, options: .transitionCrossDissolve, animations: { 
    self.button.setTitle("WOW, new title", for: .normal) 
    self.button.setTitleColor(UIColor.red, for: .normal) 
}, completion: nil)