中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

iOS瘋狂詳解之自定義狀態欄代碼解析
來源:易賢網 閱讀:1037 次 日期:2015-01-22 09:37:57
溫馨提示:易賢網小編為您整理了“iOS瘋狂詳解之自定義狀態欄代碼解析”,方便廣大網友查閱!

這里說明一下,Apple沒有開放的狀態欄的API,在ios 的官方文檔沒有提到修改Window Level的方式;

先看一下Window Level的可用的值包括:

1: typedef CGFloat UIWindowLevel;

2: const UIWindowLevel UIWindowLevelNormal; // 0.0

3: const UIWindowLevel UIWindowLevelAlert; // 2000.0

4: const UIWindowLevel UIWindowLevelStatusBar; // 1000.0

默認我們的UIView layer都是在UIWindowLevelNormal上,這也就是為什么系統彈出來的對話框在我們的視圖之上,因為它的Window Level級別更高。

根據WindowLevel的原理我們也就知道,如果想在系統的狀態欄上,添加自定義的狀態欄,就需要比UIWindowLevelStatusBar的級別更高,接下來,用代碼說明一下:

首先,先建一個Single View Application,名字自定義就可以了,

然后,新建一個類命名為: StatusBarOverlay 繼承自UIWindow類,代碼:

StatusBarOverlay.h文件

1: #import

2:

3: @interface StatusBarOverlay : UIWindow{

4: UIView *contentView;

5: UILabel *textLabel;

6: }

7:

8: @property (nonatomic, retain) UIView *contentView;

9:

10: @property (nonatomic, retain) UILabel *textLabel;

11:

12: @end

StatusBarOverlay.m文件

1: //

2: // StatusBarOverlay.m

3: // StatusBarDemo

4: //

5: // Created by jordy wang on 12-8-7.

6: // Copyright (c) 2012年 __MyCompanyName__. All rights reserved.

7: //

8:

9: #import "StatusBarOverlay.h"

10:

11: #define STATUS_BAR_ORIENTATION [UIApplication sharedApplication].statusBarOrientation

12: #define ROTATION_ANIMATION_DURATION [UIApplication sharedApplication].statusBarOrientationAnimationDuration

13:

14:

15: @interface StatusBarOverlay()

16:

17: - (void)initializeToDefaultState;

18: - (void)rotateStatusBarWithFrame:(NSValue *)frameValue;

19: - (void)setSubViewHFrame;

20: - (void)setSubViewVFrame;

21: @end

22:

23:

24: @implementation StatusBarOverlay

25: @synthesize contentView;

26: @synthesize textLabel;

27:

28: //重寫init方法

29: - (id)init

30: {

31: self = [super initWithFrame:CGRectZero];

32: if (self) {

33: self.windowLevel = UIWindowLevelStatusBar + 1;

34: self.frame = [UIApplication sharedApplication].statusBarFrame;

35: [self setBackgroundColor:[UIColor orangeColor]];

36: [self setHidden:NO];

37:

38: //內容視圖

39: UIView *_contentView = [[UIView alloc] initWithFrame:self.bounds];

40: self.contentView = _contentView;

41: [self.contentView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];

42: [self.contentView setBackgroundColor:[UIColor cyanColor]];

43: [self addSubview:self.contentView];

44: [_contentView release];

45:

46:

47: //添加textLabel

48: UILabel *_textLabel = [[UILabel alloc] initWithFrame:CGRectMake(30, 0, CGRectGetWidth(self.frame)-60, CGRectGetHeight(self.frame))];

49: self.textLabel = _textLabel;

50: [self.textLabel setBackgroundColor:[UIColor blueColor]];

51: [self.textLabel setFont:[UIFont systemFontOfSize:12]];

52: [self.textLabel setTextAlignment:UITextAlignmentCenter];

53: [self.textLabel setTextColor:[UIColor blackColor]];

54: [self.textLabel setText:@"自定義的狀態欄 author by jordy"];

55: [self.contentView addSubview:self.textLabel];

56: [_textLabel release];

57:

58: //注冊監聽---當屏幕將要轉動時,所出發的事件(用于操作本視圖改變其frame)

59: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willRotateScreenEvent:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil];

60: //初始化

61: [self initializeToDefaultState];

62: }

63:

64: return self;

65: }

66:

67:

68:

69:

70: //初始化為默認狀態

71: - (void)initializeToDefaultState

72: {

73: //獲取當前的狀態欄位置

74: CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;

75: //設置當前視圖的旋轉, 根據當前設備的朝向

76: [self rotateStatusBarWithFrame:[NSValue valueWithCGRect:statusBarFrame]];

77:

78:

79:

80: }

81:

82:

83: //旋轉屏幕

84: - (void)rotateStatusBarWithFrame:(NSValue *)frameValue

