自定义iOS的状态栏

来源:互联网 发布:游戏门户网站源码php 编辑:程序博客网 时间:2024/06/07 17:59
  有时候,需要在状态栏上显示一些自定义信息,比如新浪微博的官方iOS客户端:告知用户信息处于发送队列、发送成功或者发送失败。
 
  如下图,通过在状态栏显示自定义信息,可以给用户友好又不影响软件使用的提示。
 

  为此,我们显得定义一个自定义状态栏类,包含一个显示信息的Label:
?
1
2
3
4
5
6
7
8
9
@interface CustomStatusBar : UIWindow
{
    UILabel*_messageLabel;
}
 
- (void)showStatusMessage:(NSString *)message;
- (void)hide;
 
@end
   接着,设置大小和系统状态栏一致,背景为黑色:
?
1
2
self.frame = [UIApplicationsharedApplication].statusBarFrame;
self.backgroundColor = [UIColor blackColor];

   到这里,为了让自定义的状态栏可以让用户看到,还需要设置它的windowLevel。

   在iOS中,windowLevel属性决定了UIWindow的显示层次。默认的windowLevel为UIWindowLevelNormal,即0.0。
 
    系统定义了三个层次如下,具体可参考官方文档:
?
1
2
3
4
const UIWindowLevelUIWindowLevelNormal;
const UIWindowLevelUIWindowLevelAlert;
const UIWindowLevelUIWindowLevelStatusBar;
typedef CGFloat UIWindowLevel;

   为了能够覆盖系统默认的状态栏,我们把自定义的状态栏的windowLevel调高点:

?
1
self.windowLevel = UIWindowLevelStatusBar + 1.0f;

   最后,为显示信息和隐藏添加一点无伤大雅的动画:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- (void)showStatusMessage:(NSString *)message
{
    self.hidden= NO;
    self.alpha= 1.0f;
    _messageLabel.text= @"";
 
    CGSizetotalSize =self.frame.size;
    self.frame= (CGRect){ self.frame.origin, 0, totalSize.height };
 
    [UIViewanimateWithDuration:0.5fanimations:^{
        self.frame= (CGRect){ self.frame.origin, totalSize };
    }completion:^(BOOLfinished){
        _messageLabel.text= message;
    }];
}
 
- (void)hide
{
    self.alpha= 1.0f;
 
    [UIViewanimateWithDuration:0.5fanimations:^{
        self.alpha= 0.0f;
    }completion:^(BOOLfinished){
        _messageLabel.text= @"";
        self.hidden= YES;
    }];;
}
0 0
原创粉丝点击