精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS自定義狀態(tài)欄代碼解析

移動開發(fā) iOS
默認我們的UIView layer都是在UIWindowLevelNormal上,這也就是為什么系統(tǒng)彈出來的對話框在我們的視圖之上,因為它的Window Level級別更高。

公司的開發(fā)的項目要求在狀態(tài)欄上邊加入程序下載的進度條,之前寫的程序,由于是根據(jù)ipad的朝向來設(shè)置自定義的狀態(tài)欄的frame,以及子視圖的 frame和transform,出現(xiàn)一些不太容易解決的bug。這兩天正好項目不太緊,就好好學(xué)習(xí)一下這方面的知識,以下是我所總結(jié)的一點經(jīng)驗:

這里說明一下,Apple沒有開放的狀態(tài)欄的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上,這也就是為什么系統(tǒng)彈出來的對話框在我們的視圖之上,因為它的Window Level級別更高。

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

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

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

StatusBarOverlay.h文件

 1: #import <Foundation/Foundation.h>
 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:  //內(nèi)容視圖
 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:@"自定義的狀態(tài)欄 author by jordy"];
 55:  [self.contentView addSubview:self.textLabel];
 56:  [_textLabel release];
 57: 
 58:  //注冊監(jiān)聽---當(dāng)屏幕將要轉(zhuǎn)動時,所出發(fā)的事件(用于操作本視圖改變其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: //初始化為默認狀態(tài)
 71: - (void)initializeToDefaultState
 72: {
 73:  //獲取當(dāng)前的狀態(tài)欄位置
 74:  CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;
 75:  //設(shè)置當(dāng)前視圖的旋轉(zhuǎn), 根據(jù)當(dāng)前設(shè)備的朝向
 76:  [self rotateStatusBarWithFrame:[NSValue valueWithCGRect:statusBarFrame]];
 77: 
 78: 
 79: 
 80: }
 81:  
 82:  
 83: //旋轉(zhuǎn)屏幕
 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; //屏幕不旋轉(zhuǎn)
 91:  [self setSubViewVFrame];
 92:  }else if (orientation == UIDeviceOrientationPortraitUpsideDown) {
 93:  self.transform = CGAffineTransformMakeRotation(M_PI); //屏幕旋轉(zhuǎn)180度
 94:  [self setSubViewVFrame];
 95:  }else if (orientation == UIDeviceOrientationLandscapeRight) {
 96:  self.transform = CGAffineTransformMakeRotation((M_PI * (-90.0f) / 180.0f)); //屏幕旋轉(zhuǎn)-90度
 97:  [self setSubViewHFrame];
 98:  }else if (orientation == UIDeviceOrientationLandscapeLeft){
 99:  self.transform = CGAffineTransformMakeRotation(M_PI * 90.0f / 180.0f); //屏幕旋轉(zhuǎn)90度
 100:  [self setSubViewHFrame];
 101:  }
 102: 
 103:  self.frame = frame;
 104:  [self.contentView setFrame:self.bounds];
 105: }
 106:  
 107: //設(shè)置橫屏的子視圖的frame
 108: - (void)setSubViewHFrame
 109: {
 110:  self.textLabel.frame = CGRectMake(30, 0, 1024-60, 20);
 111: }
 112: //設(shè)置豎屏的子視圖的frame
 113: - (void)setSubViewVFrame
 114: {
 115:  self.textLabel.frame = CGRectMake(30, 0, 748-60, 20);
 116: }
 117:  
 118: #pragma mark -
 119: #pragma mark 響應(yīng)屏幕即將旋轉(zhuǎn)時的事件響應(yīng)
 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

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

在屏幕旋轉(zhuǎn)過程中,自定義的狀態(tài)欄與UIViewController之間的旋轉(zhuǎn)是分離的,所以我們需要做一個隱藏的動畫,在旋轉(zhuǎn)過程前先隱藏自定義的狀態(tài)欄,旋轉(zhuǎn)結(jié)果后設(shè)置顯示狀態(tài)。

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

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

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

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

責(zé)任編輯:冰凝兒
相關(guān)推薦

2013-07-18 16:09:10

自定義iOS狀態(tài)欄iOS開發(fā)iOS學(xué)習(xí)

2014-06-06 14:03:13

iOS狀態(tài)欄提示控件原理

2017-10-25 14:07:54

APPiOSxcode

2021-08-24 15:25:59

鴻蒙HarmonyOS應(yīng)用

2013-11-20 15:08:32

iOS開發(fā)狀態(tài)欄

2013-06-27 11:10:01

