第一種方法:
-(void)setRefreshWindow{ CGRect frame = CGRectMake(0.0, 0.0, 320.0, 20.0); statusbarWindow = [[UIWindow alloc] initWithFrame:frame]; [statusbarWindow setBackgroundColor:[UIColor clearColor]]; [statusbarWindow setWindowLevel:UIWindowLevelStatusBar+1.0f]; // 添加自定義子視圖 UIImageView *customView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 0, 120, 18)]; customView.image=[UIImage imageNamed:@"數據刷新欄.png"]; // UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(100, 0, 100, 20)]; // // label.backgroundColor=[UIColor clearColor]; // label.text=@"數據正在刷新"; // [customView addSubview:label]; [statusbarWindow addSubview:customView]; [statusbarWindow makeKeyAndVisible]; }
第二種方法:
如果需要在狀態欄顯示自定義的消息時,就需要自定義狀態欄。
代碼如下:
XYCustomStatusBar.h
01
#import
02
03
@interface
XYCustomStatusBar : UIWindow{
04
05
UILabel
*_messageLabel;
06
}
07
08
-
(
void
)showStatusMessage:(NSString
*)message;
09
10
-
(
void
)hide;
11
12
@end
XYCustomStatusBar.m
01
#import
"XYCustomStatusBar.h"
02
03
@implementation
XYCustomStatusBar
04
05
-
(
void
)dealloc{
06
[super
dealloc];
07
[_messageLabel
release], _messageLabel = nil;
08
}
09
10
-
(id)init{
11
self
= [super init];
12
if
(self)
{
13
self.frame
= [UIApplication sharedApplication].statusBarFrame;
14
self.backgroundColor
= [UIColor blackColor];
15
self.windowLevel
= UIWindowLevelStatusBar + 1.0f;
16
17
_messageLabel
= [[UILabel alloc] initWithFrame:self.bounds];
18
[_messageLabel
setTextColor:[UIColor whiteColor]];
19
[_messageLabel
setTextAlignment:NSTextAlignmentRight];
20
[_messageLabel
setBackgroundColor:[UIColor clearColor]];
21
[self
addSubview:_messageLabel];
22
}
23
24
return
self;
25
}
26
27
-
(
void
)showStatusMessage:(NSString
*)message{
28
self.hidden
= NO;
29
self.alpha
= 1.0f;
30
_messageLabel.text
= @
""
;
31
32
CGSize
totalSize = self.frame.size;
33
self.frame
= (CGRect){ self.frame.origin, 0, totalSize.height };
34
35
[UIView
animateWithDuration:0.5 animations:^{
36
self.frame
= (CGRect){self.frame.origin, totalSize };
37
}
completion:^(
BOOL
finished){
38
_messageLabel.text
= message;
39
}];
40
41
}
42
43
44
-
(
void
)hide{
45
self.alpha
= 1.0f;
46
47
[UIView
animateWithDuration:0.5f animations:^{
48
self.alpha
= 0.0f;
49
}
completion:^(
BOOL
finished){
50
_messageLabel.text
= @
""
;
51
self.hidden
= YES;
52
}];
53
}
54
55
@end
為了讓自定義的狀態欄可以讓用戶看到,設置了它的windowlevel,在ios中,windowlevel屬性決定了UIWindow的顯示層次,默認的windowlevel為UIWindowLevelNormal,即0.0 。為了能覆蓋默認的狀態欄,將windowlevel設置高點。其他代碼基本上都不解釋什麼,如果要特殊效果,可以自己添加。