第一种方法:
第二种方法:
如果需要在状态栏显示自定义的消息时,就需要自定义状态栏。
代码如下:
XYCustomStatusBar.h
<code>01</code>
<code>#import <UIKit/UIKit.h></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设置高点。其他代码基本上都不解释什么,如果要特殊效果,可以自己添加。