iOS開發(fā)自定義UISlider

2017-02-17 11:00:57

狀態(tài)欄Android

2014-12-10 10:37:45

Android自定義布局

2021-01-20 08:58:39

iOS 14桌面圖標(biāo)快捷指令

2013-05-30 15:53:17

iOS開發(fā)iOS SDKPopver

2011-08-02 11:17:13

iOS開發(fā) View

2012-06-01 11:02:33

2016-11-29 11:20:08

Android

2015-02-12 14:49:36

CGToast狀態(tài)欄提示Status

2022-02-21 15:16:30

HarmonyOS鴻蒙操作系統(tǒng)

2011-05-04 10:40:02

網(wǎng)頁加載進度標(biāo)題欄lephone

2012-04-16 14:32:31

iOS選擇器代碼

2011-04-27 10:31:38

Java

2015-02-12 15:33:43

微信SDK

2015-01-15 16:45:05

iOS源碼自定義畫圖
點贊
收藏

51CTO技術(shù)棧公眾號

欧美午夜精品| 黄视频网站在线| 久久国产成人| 色妞欧美日韩在线| 成年人看片网站| 麻豆视频在线看| 国产精品久久久久久久久晋中| 91免费福利视频| 精品美女久久久久| 日韩中文在线电影| 亚洲国产精品yw在线观看| youjizzxxxx18| 日本在线视频中文有码| 国产人妖乱国产精品人妖| 92国产精品久久久久首页| 精品91久久久| 欧美黄色aaaa| 一本色道久久综合狠狠躁篇怎么玩 | 国产a级免费视频| 久久99伊人| 欧美激情国产精品| 国产免费嫩草影院| 精品五月天堂| 欧美一区二区视频免费观看| 激情六月丁香婷婷| 8x8ⅹ拨牐拨牐拨牐在线观看| 欧美激情一区二区三区四区| 国产原创精品| 精品人妻一区二区三区三区四区| 日韩不卡免费视频| 青青草原成人在线视频| 久久久久久久久久久97| 久久久久免费av| 在线日韩中文字幕| 国精品无码人妻一区二区三区| 日韩激情精品| 欧美日韩亚洲综合一区| 日韩av一二三四| 国产激情在线播放| 亚洲一本大道在线| 在线观看成人免费| 免费的黄网站在线观看| 国产精品色婷婷久久58| 五月天丁香综合久久国产 | 疯狂欧洲av久久成人av电影| 一本久久综合亚洲鲁鲁五月天 | 欧美亚洲精品天堂| 99精品99| 2019av中文字幕| 久久精品这里有| 极品少妇一区二区三区| 久久99久久久久久久噜噜| 日韩女优一区二区| 午夜欧美精品| 久久久久久国产精品美女| 欧美黄色免费观看| 欧美日韩一卡| 国模精品视频一区二区| 国产精品.www| 在线亚洲伦理| 日韩av成人在线观看| 成人h动漫精品一区二区下载| 国产美女诱惑一区二区| 人体精品一二三区| 中文无码av一区二区三区| 男女性色大片免费观看一区二区 | 国产高清精品在线观看| 乡村艳史在线观看| 色婷婷综合久色| 91极品尤物在线播放国产| 日韩在线电影| 欧美一区二区高清| 成年女人免费视频| 猛男gaygay欧美视频| 正在播放欧美视频| 欧美极品aaaaabbbbb| 激情综合网址| 国产精品av网站| 国产三级漂亮女教师| 国产91丝袜在线播放| 精品视频一区在线| jizz在线观看视频| 一区二区在线观看免费视频播放| 99在线免费视频观看| 日韩性xxx| 日韩一级片在线观看| 国产精品无码在线| 久久精品播放| 欧美激情中文网| 国产免费一级视频| 国产精品综合二区| 久久久亚洲综合网站| 成人av电影观看| 亚洲一区二区三区视频在线| 免费日韩视频在线观看| 精品伊人久久| 亚洲欧美国产视频| 青春草免费视频| 可以免费看不卡的av网站| 91精品在线观看视频| 日本福利片在线| 亚洲色图丝袜美腿| 成熟老妇女视频| 日韩区一区二| 中文字幕精品在线视频| 中文字幕一区二区三区手机版| 日韩av在线免费观看不卡| 成人欧美一区二区| 尤物网址在线观看| 福利微拍一区二区| 日本美女久久久| 精品国产网站| 97成人在线视频| 国产情侣自拍小视频| 国产亚洲一区二区三区四区 | 谁有免费的黄色网址| 韩国自拍一区| 亚洲伊人久久大香线蕉av| 极品美乳网红视频免费在线观看| 亚洲成人av在线电影| 日本中文字幕观看| 成人一级毛片| 日本三级韩国三级久久| 少妇高潮一区二区三区69| 亚洲精品视频在线看| 狠狠躁狠狠躁视频专区| 妖精视频一区二区三区免费观看| 欧美国产日韩二区| 国产suv一区二区| 亚洲欧美在线观看| 污污动漫在线观看| 成人一区不卡| 日韩美女免费视频| 日本福利片高清在线观看| 午夜视频一区二区三区| 中文字幕18页| 国产精品av一区二区| 91精品免费视频| 久草中文在线| 91麻豆精品国产91久久久资源速度 | 国产精品免费av| 韩国中文字幕av| 精品久久久中文字幕| 国产成人精品综合久久久| 欧美另类自拍| 色激情天天射综合网| 亚洲а∨天堂久久精品2021| 日韩在线卡一卡二| 色姑娘综合av| 中文字幕日本一区| 久久天天躁狠狠躁夜夜躁| 国产理论片在线观看| 最新久久zyz资源站| xxx中文字幕| 国产一区二区三区四区三区四| 成人动漫视频在线观看完整版| 手机在线免费av| 亚洲精品一区二区三区精华液| 久久精品www人人爽人人| 懂色av一区二区夜夜嗨| 男女私大尺度视频| 亚洲三级网址| 国产精品视频yy9099| 国产剧情在线| 亚洲а∨天堂久久精品9966| 亚洲一区欧美在线| 国产日韩欧美一区二区三区乱码 | 久久久伊人欧美| 深夜视频在线免费| 欧美系列亚洲系列| √天堂中文官网8在线| 国产成人亚洲精品狼色在线 | 超碰手机在线观看| www.日韩av| 嫩草av久久伊人妇女超级a| 日韩免费av| 岛国一区二区三区高清视频| 天堂中文最新版在线中文| 最近2019年好看中文字幕视频| a级片免费观看| 岛国av午夜精品| 激情无码人妻又粗又大| 成人黄色综合网站| 日韩av手机版| 亚洲午夜精品久久久久久app| 蜜桃av色综合| 国内不卡的一区二区三区中文字幕| 久久久久国产精品免费| 福利成人在线观看| 精品国产乱码久久久久久久久 | 欧洲一区精品| 日韩有码视频在线| 天堂av2024| 欧美日韩高清一区二区不卡| 日韩 国产 在线| 国产精品美日韩| 在线天堂www在线国语对白| 男女男精品视频| 六月婷婷在线视频| 欧美残忍xxxx极端| 久久久久久国产精品mv| 国产精品白丝久久av网站| 5566日本婷婷色中文字幕97| 成人毛片av在线| 亚洲人午夜精品| 亚洲乱码在线观看| 欧美日韩免费高清一区色橹橹| 国产无套粉嫩白浆内谢| 国产精品免费网站在线观看| 国产男男chinese网站| 国产福利不卡视频| 中文字幕国产免费| 欧美亚洲自偷自偷| 国产精品久久国产| 亚洲a一区二区三区| 日韩av电影免费观看| 欧美日韩一区二区三区四区不卡| 91在线高清视频| 丰满少妇一区| 国产精品久久久精品| 日韩脚交footjobhd| 欧美黑人狂野猛交老妇| h片在线免费观看| 神马久久桃色视频| 成全电影播放在线观看国语| 亚洲欧美另类自拍| 少妇高潮一区二区三区69| 欧美成人bangbros| 国产女人高潮毛片| 在线播放视频一区| 一区二区三区精彩视频| 欧美在线啊v一区| av一级在线观看| 91黄视频在线| 久久久久久亚洲av无码专区| 欧美午夜片欧美片在线观看| 日韩精品一区二区三| 亚洲一级二级三级在线免费观看| 欧美成人手机视频| 亚洲人123区| 欧美成人黄色网| 一区二区高清免费观看影视大全 | 在线精品国产| 天天做天天爱天天高潮| 99国内精品久久久久久久| 亚洲一区二区三区午夜| 成人毛片在线| 亚洲免费精品视频| 999久久久免费精品国产| 一区二区91美女张开腿让人桶| 9999国产精品| 亚洲小说欧美另类激情| 综合在线一区| 国产激情在线看| 亚洲视频狠狠| 亚洲熟女乱色一区二区三区| 亚洲一区二区成人| 五月天婷婷激情视频| 激情综合五月婷婷| 免费看的av网站| 波多野结衣一区二区三区| 久久亚洲AV成人无码国产野外 | 久久久久99精品成人片试看| 一卡二卡三卡日韩欧美| 日韩成年人视频| 色综合天天性综合| 又骚又黄的视频| 欧美岛国在线观看| 日韩porn| 中文字幕不卡av| 调教一区二区| 欧美一级成年大片在线观看| 欧美videos粗暴| 亚洲在线免费视频| 日韩av中文字幕一区| 日韩精品久久一区| 欧美三级黄美女| 国内外成人激情视频| 久久国产精品99久久久久久老狼 | 一级爱爱免费视频| 精品国产伦理网| www.成人.com| 久久久久免费精品国产| 性高爱久久久久久久久| 91在线观看免费| 日本午夜精品久久久| 一区二区三区的久久的视频| 黄色综合网站| 午夜免费高清视频| 成人免费高清在线观看| 国产精品一二三区在线观看| 亚洲黄色免费电影| 欧美日韩 一区二区三区| 欧美xxxxx牲另类人与| 岛国视频免费在线观看| 欧美激情精品久久久久| 四虎4545www精品视频| 国产偷国产偷亚洲高清97cao| 欧美一二区在线观看| 丰满少妇久久久| 国产美女精品在线| 久久久久亚洲av无码专区桃色| 亚洲精品欧美激情| 最近中文字幕免费观看| 亚洲精品国精品久久99热| 免费在线你懂的| 国产精品高潮视频| 久久97久久97精品免视看秋霞| 一区二区三区四区免费观看| 老**午夜毛片一区二区三区 | 国产精品色眯眯| 秋霞精品一区二区三区| 精品日韩99亚洲| 国产精品剧情| 国产精品夜间视频香蕉| 亚洲第一福利专区| 日韩五码在线观看| 国产高清在线精品| 亚洲xxxx3d动漫| 欧美日韩一区 二区 三区 久久精品| 亚洲av成人精品日韩在线播放| 欧美成人一二三| 国产精品亚洲综合在线观看| 性欧美大战久久久久久久免费观看| 一区二区日本视频| 精品熟女一区二区三区| 亚洲一区二区三区不卡国产欧美| 国产视频在线免费观看| 日韩一区二区在线视频| 97欧美成人| 日韩av电影免费播放| 日日夜夜精品视频免费| 国产三级av在线播放| 欧美日韩综合视频| 日韩精品福利| 欧美中文在线免费| 伊人春色之综合网| 精品一区二区中文字幕| 92精品国产成人观看免费| av大片免费观看| 亚洲码在线观看| 成人做爰视频www网站小优视频| 欧美日韩电影一区二区三区| 香蕉av777xxx色综合一区| 中文字幕一区二区人妻在线不卡| 精品久久久在线观看| 蜜桃视频在线免费| 国产成人久久久| 欧美高清视频手机在在线| 日本国产一级片| 亚洲欧美国产高清| 国产91免费看| 91国在线精品国内播放| 亚洲人成网亚洲欧洲无码| 无需播放器的av| 国产精品国产三级国产普通话三级| 在线视频你懂得| 超在线视频97| 国产欧美一区二区三区米奇| 激情五月宗合网| 国产亚洲欧美一区在线观看| 又骚又黄的视频| 欧美贵妇videos办公室| 日韩精品福利一区二区三区| 黄色片视频在线播放| 国产精品毛片大码女人| 精品人妻一区二区三区浪潮在线| 欧美日韩电影在线观看| 欧美午夜18电影| 在线观看亚洲色图| 亚洲精品国产a久久久久久| 熟妇人妻av无码一区二区三区| 日韩美女在线播放| 国产精品久久久久久久久妇女| 熟妇无码乱子成人精品| 亚洲成年人影院| www日韩tube| 豆国产97在线| 日韩高清在线一区| 欧美成人精品激情在线视频| 亚洲欧美制服中文字幕| 不卡的国产精品| av免费播放网址| 中文字幕在线不卡一区| 日本美女一级视频| 国产日韩欧美视频在线| 影音先锋中文字幕一区| 黄大色黄女片18免费| 日韩精品一区二区三区中文精品| av日韩电影| 欧美三级午夜理伦三级老人| 91理论电影在线观看| 国产人妖一区二区| 国产ts一区二区| 黄色一区二区三区四区| 久久成人小视频| 亚洲区在线播放| 亚洲五码在线| 欧美国产日韩另类 | 久草综合在线观看|