2012-10-13 6 views
7

Wie funktioniert Twitter offizielle iOS-App-Statusleiste mit benutzerdefinierten Text

Die neue offizielle Twitter App für iOS über statusbar ändert wie im Bild ändert. Wie implementiert man solch ein Feature?

[image source]

+3

Als Verbraucher von iOS-Apps mag ich es nicht, wenn Apps dies tun. Die Statusleiste ist nicht Teil der App. Es ist Teil des Systems. Fass sie nicht an. Es ist nicht deins, mit denen du dich herumschlagen musst. Sie haben einen ganzen Rest des Bildschirms, um eine kreative Benutzeroberfläche zu erstellen. Bitte lass diesen Bereich alleine. –

Antwort

14

Hier ist, wie ich es in meiner app mit einer rotierenden Animation tun:

-(void)showStatusBarMessage:(NSString *)message hideAfter:(NSTimeInterval)delay 
{ 
    __block UIWindow *statusWindow = [[UIWindow alloc] initWithFrame:[UIApplication sharedApplication].statusBarFrame]; 
    statusWindow.windowLevel = UIWindowLevelStatusBar + 1; 
    UILabel *label = [[UILabel alloc] initWithFrame:statusWindow.bounds]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.backgroundColor = [UIColor blackColor]; 
    label.textColor = [UIColor grayColor]; 
    label.font = [UIFont boldSystemFontOfSize:13]; 
    label.text = message; 
    [statusWindow addSubview:label]; 
    [statusWindow makeKeyAndVisible]; 
    label.layer.transform = CATransform3DMakeRotation(M_PI * 0.5, 1, 0, 0); 
    [UIView animateWithDuration:0.7 animations:^{ 
     label.layer.transform = CATransform3DIdentity; 
    }completion:^(BOOL finished){ 
     double delayInSeconds = delay; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      [UIView animateWithDuration:0.5 animations:^{ 
       label.layer.transform = CATransform3DMakeRotation(M_PI * 0.5, -1, 0, 0); 
      }completion:^(BOOL finished){ 
       statusWindow = nil; 
       [[[UIApplication sharedApplication].delegate window] makeKeyAndVisible]; 
      }]; 
     }); 
    }]; 
} 

ich es in einer Kategorie auf UIViewController habe, es zu benutzen egal aus welchem ​​Controller in der App.

BEARBEITEN: Benötigt QuartzCore.framework um referenziert zu werden und #import <QuartzCore/QuartzCore.h> hinzugefügt werden.

+0

Ich fragte mich wirklich, was die Logik dahinter war, können Sie bitte ein wenig erklären? Verstecken sie die Statusleiste und zeigen ihre oder was? –

+0

Wenn sie nicht sagen, wie sie es tun, können Sie nur davon ausgehen, wie sie es tun.Ich füge nur eine UIWindow-Instanz oben zu verstecken, eine Beschriftung hinzufügen, die Animation machen und dann das Fenster entfernen – Moxy

+0

Vielen Dank, ich werde Probier es mal aus. –

Verwandte Themen