2012-10-17 27 views
10

Mam ViewController z wiązką UIImageViews, które muszę wysłać do przodu i animować do centrum widoku.iOS bringSubviewToFront blokowanie animacji UIView

Przed wywołaniem animacji UIView próbowałem wywołać metodę bringSubviewToFront, a co się dzieje, jest to, że widok jest wysyłany na szczyt stosu, ale animacja się nie dzieje (mimo że dziennik programu obsługi kończy się, jak gdyby animacja DID się stało).

drugi raz nacisnąć przycisk, który uruchamia animację (biorąc pod uwagę, że tym razem widok jest już w górnym indeksie, animacja odbywa się tak jak powinien)

Heres mój kod:

- (void)beginAnimationWithSelectedCountry:(UIView *)countryView 
{ 
    if (!countryView) return; 

    [self.view bringSubviewToFront:countryView]; 
    [UIView animateWithDuration:0.6f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
     countryView.center = CGPointMake(self.view.center.x, self.view.center.y); 
    } completion:^(BOOL finished) { 
     NSLog(@"Animation complete"); 
    }]; 
} 

Jakieś myśli? Byłem w tym od wielu godzin. <

Dzięki

EDIT: Gdybym zakomentuj bringSubviewToFront kod wykonuje bezbłędnie z animacji (z wyjątkiem widok jest w niektórych innych poglądów), więc jestem preety pewien problem jest z linią:

[self.view bringSubviewToFront:countryView]; 

Herezje zrzut ekranu, co mam obecnie, które mogą rzucić nieco więcej światła na ten problem: http://d.pr/i/PKoa

+0

Zacznę od tego zwrotu if-return tam i zobaczę, czy twoja metoda jest nawet wywoływana za pierwszym razem z NSLogiem. – CodaFi

+0

Już sprawdziłem, ponieważ napisałem, że dziennik "Animacja zakończona" jest wywoływany oba razy. Dzięki jednak, –

+1

zrób to - umieść animację w drugiej metodzie o nazwie animateCountry, w której umieścisz kod animacji - w metodzie begin wywołaj bringSubViewToFront - następnie wywołaj [self performSelector: animateCountry ... to zadziała. –

Odpowiedz

0

spróbuj dodać UIViewAnimationOptionAllowAnimatedContent do opcji. Jestem prawie pewien, że jest to przypadek tej opcji, ale zagraj z innymi opcjami, jeśli nie. Możesz również spróbować zaplanować blok, aby wykonać animację na następnym runloopie, co jest błogosławieństwem, jak stwierdziłem, z animacjami.

3

Po wywołaniu

[self.view bringSubviewToFront:countryView]; 

wyzwolić nowe wydarzenie Widok układu. Możesz to sprawdzić, ustawiając punkt przerwania w "viewDidLayoutSubviews" na kontrolerze.

Miałem podobny problem: mój własny kod w metodzie "viewDidLayoutSubviews" anulował moją animację, resetując klatki obiektów, które próbowałem animować.

+2

Cześć Barry, dziękuję za poinformowanie nas, co spowodowało awarię. Czy mimo to wiesz o tym problemie? –

6

Call:

[self.view layoutSubviews];

Zaraz po:

[self.view bringSubviewToFront:countryView];

będzie rozwiązać problem.

Powiązane problemy