成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

ios開發(fā)橫豎屏,ios怎么把橫屏弄成豎屏

iOS 橫豎屏切換

--- 以上對(duì)xcode10及以前模擬器都沒問題 ---

成都創(chuàng)新互聯(lián)公司專注于江油企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站制作。江油網(wǎng)站建設(shè)公司,為江油等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

那么 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模式下 在頁面A里攔截一下這種情況下 攔截一下頁面

使用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)頁面的橫豎屏轉(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)入頁面的時(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中單個(gè)頁面橫豎屏切換 點(diǎn)擊退出再退回到豎屏。

在開發(fā)項(xiàng)目的時(shí)候,遇到了一個(gè)問題,就是其中一個(gè)頁面需要強(qiáng)制橫屏,而其他頁面要強(qiáng)制豎屏,然后返回在回到橫屏,總結(jié)了一些人的經(jīng)驗(yà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è)頁面自動(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開發(fā) 橫豎屏切換問題

在你想支持橫豎屏的viewController里面重寫兩個(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)以下問題:

你的navigationController只支持豎屏,但是你push到了某個(gè)新的controller中,這個(gè)controller支持橫豎屏,當(dāng)你在新的controller中切換到橫屏后(也有可能在切換到橫屏然后pop回來后),這時(shí)候程序會(huì)閃退,因?yàn)槟愕膎avigationController不支持橫屏。

如果你想解決這個(gè)問題,就需要自己寫一個(gè)UINavigationController的子類,在這個(gè)類中重寫方法:

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è)問題了。

【iOS】Swift4.0 橫豎屏監(jiān)測(cè)、動(dòng)態(tài)切換

前提: APP全局強(qiáng)制豎屏且不支持橫屏!在部分頁面如果打開橫豎屏開關(guān),則支持橫豎屏動(dòng)態(tài)切換;如果關(guān)閉,則需要點(diǎn)擊才能跳轉(zhuǎn)橫屏頁面。

設(shè)備在控制頁面打開橫豎屏開關(guān),即設(shè)備支持橫豎屏動(dòng)態(tài)切換。

下圖做了個(gè)簡(jiǎn)單的gif展現(xiàn),下圖的操作是操作手機(jī)橫豎屏的結(jié)果

下面說一下強(qiáng)制橫屏的處理辦法

強(qiáng)制橫屏就是在設(shè)備僅支持豎屏的前提下

iOS 關(guān)于橫豎屏問題

那么問題來了,既然有兩處都可以設(shè)置,那么最終取值以哪一個(gè)為準(zhǔn)呢?

通過測(cè)試發(fā)現(xiàn),如果兩處都設(shè)置了,最終以第二種設(shè)置為(主要)判斷依據(jù);如果第二處未設(shè)置,則以第一處為準(zhǔn)。

只有當(dāng)前window支持某個(gè)方向的旋轉(zhuǎn),才能對(duì)控制器(如UIviewcontroller)進(jìn)行相應(yīng)方向的旋轉(zhuǎn)并達(dá)到想要的效果(內(nèi)容跟著轉(zhuǎn)動(dòng))。

設(shè)置了可旋轉(zhuǎn)的方向之后,就要對(duì)個(gè)別控制器做更細(xì)致的限制了,比如想讓A控制只能豎屏,或者讓B控制器只能橫屏,就需要用到VC的擴(kuò)展方法(系統(tǒng)自帶的)

通過創(chuàng)建一個(gè)新項(xiàng)目,頁面布局如下:

分別自定義了UINavigationcontroller和UIviewcontroller,并重寫了vc旋轉(zhuǎn)相關(guān)的三個(gè)擴(kuò)展方法,將UINavigationcontroller設(shè)置為window的rootviewcontroller

直接啟動(dòng)APP查看旋轉(zhuǎn)方法調(diào)用情況如下:

通過以上打印結(jié)果可以看出,APP啟動(dòng)時(shí),調(diào)用順序?yàn)锳PPdelegate的application:supportedInterfaceOrientationsForWindow: - nav的supportedInterfaceOrientations - nav的shouldAutorotate - vc的supportedInterfaceOrientations

