Frage

Wenn eine asynchrone HTTP-Anforderung zu tun, ich verstecke die iPhone-Statusleiste und belebter in meinem eigenen benutzerdefinierten UIViewController Upload-Status zu zeigen. Anstatt also die Signalstärke des Sehens, Träger, Zeit und Akkulaufzeit, erhält der Benutzer Nachrichten basierend auf dem Fortschritt der HTTP-Anforderung. Meine Statusleiste ist genau 20px hoch und paßt gut, wo die Statusleiste verwendet werden. Wenn die HTTP-Aktivität erfolgt, belebt die benutzerdefinierte Ansicht und die iPhone-Statusleiste belebt wieder in.

würde ich nur vermeiden, wie die iPhone-Statusleiste vollständig versteckt und stattdessen bringt meine benutzerdefinierte Ansicht Aufeinander der Statusleiste. Derzeit, wenn ich meine benutzerdefinierte Ansicht Animation aufrufen und halten Sie die iPhone-Statusleiste Set sichtbar, meine benutzerdefinierte Ansicht ist dahinter.

Dies ist der Code, den ich habe:

-(void) animateStatusBarIn {
        CGRect statusFrame = CGRectMake(0.0f, -20.0f, 320.0f, 20.0f);
        UploadStatusBar *statusView = [[UploadStatusBar alloc] initWithNibName:@"UploadStatusBar" bundle:nil];
    self.status = statusView;
    [statusView release];
    status.view.frame = statusFrame;
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
    [window addSubview:status.view];
    [UIView beginAnimations:@"slideDown" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:)];
    status.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, 20.0f);
    [UIView commitAnimations];

}   

-(void) animateStatusBarOut {
    [UIView beginAnimations:@"slideUp" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:)];
    status.view.frame = CGRectMake(0.0f, -20.0f, 320.0f, 20.0f);
    [UIView commitAnimations];
}

-(void)animationFinished:(NSString *)name {
    if ([name isEqualToString:@"slideDown"]) {

    }
    if ([name isEqualToString:@"slideUp"]) {
            [[UIApplication sharedApplication]setStatusBarHidden:NO animated:YES];
        [status.view removeFromSuperview];
    }


}

Ohne den [[UIApplication shared] setStatusBarHidden: JA animierte: JA] Sie können sehen, nicht meine benutzerdefinierte Ansicht. Wie kann ich meine benutzerdefinierte Ansicht bekommen nur oben auf der Statusleiste angezeigt, damit ich es nicht verbergen?

Danke!

War es hilfreich?

Lösung

Make your special view its own UIWindow. Set the UIWindow's windowLevel to UIWindowLevelStatusBar. If it still isn't on top, you can use bringSubviewToFront: on the UIWindow (remember, a UIWindow is a UIView) to bring it to the top of that level.

Andere Tipps

Answer here:

Add UIView Above All Other Views, Including StatusBar

Have to create a UIWindow and set it's windowLevel property to statusBarLevel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top