iPhone畫面的最上方,有個幾乎無時無刻存在的status bar,顯示著時間,電量,訊號強度等重要資訊。許多遊戲類的App會隱藏status bar,因為它們邪惡地想讓我們沉迷遊戲,忘了時間。而非遊戲類的App一般會顯示status bar,讓我們在操作App時仍然能夠知道電量,時間等重要資訊,而不用離開App查詢。
有沒有兩全其美的方法呢? 當然有,古人有點石成金,彼得潘有點螢幕殺status bar,感謝和彼得潘同月同日生的超人氣Model LUCY的合作,接下來我們將示範如何觸碰螢幕控制status bar的存亡,並且清除status bar怨念產生的黑洞。
一. 在畫面上加入按鈕,顯示"正在聞著新鮮空氣的LUCY"
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, [UIScreen mainScreen].bounds.size.height)];
button.imageView.contentMode = UIViewContentModeScaleAspectFill;
[button setImage:[UIImage imageNamed:@"lucy.jpg"] forState:UIControlStateNormal];
[self.view addSubview:button];
[button addTarget:self action:@selector(buttonPressed:)
forControlEvents:UIControlEventTouchUpInside];
}
說明:
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, [UIScreen mainScreen].bounds.size.height)];
設定button的高度為螢幕的高度,換句話說,在iPhone 4s時,是480 points,在iPhone 5時,是568 points。
二. 在按鈕被觸碰時,控制status bar的隱藏和現身
-(void)buttonPressed:(id)sender
{
if([UIApplication sharedApplication].statusBarHidden)
{
[UIApplication sharedApplication].statusBarHidden = NO;
}
else
{
[UIApplication sharedApplication].statusBarHidden = YES;
}
}
說明:
當status bar顯示時,點選按鈕叫它滾開,不想再看到它。
當status bar隱藏,而我們又開始思念它時,點選按鈕可以再把它追回來,讓它出現。
執行App:
status bar就像個聽話的女朋友,我們不想看到她時,點一下畫面她乖乖消失。我們想念她時,點一下畫面,她馬上出現。但是當她不在時,卻有個怪異的地方,原本她佔據的空間,變成一長條黑色的區塊(約20 points的高度)。看來一定是她可怕的怨念,留下那破壞畫面美感的黑洞。
讓我們來查查事情的真相,研究黑洞形成的原因吧。請加入以下的程式碼
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"view %@", self.view);
}
當我們再一次執行App時,發現Log印出
view <UIView: 0x7125f50; frame = (0 20; 320 548); autoresize = RM+BM; layer = <CALayer: 0x7126530>>
謎底解開了,原來view controller的view一開始的起始y座標就在20,難怪status bar消失後,會留下高度20 points的黑洞。
還好status bar的怨念不像七夜怪談的貞子那麼可怕,不需要大法師,只要LUCY的美麗就能消滅它。LUCY的這張照片如此漂亮,值得佔滿整個螢幕。我們只要在剛剛的viewDidLoad method裡,將view controller的wantsFullScreenLayout設為YES,即可讓view controller的view佔滿螢幕,換句話說,起始點將是(0, 0),而不是(0, 20)
self.wantsFullScreenLayout = YES;
我們可以清楚看到,這次LUCY是完完全全佔滿螢幕的,所以status bar是重疊地覆蓋在她的上方。
也因為LUCY多了20 points的展示空間,所以這次她的鞋子沒有再不小心被切到了。若是回頭看看Log印出的訊息,可發現此時view controller的view果然從(0, 0)開始。
view <UIView: 0x7435ce0; frame = (0 0; 320 568); autoresize = RM+BM; layer = <CALayer: 0x74362c0>>
LUCY簡介:
生日: 2月7日 (和彼得潘一樣,好日子)
科系: 輔大心理系 ( 對人心有深入了解)
星座: 水瓶座 ( 好星座,不是只有天秤座才出帥哥美女呀 )
職業: Model,代言/平面/網拍/廣告/主持/展場/活動
聯絡: lucy.chiayun@gmail.com