天天看点

IOS开发之自定义状态条

第一种方法:

第二种方法:

如果需要在状态栏显示自定义的消息时,就需要自定义状态栏。

代码如下:

XYCustomStatusBar.h

<code>01</code>

<code>#import &lt;UIKit/UIKit.h&gt;</code>

<code>02</code>

<code>03</code>

<code>@interface XYCustomStatusBar : UIWindow{</code>

<code>04</code>

<code>    </code> 

<code>05</code>

<code>    </code><code>UILabel *_messageLabel;</code>

<code>06</code>

<code>}</code>

<code>07</code>

<code>08</code>

<code>- (</code><code>void</code><code>)showStatusMessage:(NSString *)message;</code>

<code>09</code>

<code>10</code>

<code>- (</code><code>void</code><code>)hide;</code>

<code>11</code>

<code>12</code>

<code>@end</code>

XYCustomStatusBar.m

<code>#import "XYCustomStatusBar.h"</code>

<code>@implementation XYCustomStatusBar</code>

<code>- (</code><code>void</code><code>)dealloc{</code>

<code>    </code><code>[super dealloc];</code>

<code>    </code><code>[_messageLabel release], _messageLabel = nil;</code>

<code>- (id)init{</code>

<code>    </code><code>self = [super init];</code>

<code>    </code><code>if</code> <code>(self) {</code>

<code>13</code>

<code>        </code><code>self.frame = [UIApplication sharedApplication].statusBarFrame;</code>

<code>14</code>

<code>        </code><code>self.backgroundColor = [UIColor blackColor];</code>

<code>15</code>

<code>        </code><code>self.windowLevel = UIWindowLevelStatusBar + 1.0f;</code>

<code>16</code>

<code>        </code> 

<code>17</code>

<code>        </code><code>_messageLabel = [[UILabel alloc] initWithFrame:self.bounds];</code>

<code>18</code>

<code>        </code><code>[_messageLabel setTextColor:[UIColor whiteColor]];</code>

<code>19</code>

<code>        </code><code>[_messageLabel setTextAlignment:NSTextAlignmentRight];</code>

<code>20</code>

<code>        </code><code>[_messageLabel setBackgroundColor:[UIColor clearColor]];</code>

<code>21</code>

<code>        </code><code>[self addSubview:_messageLabel];</code>

<code>22</code>

<code>    </code><code>}</code>

<code>23</code>

<code>24</code>

<code>    </code><code>return</code> <code>self;</code>

<code>25</code>

<code>26</code>

<code>27</code>

<code>- (</code><code>void</code><code>)showStatusMessage:(NSString *)message{</code>

<code>28</code>

<code>    </code><code>self.hidden = NO;</code>

<code>29</code>

<code>    </code><code>self.alpha = 1.0f;</code>

<code>30</code>

<code>    </code><code>_messageLabel.text = @</code><code>""</code><code>;</code>

<code>31</code>

<code>32</code>

<code>    </code><code>CGSize totalSize = self.frame.size;</code>

<code>33</code>

<code>    </code><code>self.frame = (CGRect){ self.frame.origin, 0, totalSize.height };</code>

<code>34</code>

<code>35</code>

<code>    </code><code>[UIView animateWithDuration:0.5 animations:^{</code>

<code>36</code>

<code>        </code><code>self.frame = (CGRect){self.frame.origin, totalSize };</code>

<code>37</code>

<code>    </code><code>} completion:^(</code><code>BOOL</code> <code>finished){</code>

<code>38</code>

<code>        </code><code>_messageLabel.text = message;</code>

<code>39</code>

<code>    </code><code>}];</code>

<code>40</code>

<code>41</code>

<code>42</code>

<code>43</code>

<code>44</code>

<code>- (</code><code>void</code><code>)hide{</code>

<code>45</code>

<code>46</code>

<code>47</code>

<code>    </code><code>[UIView animateWithDuration:0.5f animations:^{</code>

<code>48</code>

<code>        </code><code>self.alpha = 0.0f;</code>

<code>49</code>

<code>50</code>

<code>        </code><code>_messageLabel.text = @</code><code>""</code><code>;</code>

<code>51</code>

<code>        </code><code>self.hidden = YES;</code>

<code>52</code>

<code>53</code>

<code>54</code>

<code>55</code>

为了让自定义的状态栏可以让用户看到,设置了它的windowlevel,在ios中,windowlevel属性决定了UIWindow的显示层次,默认的windowlevel为UIWindowLevelNormal,即0.0 。为了能覆盖默认的状态栏,将windowlevel设置高点。其他代码基本上都不解释什么,如果要特殊效果,可以自己添加。