2009-07-16 16 views
6

Wydaje się, że to dość prosty problem, ale nie udało mi się znaleźć żadnych dobrych odpowiedzi.Jak zaimplementować animację ładowania podczas nawigacji w aplikacji na iPhone'a?

Co próbuję zrobić, to zrobić animację podczas ładowania niektórych funkcji. Zawarłem już animowany plik .gif w aplikacji webapp podczas oczekiwania na zawartość, ale potrzebuję tej samej funkcjonalności podczas nawigacji w natywnym. Na przykład po naciśnięciu przycisku na pasku kart ekran jest pusty, dopóki cała strona nie zostanie załadowana.

To nie musi być nic nadzwyczajnego. Podoba mi się sposób, w jaki jest to rozwiązane w aplikacji na Facebooku z niesławnym "kołem obrotowym" na przykład.

Z góry dziękuję!

Odpowiedz

1

Chyba zależy to od tego, co jest ładowane? Czy czekasz na odpowiedź z serwera? W takim przypadku zwykle umieszczam kołowrotek (UIActivityIndicatorView) w moim widoku, który ma zaznaczone pole wyboru ukrywania, gdy nie jest animowane (jest również komunikat, aby ustawić to również programowo). Następnie, gdy dane są odbierane z serwera, po prostu wywołuję funkcję stopAnimating w widoku UIActivityIndicator, który się ukryje. Następnie możesz pokazać wszystko, co musisz pokazać.

+0

Wygląda na to, czego szukałem. Czy masz przykładowy kod tego? (Wciąż trochę zardzewiałe w Objective-C) –

+0

Jeśli masz kontroler widoku w konstruktorze interfejsów, po prostu dodaj podklasę do własnej podklasy UIViewController. Następnie dodaj widok IBOutlet UIActivityIndicatorView do widoku. Powiedzmy, że wskaźnik IBOutlet UIActivityIndicatorView; Można wtedy po prostu wywołać [wskaźnik startAnimating] lub [wskaźnik stopAnimating]; (Myślę, że to jest właściwa nazwa dla wiadomości – jcb

+0

Ahh przepraszam, nie określiłem tego, ale nie używam IB. Aplikacja jest prawie ukończona, więc wolałbym jej nie używać w tym momencie :) –

3

Możesz dodać UIActivityIndicatorView rzecz tego poglądu jest „loading”:

CGRect mainBounds = [[UIScreen mainScreen] bounds]; 
CGRect indicatorBounds = CGRectMake(mainBounds.size.width/2 - 12, 
    mainBounds.size.height/2 - 12, 24, 24); 
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] 
    initWithFrame:indicatorBounds]]; 
indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; 
[indicator startAnimating]; 
[yourLoadingView addSubview:indicator]; 
+0

Udało mi się dodać wskaźnik, ale niestety nie, kiedy powinienem. Próbuję zrobić to, aby wskaźnik ten pojawiał się podczas przechodzenia z jednej strony na drugą (podczas tworzenia nowego ViewController i żądania nowej strony za pomocą NSURLRequest). Próbowałem przetestować na webView.loading, a następnie uruchomić animację, gdy jest to prawda, ale nic się nie dzieje. Ekran jest nadal biały aż do załadowania nowej strony (i tak, próbowałem z kolorem tła, więc jest widoczny) ... –

26

można dodać UIActivityIndicatorView jako podrzędny do widoku i kiedy akcja się skończy można go usunąć z SuperView ...

UIActivityIndicatorView *av = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease]; 
av.frame=CGRectMake(145, 160, 25, 25); 
av.tag = 1; 
[yourView addSubview:av]; 
[av startAnimating]; 

usunięcie go

UIActivityIndicatorView *tmpimg = (UIActivityIndicatorView *)[yourView viewWithTag:1]; 
[tmpimg removeFromSuperview]; 

nadzieję, że to pomaga ...

+2

Jeśli chcesz, aby wskaźnik był wyśrodkowany w bieżącym widoku, możesz zmienić drugi wiersz kodu do tego: 'av.frame = CGRectMake (round ((yourView.frame.size.width - 25)/2), round ((yourView.frame.size.height - 25)/2), 25, 25) ; ' – arlomedia

+2

Alternatywnie, aby wyśrodkować ... [av setCenter: yourView.center]; –

1

Przy estetyce zauważ, że UIActivityIndicatorView ma kilka wbudowanych stylów do wyboru. Powyższe przykłady kodu używają opcji Szary i Biały, ale jest ich więcej opisanych w dokumentacji firmy Apple. Można ustawić styl za pomocą:

-initWithActivityIndicatorStyle:(UIActivityIndicatorViewStyle) 

lub poprzez ustawienie obiektu activityViewIndicatorStyle nieruchomości.

3

Ah-ha! Właśnie natknąłem się na najbardziej poręczną klasę: MBProgressHUD. Spróbuj. Wierzę, że robi to, czego szukasz, a potem niektóre.

Wpisałem także kilka modów do komentarzy na blogu autora.

+0

Dziękujemy! Wydawało się całkiem przydatne. Dam temu szansę... –

4

Twój problem będzie, że wskaźnik aktywności nie będą wyświetlane, ponieważ zostanie on pokazany tylko na następnym przejściu przez pętlę run - po tym czasie trzeba będzie zrobić wszystko, co trzeba!

Bardzo bardzo bardzo Najprostszym sposobem na to jest, aby przenieść swój kod, aby zadzwonić następnego wgląd własnej metody następnie (po zbudowali UIActivityIndicator jak na innych stanowiskach tutaj) nie

 
[self.myactivityindicator startAnimating]; 
[self performSelector:@selector(myCodeToCallTheView) withObject:nil afterDelay:0]; 

daje to wystarczy szansy na narysowanie wskaźnika przed uruchomieniem kodu w celu narysowania widoku. Oczywiście, gdy pojawi się twój nowy widok, nadpisze on selektor.

Powiązane problemy