主要下面三個(gè)方法

創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),金水網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:金水等地區(qū)。金水做網(wǎng)站價(jià)格咨詢:028-86922220
1、當(dāng)前viewController是window的rootViewController.
2、當(dāng)前viewController是modal模式的. 即, 此viewController是被調(diào)用
presentModalViewController 而顯示出來(lái)的.
對(duì)于非modal模式的viewController:如果不是rootViewController,則重寫(xiě) supportedInterfaceOrientations , preferredInterfaceOrientationForPresentation 以及 shouldAutorotate 方法, 按照當(dāng)前viewController的需要返回響應(yīng)的值.如果是rootViewController,則如下重寫(xiě)方法:
這樣就繞開(kāi)了UIKit只調(diào)用rootViewController的方法的規(guī)則. 把決定權(quán)交給了當(dāng)前正在顯示的viewController.
對(duì)于modal
模式的viewController. 則按照需要重寫(xiě)supportedInterfaceOrientations,
preferredInterfaceOrientationForPresentation
以及shouldAutorotate 方法即可.
TIPS:
[UIViewController attemptRotationToDeviceOrientation]; 可以重新調(diào)用以上的方法。
雖然A界面不支持橫屏,但是如果下個(gè)B界面支持橫屏,B在橫屏模式返回的話,A也變橫屏了。這里有個(gè)簡(jiǎn)單的設(shè)值方法
A界面也重寫(xiě)方法即可
重寫(xiě)
有時(shí)候想自己控制橫豎屏 ,比如視圖播放界面。
setOrientation 在iOS3以后變?yōu)樗接蟹椒耍荒苤苯尤フ{(diào)用此方法,否則后果就是被打回。
不能直接調(diào)用,但是可以間接的去調(diào)用,下面的方法就是利用 KVO機(jī)制去間接調(diào)用.
前段時(shí)間我們播放器強(qiáng)制橫屏,項(xiàng)目設(shè)置允許豎屏,在手機(jī)不鎖屏狀態(tài)下,手機(jī)橫屏?xí)?dǎo)致播放器強(qiáng)制橫屏的時(shí)候會(huì)導(dǎo)致橫屏失敗,下面是強(qiáng)制橫屏的解決辦法以及我的探究.
首先,在【General】--【Device Orientation】設(shè)置僅支持豎屏
接下來(lái)在AppDelegate中設(shè)置
先設(shè)置
接下來(lái)有兩種辦法可以在某個(gè)界面設(shè)置強(qiáng)制橫屏
第一種.先把設(shè)備狀態(tài)設(shè)置為豎屏,再?gòu)?qiáng)制橫屏
第二種.設(shè)置強(qiáng)制橫屏,再調(diào)用
這樣就解決手機(jī)不鎖屏狀態(tài)下的強(qiáng)制橫屏導(dǎo)致的問(wèn)題,但是為什么產(chǎn)生這些問(wèn)題呢,請(qǐng)看下我接下來(lái)的探究.
接下來(lái)說(shuō)下橫屏失敗的原因:
用戶先向左轉(zhuǎn)了設(shè)備的方向才點(diǎn)擊橫屏,在強(qiáng)制頁(yè)面向右(也就是設(shè)備向左)橫屏?xí)r,雖然項(xiàng)目是只允許豎屏的,屏幕界面方向也一直是豎屏的,但設(shè)備本身的方向(也就是[UIDevice currentDevice].orientation)其實(shí)已經(jīng)是向左,此時(shí)其實(shí)kvc強(qiáng)制設(shè)置的值和本來(lái)的值是一樣的,這就導(dǎo)致了屏幕界面不轉(zhuǎn)動(dòng),所以可以先強(qiáng)制轉(zhuǎn)到另一個(gè)方向再轉(zhuǎn)回來(lái),或者使用attemptRotationToDeviceOrientation方法使屏幕界面和設(shè)備方向同步。其他方向同理,另外,若用戶啟用了設(shè)備方向鎖,用戶無(wú)論如何旋轉(zhuǎn)設(shè)備其設(shè)備方向都不變,也就不會(huì)有此問(wèn)題。
下面是我的思路:
在屏幕沒(méi)有鎖定的時(shí)候,手機(jī)為橫屏的時(shí)候,播放器橫屏?xí)r候沒(méi)有橫屏
但是播放器界面并沒(méi)有變?yōu)槿?根據(jù)效果我覺(jué)得有可能是寬高問(wèn)題導(dǎo)致的,因此我先獲取手機(jī)的屏幕方向
在獲取手機(jī)的設(shè)備方向
發(fā)現(xiàn)屏幕方向和設(shè)備方向不一致
接下來(lái)使屏幕方向和設(shè)備方向一致,就可以解決問(wèn)題
參考文章
iOS 獲取屏幕方向
當(dāng)自定義一個(gè)UIWindow,并在window添加控件,橫屏?xí)r,window并沒(méi)有跟隨視圖旋轉(zhuǎn)。
解決方法1:(蘋(píng)果推薦這樣使用)
1.定義一個(gè)UIViewController,并設(shè)置為當(dāng)前Window的rootViewController,將控件添加到自定義的UIViewController上,調(diào)用時(shí)使用self.mineWindow.mineRootViewController.button...
2.在自定義的UIViewController中添加橫屏方法:
- (BOOL)shouldAutorotate {
returnYES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeRight;
}
解決方法2:
對(duì)UIWindow進(jìn)行旋轉(zhuǎn)(UIWindow繼承自UIView):
UIInterfaceOrientation orientation = [[UIApplication sharedApplication]statusBarOrientation];
if (orientation == UIInterfaceOrientationLandscapeLeft) {
CGAffineTransform rotation = CGAffineTransformMakeRotation(3*M_PI/2);
[self setTransform:rotation];
}
if (orientation == UIInterfaceOrientationLandscapeRight) {
CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI/2);
[self setTransform:rotation];
}
如有不當(dāng)之處請(qǐng)@我。
在你想支持橫豎屏的viewController里面重寫(xiě)兩個(gè)方法:
1
2
3
4
5
6
7
8
9
10
11
// 支持設(shè)備自動(dòng)旋轉(zhuǎn)
- (BOOL)shouldAutorotate
{
return YES;
}
// 支持橫豎屏顯示
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
這樣在這個(gè)viewController中就可以橫豎屏切換了。
注意如果你window的rootViewController是一個(gè)navigationController,可能會(huì)出現(xiàn)以下問(wèn)題:
你的navigationController只支持豎屏,但是你push到了某個(gè)新的controller中,這個(gè)controller支持橫豎屏,當(dāng)你在新的controller中切換到橫屏后(也有可能在切換到橫屏然后pop回來(lái)后),這時(shí)候程序會(huì)閃退,因?yàn)槟愕膎avigationController不支持橫屏。
如果你想解決這個(gè)問(wèn)題,就需要自己寫(xiě)一個(gè)UINavigationController的子類,在這個(gè)類中重寫(xiě)方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (BOOL)shouldAutorotate
{
return [self.viewControllers.lastObject shouldAutorotate];
}
- (NSUInteger)supportedInterfaceOrientations
{
return [self.viewControllers.lastObject supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [self.viewControllers.lastObject preferredInterfaceOrientationForPresentation];
}
然后用這個(gè)類去創(chuàng)建實(shí)例作為window的rootViewController,這樣就可以避免這個(gè)問(wèn)題了。
1、iPhone6 Plus共有兩種顯示模式,分別為標(biāo)準(zhǔn)和放大模式官網(wǎng) 留言只有在“標(biāo)準(zhǔn)模式”下,才支持橫屏。所以要確保顯示模式在標(biāo)準(zhǔn)模式狀態(tài)下。
2、在控制中心將“方向鎖定”關(guān)閉即可讓iPhone Plus在手機(jī)橫放時(shí)自動(dòng)變成橫屏顯示。
iPhone6 Plus顯示模式更改方法
激活蘋(píng)果6手機(jī)時(shí),會(huì)讓你選擇顯示模式,如果要更改就看下面的步驟。
1、點(diǎn)擊主屏上的“設(shè)置”
2、在設(shè)置選項(xiàng)列表中找到“顯示與亮度”。
3、點(diǎn)擊“顯示模式”
4、選擇“放大”或者“標(biāo)準(zhǔn)”模式
5、切換不同的顯示模式之后需要重啟蘋(píng)果手機(jī)才能生效
標(biāo)題名稱:ios開(kāi)發(fā)橫屏,ios開(kāi)發(fā)鎖定橫屏
本文網(wǎng)址:http://chinadenli.net/article27/dsedejj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化、面包屑導(dǎo)航、網(wǎng)站收錄、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)