第一種方法:
第二種方法:
如果需要在狀态欄顯示自定義的消息時,就需要自定義狀态欄。
代碼如下:
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設定高點。其他代碼基本上都不解釋什麼,如果要特殊效果,可以自己添加。