IOS开发之自定义状态条

第一种方法:

-(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 <UIKit/UIKit.h>
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设置高点。其他代码基本上都不解释什么,如果要特殊效果,可以自己添加。


IOS开发之自定义状态条,布布扣,bubuko.com

IOS开发之自定义状态条

上一篇:iOS开发:在多平台、设备及64位架构上运行


下一篇:Android架构分析之Handler分析(一)