85: {

86: CGRect frame = [frameValue CGRectValue];

87: UIInterfaceOrientation orientation = STATUS_BAR_ORIENTATION;

88:

89: if (orientation == UIDeviceOrientationPortrait) {

90: self.transform = CGAffineTransformIdentity; //屏幕不旋轉

91: [self setSubViewVFrame];

92: }else if (orientation == UIDeviceOrientationPortraitUpsideDown) {

93: self.transform = CGAffineTransformMakeRotation(M_PI); //屏幕旋轉180度

94: [self setSubViewVFrame];

95: }else if (orientation == UIDeviceOrientationLandscapeRight) {

96: self.transform = CGAffineTransformMakeRotation((M_PI * (-90.0f) / 180.0f)); //屏幕旋轉-90度

97: [self setSubViewHFrame];

98: }else if (orientation == UIDeviceOrientationLandscapeLeft){

99: self.transform = CGAffineTransformMakeRotation(M_PI * 90.0f / 180.0f); //屏幕旋轉90度

100: [self setSubViewHFrame];

101: }

102:

103: self.frame = frame;

104: [self.contentView setFrame:self.bounds];

105: }

106:

107: //設置橫屏的子視圖的frame

108: - (void)setSubViewHFrame

109: {

110: self.textLabel.frame = CGRectMake(30, 0, 1024-60, 20);

111: }

112: //設置豎屏的子視圖的frame

113: - (void)setSubViewVFrame

114: {

115: self.textLabel.frame = CGRectMake(30, 0, 748-60, 20);

116: }

117:

118: #pragma mark -

119: #pragma mark 響應屏幕即將旋轉時的事件響應

120: - (void)willRotateScreenEvent:(NSNotification *)notification

121: {

122: NSValue *frameValue = [notification.userInfo valueForKey:UIApplicationStatusBarFrameUserInfoKey];

123: [self rotateStatusBarAnimatedWithFrame:frameValue];

124: }

125:

126: - (void)rotateStatusBarAnimatedWithFrame:(NSValue *)frameValue {

127: [UIView animateWithDuration:ROTATION_ANIMATION_DURATION animations:^{

128: self.alpha = 0;

129: } completion:^(BOOL finished) {

130: [self rotateStatusBarWithFrame:frameValue];

131: [UIView animateWithDuration:ROTATION_ANIMATION_DURATION animations:^{

132: self.alpha = 1;

133: }];

134: }];

135: }

136:

137: - (void)dealloc

138: {

139: [[NSNotificationCenter defaultCenter] removeObserver:self];

140: [textLabel release];

141: textLabel = nil;

142:

143: [contentView release];

144: contentView = nil;

145:

146: [super dealloc];

147: }

148:

149: @end

由于代碼比較簡單,并且我在上述代碼里有相應的注釋,這里需要說明一點的是,默認我們繼承自UIWindow的StatusBarOverlay類是hidden狀態,需要在初始化的時候設置它的hidden屬性為NO,

在屏幕旋轉過程中,自定義的狀態欄與UIViewController之間的旋轉是分離的,所以我們需要做一個隱藏的動畫,在旋轉過程前先隱藏自定義的狀態欄,旋轉結果后設置顯示狀態。

如果需要做一種動畫,比方從底部下移顯示一條信息,隔N秒后又自動收回的動畫,直接設置自定義的視圖的y坐標就可以了,默認y坐標設置是0。

最后, 使用它的方式也比較簡單,只需要初始化,代碼:

StatusBarOverlay *statusBarOverlay = [[StatusBarOverlay alloc] init];

由于我公司的需求是開機自動下載的功能,所以我在初始化的時候,是放在了AppDelegate中。