通過以上結(jié)果論證得出結(jié)論:APP在監(jiān)聽到旋轉(zhuǎn)時(shí),會(huì)首先通知window 并執(zhí)行delegate中的supportedInterfaceOrientationsForWindow方法,然后通知rootviewcontroller并執(zhí)行supportedInterfaceOrientations方法,最后通知棧頂vc并執(zhí)行supportedInterfaceOrientations。

以上例子我們發(fā)現(xiàn)只調(diào)用了nav的shouldAutorotate,而棧頂vc的shouldAutorotate方法被忽略了,或許我們可以猜測(cè)出,是否能夠旋轉(zhuǎn)取決于vc的父容器即nav。

此時(shí),我們手動(dòng)旋轉(zhuǎn)模擬器,看看打印結(jié)果如何?

通過以上打印結(jié)果可以看出,手動(dòng)旋轉(zhuǎn)APP時(shí),調(diào)用順序?yàn)锳PPdelegate的application:supportedInterfaceOrientationsForWindow: - nav的supportedInterfaceOrientations - nav的shouldAutorotate

即使,手動(dòng)旋轉(zhuǎn)手機(jī),也沒有調(diào)用vc的shouldAutorotate方法,甚至連vc的supportedInterfaceOrientations方法都沒有調(diào)用,

為了進(jìn)一步驗(yàn)證猜想,我們點(diǎn)擊push按鈕,跳轉(zhuǎn)到另一個(gè)只允許橫屏的自定義vc(LandscapeRightVC),打印結(jié)果如下:

通過打印可以看到只調(diào)用了LandscapeRightVC的旋轉(zhuǎn)方向的方法,而supportedInterfaceOrientations、shouldAutorotate方法均未調(diào)用,但屏幕方向確實(shí)已經(jīng)橫屏了,之所以能夠橫屏?xí)r因?yàn)榇藭r(shí)nav支持橫屏方向,進(jìn)一步驗(yàn)證了以上觀點(diǎn)。

我們?cè)賹?dāng)前nav設(shè)置為只支持豎屏,并且點(diǎn)擊present按鈕,跳轉(zhuǎn)到只支持橫屏的vc看看打印情況:

執(zhí)行順序大致是:

[AppDelegate application:supportedInterfaceOrientationsForWindow:] -

[NavVC supportedInterfaceOrientations] -

[LandscapeRightVC preferredInterfaceOrientationForPresentation] -

[LandscapeRightVC supportedInterfaceOrientations] -

[NavVC shouldAutorotate] -

[LandscapeRightVC shouldAutorotate] -

[LandscapeRightVC supportedInterfaceOrientations]

那么對(duì)于一個(gè)項(xiàng)目中個(gè)別頁面需要橫屏?xí)r,我們大致可以進(jìn)行如下寫法:

假如將rootviewcontroller設(shè)置為tabbar,并將tabbar設(shè)置為只支持豎屏,而將其中一個(gè)item設(shè)置為LandscapeRightVC,打印結(jié)果如下:

順便提一提UIDeviceOrientation(設(shè)備方向)和UIInterfaceOrientation(UI方向)的區(qū)別

當(dāng)前題目:ios開發(fā)橫豎屏,ios怎么把橫屏弄成豎屏
當(dāng)前網(wǎng)址:http://jinyejixie.com/article4/hojpoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、手機(jī)網(wǎng)站建設(shè)、Google、網(wǎng)站改版、小程序開發(fā)軟件開發(fā)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
镇雄县| 达孜县| 额济纳旗| 兴城市| 新密市| 集贤县| 临高县| 工布江达县| 玉山县| 东台市| 交口县| 蕉岭县| 建德市| 伊吾县| 宁阳县| 措美县| 寿宁县| 南溪县| 佛坪县| 山阴县| 泗水县| 水城县| 楚雄市| 和田市| 沙雅县| 玛曲县| 耿马| 包头市| 沛县| 遵义市| 广汉市| 东安县| 镇康县| 许昌市| 鹤岗市| 太白县| 宜良县| 梓潼县| 武陟县| 秀山| 会泽县|