6

Czy można zmienić odcień z animacją, aby uzyskać bardziej płynny efekt?UINavigationBar change Kolor tinty z animacją

ta nie działa dla mnie:

[UIView beginAnimations:nil context:nil]; 
[self.navigationController.navigationBar setTintColor:[UIColor greenColor]]; 
[UIView commitAnimations]; 

I a nie wiem, czy to jest w ogóle możliwe przy użyciu rodzimych komponentów Apple jako Chyba będą przy użyciu CG do generowania gradientu ... po prostu chcą dowiedzieć się, zanim zacznę budowę moje własne rozwiązanie ...

Cheers faceci :)

+0

Jeśli widzisz ten post, to stary i znaleźć rozwiązanie w innym wątku: http://stackoverflow.com/questions/20377628/transition-color/20396308?noredirect=1# 20396308 – Pull

Odpowiedz

25

Nie uwierzyłbyś w długość, przez którą przeszedłem, aby faktycznie to umożliwić; denerwowało mnie to bez końca, że ​​nie jest to funkcja "iOS" i że przejście odcień tintColor wygląda brzydko, podczas gdy animacja do push/pop viewController jest tak gładka.

Jest tam wiele kodów, które sprawdzają, czy , gdy zanikiem, a nawet napisałem klasę o nazwie PSPDFNavigationAppearanceSnapshot, aby zachować stan nawigacji podczas otwierania. (Mam ten pomysł z niesamowitej NimbusKit)

Rzeczywista animacji jest bardzo proste:

[self.navigationController.navigationBar.layer addAnimation:PSPDFFadeTransition() forKey:nil]; 

CATransition *PSPDFFadeTransition(void) { 
    return PSPDFFadeTransitionWithDuration(0.25f); 
} 

CATransition *PSPDFFadeTransitionWithDuration(CGFloat duration) { 
    CATransition *transition = [CATransition animation]; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionFade; 
    transition.duration = duration; 
    return transition; 
} 

można zagęszczać ten kod nawet więcej; jest to wycinek z mojej biblioteki plików iOS PDF PSPDFKit i używam zanikania w różnych miejscach, a więc funkcje pomocnicze.

+1

Dlaczego w PSPDFFadeTransitionWithDuration masz parametr długości, którego nigdy nie używasz? Sądzę, że zapomniałeś napisać transition.duration = duration –

+0

Prawidłowo, to również trzeba dodać. – steipete

+0

Gdy użytkownik przeciąga krawędź z prawej strony, a następnie przeciąga ekran w lewy tył, widać błysk. Czy jest jakiś sposób aby to naprawić? Aby anulować przejście? –

4

nie można animować bar odcień - wykaz właściwości (na UIView), które można w ten sposób animowany to here.

Nie sądzę, że możesz to zrobić w ogóle, chyba że chcesz nakładać pasek, który ma neutralny odcień z UIView, którego kolor tła się zmienia. backgroundColor jest jedną z właściwości, które można animować. Ale jeśli chcesz umieścić UIView na pasku nawigacyjnym, być może będziesz musiał się sprytnie, nie wiem, jak to zrobić.

Kolejna myśl - podklasy i samodzielne rysowanie w drawRect?

4

Znajdziemy rozwiązanie w innym wątku: Transition Color navBar

Roztwór animowanie Attribut barTinTColor. Oto kod:

self.navigationController.navigationBar.barTintColor = [UIColor redColor]; 
[UIView animateWithDuration:5.0f animations:^{ 
    self.navigationController.navigationBar.barTintColor = [UIColor blueColor]; 
} completion:^(BOOL finished) { 
}]; 
+5

Zatrzymano animację w systemie iOS 10. –

+0

Po prostu dodaj to do pracy na systemie iOS 10 '[self.navigationController.navigationBar layoutIfNeeded];' – PaulRBerg

Powiązane problemy