茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    ios瘋狂詳解之自定義狀態(tài)欄代碼解析
    來源:易賢網(wǎng) 閱讀:980 次 日期:2015-01-26 15:21:09
    溫馨提示:易賢網(wǎng)小編為您整理了“ios瘋狂詳解之自定義狀態(tài)欄代碼解析”,方便廣大網(wǎ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

    默認(rèn)我們的uiview layer都是在uiwindowlevelnormal上,這也就是為什么系統(tǒng)彈出來的對話框在我們的視圖之上,因?yàn)樗膚indow level級別更高。

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

    首先,先建一個(gè)single view application,名字自定義就可以了,

    然后,新建一個(gè)類命名為: 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: //內(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)動時(shí),所出發(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: //初始化為默認(rèn)狀態(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)時(shí)的事件響應(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)的注釋,這里需要說明一點(diǎn)的是,默認(rèn)我們繼承自uiwindow的statusbaroverlay類是hidden狀態(tài),需要在初始化的時(shí)候設(shè)置它的hidden屬性為no,

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

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

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

    statusbaroverlay *statusbaroverlay = [[statusbaroverlay alloc] init];

    由于我公司的需求是開機(jī)自動下載的功能,所以我在初始化的時(shí)候,是放在了appdelegate中。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:ios瘋狂詳解之自定義狀態(tài)欄代碼解析
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)