第一種:通過人為的辦法改變view.transform的屬性。
具體辦法:
view.transform一般是View的旋轉,展開移動等屬性,類似view.layer.transform,區別在於 View.transform是二維的,也就是使用仿射的辦法通常就是帶有首碼CGAffineTransform的類(可以到API文檔裡面搜尋這個前 綴的所有類),而view.layer.transform可以在3D模式下面的變化,通常使用的都是首碼為CATransform3D的類。
這裡要記住一點,當你改變過一個view.transform屬性或者view.layer.transform的時候需要恢複預設狀態的話,記得先把他 們重設可以使用view.transform = CGAffineTransformIdentity,或者view.layer.transform = CATransform3DIdentity,假設你一直不斷的改變一個view.transform的屬性,而每次改變之前沒有重設的話,你會發現後來 的改變和你想要的發生變化了,不是你真正想要的結果。
好了,上面介紹了旋轉的屬性,接下來就是關鍵了。官方提供了一個辦法就是查看當前電池條的狀態UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;通過這個辦法,你可以知道當前螢幕的電池條的顯示方向,而且你還可以 強制設定他的顯示方向,通過設定這個屬性就OK了,可以選擇是否動畫改變電池條方向。有了這兩個那我們就可以任意的改變我們想要的顯示方式了。
1.擷取當前電池條的方向UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation
2.擷取當前螢幕的大小CGRect frame = [UIScreen mainScreen].applicationFrame;
3.設定我們的View的中心點
CGPoint center = CGPointMake(frame.origin.x + ceil(frame.size.width/2), frame.origin.y + ceil(frame.size.height/2));
4.根據當前電池條的方向,擷取需要旋轉的角度的大小。通常
if (orientation == UIInterfaceOrientationLandscapeLeft) {
return CGAffineTransformMakeRotation(M_PI*1.5);
} else if (orientation == UIInterfaceOrientationLandscapeRight) {
return CGAffineTransformMakeRotation(M_PI/2);
} else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
return CGAffineTransformMakeRotation(-M_PI);
} else {
return CGAffineTransformIdentity;
}
5.可以動畫的改變我們view的顯示方式了
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeRight animated:YES];
CGFloat duration = [UIApplication sharedApplication].statusBarOrientationAnimationDuration;(擷取當前電池條動畫改變的時間)
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:duration];
//在這裡設定view.transform需要匹配的旋轉角度的大小就可以了。
[UIView commitAnimations];
第二種:通過setOrientation:的辦法強制性的旋轉到一個特定的方向。
注意:Apple在3.0以後都不支援這個辦法了,這個辦法已經成為了私人的了,但是要跳過App Stroe的審核,需要一點巧妙的辦法。
不要直接調用[[UIDevice currentDevice] setOrientation: UIInterfaceOrientationLandscapeRight]這樣的辦法來強制性的橫屏,這樣導致你的程式是很難通過App Store審核的。但是你可以選擇使用performSelector的辦法來調用它。具體就幾行代碼如下:
//強制橫屏
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
[[UIDevice currentDevice] performSelector:@selector(setOrientation:)
withObject:(id)UIInterfaceOrientationLandscapeRight];
}
總結:如果第一種辦法可以滿足你需要的話,最好使用第一種辦法,因為那個上 App Store肯定沒問問題,但是第二種的話是需要冒風險的,但是如果你的結構太複雜了,導致使用第一種辦法人為很難控制的話,可以嘗試簡單的使用第二種辦 法。我在有米提供的sample裡面就看到他使用了第二種簡單的辦法來顯示橫屏豎式的廣告條。