更多信息請查看IT技術專欄

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产欧美精品久久| 亚洲高清视频在线| 91久久精品国产91性色tv| 欧美精品免费播放| 午夜精品一区二区三区在线| 国内精品99| 欧美日产国产成人免费图片| 午夜亚洲一区| 亚洲黄色有码视频| 国产乱码精品一区二区三区五月婷| 亚洲在线国产日韩欧美| 亚洲欧美激情精品一区二区| 亚洲精品日韩在线观看| 伊人精品久久久久7777| 欧美午夜宅男影院| 狼人天天伊人久久| 久久精品国产欧美激情| 亚洲嫩草精品久久| 亚洲欧美三级伦理| 欧美亚洲在线| 久久久久99精品国产片| 久久综合久久美利坚合众国| 麻豆久久精品| 欧美国产亚洲精品久久久8v| 欧美精品日日鲁夜夜添| 欧美日韩一区在线播放| 欧美日韩中国免费专区在线看| 欧美日韩你懂的| 国产精品欧美一区喷水| 亚洲精品一级| 欧美日韩成人激情| 欧美成人乱码一区二区三区| 亚洲日本一区二区| 日韩视频亚洲视频| 亚洲视频免费| 欧美一级播放| 久久亚洲精品一区二区| 欧美国产精品久久| 国产精品爱啪在线线免费观看| 国产免费亚洲高清| 又紧又大又爽精品一区二区| 亚洲日韩第九十九页| 亚洲视屏在线播放| 欧美有码在线观看视频| 免费人成网站在线观看欧美高清| 欧美国产精品v| 国产精品女人网站| 在线看无码的免费网站| 亚洲精品美女在线| 欧美亚洲免费| 欧美激情精品久久久久久黑人| 国产精品欧美精品| 91久久久久久久久久久久久| 亚洲女人天堂成人av在线| 久久亚洲综合| 国产精品你懂的在线欣赏| 在线欧美视频| 欧美一区二区性| 欧美日韩不卡| 在线观看亚洲一区| 午夜精品电影| 欧美日韩精品一区视频 | 欧美视频在线视频| 国产在线不卡精品| 亚洲一区二区黄色| 欧美精品午夜视频| 一区二区在线视频观看| 亚洲影视中文字幕| 欧美精品一区二区蜜臀亚洲| 国产综合色产在线精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 免费成人高清在线视频| 国产区精品视频| 亚洲性图久久| 欧美久久一区| 亚洲精品日韩在线| 欧美**字幕| 一区精品久久| 久久久久国产精品www| 国产精品入口麻豆原神| 一本到高清视频免费精品| 欧美**字幕| 亚洲国产美女| 免费观看日韩av| 亚洲福利视频二区| 老鸭窝毛片一区二区三区| 精品91在线| 蜜桃久久av一区| 在线观看视频亚洲| 免费观看亚洲视频大全| 亚洲国产美女久久久久| 男人的天堂亚洲在线| 亚洲福利国产精品| 免费成人av在线| 亚洲日本成人女熟在线观看| 蜜臀a∨国产成人精品| 一区免费观看| 欧美成人69av| 99在线热播精品免费99热| 欧美日韩视频在线第一区| 99精品热视频| 国产精品美女久久久久久免费| 亚洲欧美不卡| 国内自拍视频一区二区三区| 狼狼综合久久久久综合网| 亚洲福利一区| 欧美日韩精品高清| 亚洲欧美日韩人成在线播放| 国产亚洲精品久久久久动| 久久久不卡网国产精品一区| 在线成人av网站| 欧美女同在线视频| 亚洲影视综合| 亚洲第一区在线观看| 欧美成人精品激情在线观看 | 亚洲激情自拍| 欧美精品一区二区三区在线播放 | 国产精品成人va在线观看| 亚洲午夜视频在线| 国产精品无人区| 久久久噜噜噜久久中文字幕色伊伊 | 午夜一区二区三区不卡视频| 国产精品丝袜xxxxxxx| 久久爱另类一区二区小说| 亚洲第一偷拍| 欧美日韩一区二区三区免费看| 午夜精品久久久久久久久久久久| 国内精品一区二区三区| 欧美激情一区二区| 亚洲永久免费观看| 韩国成人福利片在线播放| 欧美区国产区| 久久av资源网站| 日韩一本二本av| 国产无一区二区| 欧美精品不卡| 久久国产66| 日韩香蕉视频| 黄色精品一二区| 国产精品久久久久久久电影 | 欧美激情中文字幕一区二区| 亚洲欧美怡红院| 91久久精品一区二区别| 国产精品女主播| 欧美激情一区二区| 久久精品成人| 亚洲欧美国产77777| 在线观看一区| 国产日本欧美视频| 欧美日韩日本视频| 麻豆精品网站| 久久精品一区| 亚洲资源av| 99精品视频网| 亚洲国产合集| 国产一区日韩欧美| 国产精品亚洲综合天堂夜夜| 欧美精品性视频| 欧美+日本+国产+在线a∨观看| 久久精品一区二区三区中文字幕| 亚洲在线视频观看| 亚洲午夜小视频| 一区二区免费看| 91久久精品日日躁夜夜躁国产| 精品9999| 一区二区三区在线免费观看 | 亚洲国产高清视频| 国语自产精品视频在线看| 国产精品二区二区三区| 欧美日韩综合网| 欧美日韩喷水| 欧美成人69| 蜜桃视频一区| 欧美电影在线播放| 欧美国产成人在线| 欧美激情一区二区三区在线视频| 蜜臀av国产精品久久久久| 六月婷婷久久| 欧美 日韩 国产在线| 久久久综合网站| 久久蜜桃av一区精品变态类天堂| 久久人人九九| 欧美mv日韩mv国产网站app| 欧美福利网址| 欧美日韩亚洲三区| 国产精品区一区二区三区| 国产精品亚洲一区| 国产美女精品一区二区三区| 国产一区91精品张津瑜| 在线成人激情黄色| 亚洲国产视频一区| 亚洲精品女人| 亚洲一区在线观看免费观看电影高清 | 久久久免费观看视频| 久久久久看片| 欧美人与性动交α欧美精品济南到 | 亚洲福利视频三区| 亚洲欧洲综合另类| 一区二区三区国产精品| 亚洲欧洲av一区二区|