2013-05-29 8 views
10

Mam tu do czynienia z dziwnym problemem.Orientacja bez animacji daje dziwny wynik, gdy obecny jest UIAlertView

Z jakiegoś powodu jestem wyłączenie animacji podczas zmiany orientacji moim zdaniem regulatora przy użyciu [UIView setAnimationsEnabled:NO];
ale gdy alert widok jest obecny i jeśli zmienię orientację to daje wynik dziwne.

Załączony zrzut ekranu dotyczy zmiany orientacji na poziomy.

landscape mode

Uwaga: używam standardowego UIAlertView i jest domyślnym nakładka, która pojawia się, kiedy alert widok jest obecny i nie chodzi tu dostosowywania.

Jak na documentation

If you disable animations, code inside subsequent animation blocks is still executed but no animations actually occur. Thus, any changes you make inside an animation block are reflected immediately instead of being animated.

Więc to nie powinno mieć wpływu na zmianę rozmiaru domyślnego nakładki. Is it a restriction in disabling animation !??

Nie rozumiem, dlaczego się tak zachowuję. Czy ktoś mógłby pomóc w rozwiązaniu tego problemu.

+0

Więc najpierw wyświetlając 'UIAlertView' a następnie obracając urządzenie, prawda? Lub wyświetlać go podczas rotacji? –

+0

Wyświetlam "UIAlertView", a następnie obracam urządzenie. –

+0

To dość dziwne, ponieważ o ile pamiętam, kiedy wyświetlany jest "UIAlertView", obrót jest automatycznie wyłączany. –

Odpowiedz

0

Wydaje się to być błąd w iOS6 i poniżej i jest ustalona w iOS7.

iOS alert view without animation

4

Po ustawieniu [UIView setAnimationsEnabled:NO];, UIAlertView nie zmienia rozmiaru widoku nakładki (myślę, że to błąd).

Opcjonalnie można ograniczyć orientację, gdy widok alertu jest wyświetlany na ekranie w następujący sposób.

Utwórz zmienną BOOL w pliku .h.

BOOL shouldRotate; 

zainicjować go z YES w viewDidload.

A kiedy pokażesz alert w tym czasie zrobić shouldRotate = NO;

i wdrożenie UIAlertView delegata następująco:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    shouldRotate = YES; 
} 

nadzieję, że pomoże.

Edit: jak chcesz zarówno brak animacji i rotacji z sygnalizacją widzenia

Właściwie jest to hack, ale działa,

alert jest obiektem UIAlertView „s zadeklarowane w pliku .h.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    if (UIInterfaceOrientationPortrait == UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) { 
     UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; 
     imgView.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); 
    } 
    else{ 
     UIImageView *imgView = (UIImageView *)[alert.superview.subviews objectAtIndex:0]; 
     imgView.frame = CGRectMake(0.0, 0.0, 320.0, 480.0); 
    } 
} 
+0

Dzięki za odpowiedź, znam tę alternatywę, ale muszę podać obie, więc nie mogę tego użyć. –

+1

W rzeczywistości UIAlertView zarządza widokiem nakładki z animacją transformacji (jak na mój debugowanie UIAlertView), a po wyłączeniu animacji dla UIView ta część nie zostanie wykonana, a widok nakładki nie zmienia rozmiaru zgodnie z potrzebą. – Yuvrajsinh

+0

@prasaddevadiga Edytowałem swoją odpowiedź i powinno to rozwiązać twój problem. – Yuvrajsinh

3

Inną możliwością poradzenia sobie z tym błędem byłoby programistyczne odrzucenie widoku alertu przed obrotem i wyświetlenie nowego po zakończeniu obrotu.

To będzie automatycznie działać dla dowolnego urządzenia z systemem iOS niezależnie od rozmiaru ekranu.

Powiązane problemy