iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
Mobile Development

諸神黃昏下的 iOS 工程師系列 第 12

# D12 - 躺著玩,坐著玩,趴著玩... 還是不要亂玩好了 QQ

讓我們透過程式碼來控制裝置允許擺置的方向吧!

? 隕石小故事

有時候我們在開發專案的時候會選擇 App 裝置方向,通常分為直向、橫向或是兩者皆允許。而在隕石開發時期中,我碰到了一個 App 需要將預設裝置方向設定為直向,但是,需要在某些時候因為畫面需求,所以需要允許裝置能夠橫向顯示。這時我就頭大了,第一次遇到這種設置,到底該怎樣靈活的切換裝置允許方向呢?

Overview

在 APP 開發中,大部分設計都只能直向顯示,如果需要橫向顯示可能需要其他的設計稿。但是,有時候某些功能如果能透過橫向的方式顯示,那效果可能更好,例如播放影片或是玩遊戲等等...。這篇文章就來帶大家了解,如何設置裝置允許方向以及如何讓裝置轉向。


實作

|一般設置裝置方向

通常我們會到專案設定下去勾選裝置允許的方向,如果想單純直向顯示就會把 Landscpae Left/Right 給拿掉;反之則是拿掉 Portrait。

話說好像很少 APP 會勾選 UpsideDown ?

|鎖定方向與畫面轉向

這個方法是在 StackOverflow 上找到的,覺得很不錯分享給大家 ?

首先,我們到我們的 AppDelegate 中新增一個屬性 orientationLock ,我們之後會透過它來管理裝置允許方向,預設為 .all

接著我們新增一個 supportedInterfaceOrientationsFor 方法,用來指定我們的 ViewController 支援方向,並且 return 剛剛所建立的 orientationLock

接著我們可以建立一個 AppUtility 並且在裡面建立兩個 static 方法,方便我們調用:

第一個 lockOrientation 方法會獲取到我們的 AppDelegate,並且透過參數更換原有的 orientationLock。而第二個 lockOrientation 方法,雖然名稱一樣,但是他多帶了一個 rotateOrientation 參數,它會在更換執行第一個 lockOrientation 函數之後,接著將我們的畫面轉向至 rotateOrientation 所指定的方位。

接著到我們想要鎖定的 ViewController 上,透過 AppUtility.lockOrientation 來鎖定方向:

運行後,我們將裝置轉橫看看:

你會發現我們的畫面已經被鎖定為我們所指定的 .portrait

再來,我們來嘗試另外一個方法,我們只希望在有 Device 標籤的 ViewController 能夠自由轉向,而其他畫面只能允許 .portrait 時,我們可以先將 orientationLock 改為 .portrait,接著我們在有 Device 標籤的 ViewController 加上這兩段程式碼:

首先我們在 viewWillAppear 中加上 AppUtility.lockOrientation(.allButUpsideDown, andRotateTo: .landscapeRight) ,讓 ViewController 在進入時這是允許方向為全部,並且向右轉橫。而之後在 viewWillDisappear 的時候,再調用相同的方法,將畫面方向限制為 .portrait,同時也轉至 .portrait

接著讓我們來看看畫面我們的限制跟轉向是否成功吧!


Summary

當初我以為如果設定裝置方向為 .portrait 後,就不能再更換了,沒想到上網一查竟然找到有一個這麼棒的方式可以靈活的修改裝置方向,並且同時也能夠將裝置畫面給轉向(真不愧是開發者的好朋友 StackOverflow ??)。那我們這篇教學就到這邊結束,如果你有更好的方式來修改裝置方向的話,也歡迎跟我分享/交流。


上一篇
D11 - 爭什麼?摻在一起做成 StackView 啊~笨蛋
下一篇
D13 - 通通給我滑起來,滑動解鎖/操作
系列文
諸神黃昏下的 iOS 工程師31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言