2012-02-22 7 views
8

Powiel możliwe:
Show activity indicator during application launchDodawanie Activity Indicator programowo widokiem

Wszystko,

Wewnątrz mojego app delegata I stworzył animowany widok powitalny, który wykorzystuje jako domyślną .png. To wszystko działa poprawnie, ale nie wiem, jak wyświetlić wskaźnik ActivityIndicator na wierzchu widoku powitalnego. Jest tam po prostu ukryty w widoku powitalnym. Oto, co mam i dziękuję:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
//... data access stuff here ... 

self.window.rootViewController = self.tabBarController; 
[self.window makeKeyAndVisible]; 

// ... more setup stuff here ... 



/**************************************************************************** 
* 
* 
* Splash Screen for iPhone 
* 
****************************************************************************/ 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 


    splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 320, 480)]; 
    splashView.image = [UIImage imageNamed:@"Default.png"]; 
    [self.window addSubview:splashView]; 
    [self.window bringSubviewToFront:splashView]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.window cache:YES]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)]; 
    splashView.alpha = 0.0; 
    splashView.frame = CGRectMake(-60, -60, 440, 600); 
    [UIView commitAnimations]; 


    //Create and add the Activity Indicator to splashView 
    UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    activityIndicator.alpha = 1.0; 
    activityIndicator.center = CGPointMake(160, 240); 
    activityIndicator.hidesWhenStopped = NO; 
    [splashView addSubview:activityIndicator]; 
    [activityIndicator startAnimating]; 



} 


    return YES; 
} 

Odpowiedz

22

Dla wszystkich tych, którzy to potrzebne, i wiem, było wiele ...
(Wykonane na Xcode wersji 4.2.1)

Więc ...

W AppDelegate.h dodać to:

@property (nonatomic, strong) UIImageView *splashView; 

W AppDelegate.m dodaj to:

Na górze strony cours @synthesize splashView;
A potem:

- (void) splashFade 
{ 
    splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 320, 480)]; 
    splashView.image = [UIImage imageNamed:@"Default.png"]; 
    [_window addSubview:splashView]; 
    [_window bringSubviewToFront:splashView]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:2.0]; 
    [UIView setAnimationDelay:2.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:_window cache:YES]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)]; 
    splashView.alpha = 0.0; 
    [UIView commitAnimations]; 

    //Create and add the Activity Indicator to splashView 
    UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
    activityIndicator.alpha = 1.0; 
    activityIndicator.center = CGPointMake(160, 360); 
    activityIndicator.hidesWhenStopped = NO; 
    [splashView addSubview:activityIndicator]; 
    [activityIndicator startAnimating]; 
} 

- (void)startupAnimationDone:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    [splashView removeFromSuperview]; 
} 

[UIView setAnimationDelay: 2,5] jest odpowiedzialny za jak długo splashView będzie z przodu o czas opóźnienia wybrać.

można zmieniać pozycję wskaźnika zmieniając nubmers X/Y w:
activityIndicator.center = CGPointMake (160, 360);

W końcu, pod Methode:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

Wystarczy dodać to:

[self performSelector:@selector(splashFade) withObject:nil]; 

I nie udać :)
Nadzieję, że pomogło.

Miłego programowania ....

+0

Cześć, co powinien parametr w (void) startupAnimationDone: (NSString *) animationID zakończony: (NSNumber *) zakończony kontekst: (void *) kontekst – morroko

+0

hidesWhenStopped = NO był dla mnie kluczowy, w przeciwnym razie byłby ukryty bez względu na wszystko – noobular

0

Wygląda na to, że ukrywasz (alpha -> 0.0) twój splashView w 0.5sec. Co powinieneś zobaczyć w tym przypadku?

+0

Tak, to tylko daje mi miłe przejście od splashView do głównego widoku. Kiedy to skomentuję, nadal otrzymuję ten sam wynik - ActivityIndicator jest ukryty za splashView – Slinky

0

Czy próbowałeś:

[splashView bringSubviewToFront:activityIndicator]; 
+0

Tak. Uzyskaj taki sam wynik. Problem może polegać na tym, że splashView jest UIImageView. Słyszałem, że czasami umieszczanie subViews na UIImageViews nie działa – Slinky