新聞中心
iOS中單個(gè)頁(yè)面橫豎屏切換 點(diǎn)擊退出再退回到豎屏。
在開發(fā)項(xiàng)目的時(shí)候,遇到了一個(gè)問題,就是其中一個(gè)頁(yè)面需要強(qiáng)制橫屏,而其他頁(yè)面要強(qiáng)制豎屏,然后返回在回到橫屏,總結(jié)了一些人的經(jīng)驗(yàn)給需要的人。
漢壽網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)從2013年開始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
首先在AppDelegate.h里面添加@property(nonatomic,assign)NSInteger allowOrientations; 然后實(shí)現(xiàn)下面的方法。
- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow(UIWindow*)window{
if(_allowOrientations ==1) {
return UIInterfaceOrientationMaskLandscapeRight;
}
else{
return (UIInterfaceOrientationMaskPortrait);
}
}
最后在需要使用橫豎屏切換的控制器導(dǎo)入Appdelegate.h文件 實(shí)現(xiàn)方法:
- (void)viewDidLoad{
[superviewDidLoad];?
AppDelegate * appDelegate = (AppDelegate *)[UIApplicationsharedApplication].delegate;?
appDelegate.allowRotation =1;
}
返回到上一個(gè)頁(yè)面自動(dòng)切換到豎屏:
if([[UIDevicecurrentDevice] respondsToSelector:@selector(setOrientation:)]) {? ?
SEL selector =NSSelectorFromString(@"setOrientation:");
NSInvocation*invocation = [NSInvocationinvocationWithMethodSignature:[UIDeviceinstanceMethodSignatureForSelector:selector]];? ? [invocation setSelector:selector];??
[invocation setTarget:[UIDevicecurrentDevice]];
intval =UIInterfaceOrientationPortrait;??
[invocation setArgument:val atIndex:2];
[invocation invoke];
}
iOS 橫豎屏切換
--- 以上對(duì)xcode10及以前模擬器都沒問題 ---
那么 xCode11 iOS 13 針對(duì)modalStyle推出了新特性,presentViewController的時(shí)候需要強(qiáng)制添加fullScreen的modalStyle,就會(huì)導(dǎo)致在橫屏切換到豎屏的過程中出現(xiàn)一個(gè)詭異的抖動(dòng),那么問題來了,fullScreen到底做了什么,和之前的present 有和區(qū)別呢
這篇文章寫的還是挺詳細(xì)的
A-B 的情況下,用fullScreen的話 會(huì)調(diào)用presentedViewController的viewlayoutsubviews導(dǎo)致重新布局 有一個(gè)切換 閃一下
這里有兩個(gè)方案
fullScreen模式下 在頁(yè)面A里攔截一下這種情況下 攔截一下頁(yè)面
使用overFullScreen 模式,但這個(gè)模式在橫豎屏下會(huì)引發(fā)一系列連鎖反應(yīng),系統(tǒng)不會(huì)幫你強(qiáng)制豎屏,當(dāng)你presentingViewcontroller里實(shí)現(xiàn)了
相關(guān)代理之后,他能夠根據(jù)當(dāng)前window來實(shí)現(xiàn)頁(yè)面的橫豎屏轉(zhuǎn)換,到這里 ,如果你的需求已經(jīng)滿足了,那么恭喜你,你已經(jīng)成功了。下面內(nèi)容可以忽略了~
因?yàn)橛玫搅随I盤和UIMenuController,而這兩個(gè)東西并不在當(dāng)前 application的keywindow上,下面可以看到,而我們要用到的鍵盤和Menu其實(shí)都是依附于UITextEffectsWindow上的
當(dāng)我們使用overFullScreent的style,橫屏進(jìn)入頁(yè)面的時(shí)候,系統(tǒng)其實(shí)并不會(huì)將 UITextEffectsWindow 這個(gè)window自動(dòng)旋轉(zhuǎn)為豎屏,系統(tǒng)判定當(dāng)前仍然是橫屏,name鍵盤和menu仍然是按照橫屏的高度去計(jì)算的,這就會(huì)有問題,針對(duì)這種case,目前用了一個(gè)比較迂回(一個(gè)坑一個(gè)坑去填)的解決辦法。
以上希望能夠幫助到有需要的朋友,有問題進(jìn)一步溝通~
【iOS】Swift4.0 橫豎屏監(jiān)測(cè)、動(dòng)態(tài)切換
前提: APP全局強(qiáng)制豎屏且不支持橫屏!在部分頁(yè)面如果打開橫豎屏開關(guān),則支持橫豎屏動(dòng)態(tài)切換;如果關(guān)閉,則需要點(diǎn)擊才能跳轉(zhuǎn)橫屏頁(yè)面。
設(shè)備在控制頁(yè)面打開橫豎屏開關(guān),即設(shè)備支持橫豎屏動(dòng)態(tài)切換。
下圖做了個(gè)簡(jiǎn)單的gif展現(xiàn),下圖的操作是操作手機(jī)橫豎屏的結(jié)果
下面說一下強(qiáng)制橫屏的處理辦法
強(qiáng)制橫屏就是在設(shè)備僅支持豎屏的前提下
本文標(biāo)題:ios開發(fā)橫豎屏切換,ios橫屏設(shè)置
文章源于:http://fisionsoft.com.cn/article/dsipipj.html