[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; //顯示
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; //隱藏
讓狀態欄顯示網絡等待標志
狀態欄是可以通過UIApplication類提供的一些方法來修改的,比如完全去掉狀態欄或者修改風格,不過這些改變只是在你的程序內部,當你退出你的程序又會復原。
UIApplication *myApp = [UIapplication sharedApplication];
1.隱藏狀態欄
[myApp setStatusBarHidden:YES animated:YES];
記得隱藏狀態欄後的你的“桌面”就增加320×20的大小,所以最好是在任何window或者view創建之前隱藏它。
2.狀態欄風格
[myApp setStatusBarStyle: UIStatusbarStyleBlackOpaque];
typedef enum {
UIStatusBarStyleDefault,
UIStatusBarStyleBlackTranslucent,
UIStatusBarStyleBlackOpaque
} UIStatusBarStyle;
3.狀態欄方向
[myApp setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
//豎屏,垂直向上
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
//豎屏,垂直方向上下顛倒
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
//設備逆時針旋轉到橫屏模式
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
//設備順時針旋轉到橫屏模式
} UIInterfaceOrientation;
有時候,需要在狀態欄上顯示一些自定義信息,比如新浪微博的官方iOS客戶端:告知用戶信息處於發送隊列、發送成功或者發送失敗。
如上圖,通過在狀態欄顯示自定義信息,可以給用戶友好又不影響軟件使用的提示。
為此,我們顯得定義一個自定義狀態欄類,包含一個顯示信息的Label:
@interface CustomStatusBar : UIWindow
{
UILabel *_messageLabel;
}
- (void)showStatusMessage:(NSString *)message;
- (void)hide;
@end
接著,設置大小和系統狀態欄一致,背景為黑色:
self.frame = [UIApplication sharedApplication].statusBarFrame;
self.backgroundColor = [UIColor blackColor];
到這裡,為了讓自定義的狀態欄可以讓用戶看到,還需要設置它的windowLevel。
在iOS中,windowLevel屬性決定了UIWindow的顯示層次。默認的windowLevel為UIWindowLevelNormal,即0.0。
系統定義了三個層次如下,具體可參考官方文檔:
[cpp]
const UIWindowLevel UIWindowLevelNormal;
const UIWindowLevel UIWindowLevelAlert;
const UIWindowLevel UIWindowLevelStatusBar;
typedef CGFloat UIWindowLevel;
為了能夠覆蓋系統默認的狀態欄,我們把自定義的狀態欄的windowLevel調高點:
[cpp]
self.windowLevel = UIWindowLevelStatusBar + 1.0f;
最後,為顯示信息和隱藏添加一點無傷大雅的動畫:
[cpp]
- (void)showStatusMessage:(NSString *)message
{
self.hidden = NO;
self.alpha = 1.0f;
_messageLabel.text = @"";
CGSize totalSize = self.frame.size;
self.frame = (CGRect){ self.frame.origin, 0, totalSize.height };
[UIView animateWithDuration:0.5f animations:^{
self.frame = (CGRect){ self.frame.origin, totalSize };
} completion:^(BOOL finished){
_messageLabel.text = message;
}];
}
- (void)hide
{
self.alpha = 1.0f;
[UIView animateWithDuration:0.5f animations:^{
self.alpha = 0.0f;
} completion:^(BOOL finished){
_messageLabel.text = @"";
self.hidden = YES;
}];;