在最近的項(xiàng)目中拿撩,因?yàn)橐o設(shè)置頭像衣厘,需要訪問到相冊(cè),本來覺得這是一個(gè)很簡單的問題,直接調(diào)用 UIImagePickerController 從相冊(cè)選擇照片就可以了影暴,一直以來也是這么做的错邦,,但是以前都是在 iPhone 上實(shí)現(xiàn)的型宙,這次是在 iPad 上實(shí)現(xiàn)撬呢,并且我們的項(xiàng)目是只支持橫屏的,所以在條用相冊(cè)的時(shí)候妆兑,程序直接就 crash 了魂拦,這是讓我沒有想到的,錯(cuò)誤原因是
Supported orientations has no common orientation with the application, and [PUUIAlbumListViewController shouldAutorotate] is returning YES
在網(wǎng)上查閱到的解決辦法大都是該 UIImagePickerViewController 添加一個(gè)類別搁嗓,重寫它的設(shè)備方向的方法芯勘,下面是一個(gè) stack overflow 上面的答案
在程序中我試過這種方法,然而并沒有什么用腺逛。
同時(shí)在這個(gè)答案的下面還有另外一種方法荷愕,是可以解決程序崩潰的,但是這種呈現(xiàn)的效果棍矛,好吧路翻,我不想吐槽 ╮(╯▽╰)╭
將圖片的取景框放在當(dāng)前的視圖上,sourceRect 決定放的位置茄靠,直接截取了
這種呈現(xiàn)的效果就是想 UIPopoverController 的效果茂契。
但是的但是,這并不是我要的效果慨绳,難道就沒有其他的解決辦法了嗎掉冶,哦,my god .
被這個(gè)問題困擾了挺長一段時(shí)間的脐雪,但是慶幸厌小,后來還是解決了,先給自己贊一個(gè) ?(*^__^*)
還是受的 stack overflow 上面的解決辦法的啟發(fā)战秋,既然相冊(cè)不支持橫屏璧亚,那就是說在調(diào)用相冊(cè)的時(shí)候讓設(shè)備支持所有方向就好了,當(dāng)取消相冊(cè)的時(shí)候在讓設(shè)備又只支持橫屏好了脂信,當(dāng)時(shí)只是在調(diào)用相冊(cè)的那個(gè) viewController 中重寫設(shè)備支持方法癣蟋,結(jié)果自然是沒有什么卵用,后來嘗試在入口類里重寫方法
? ??- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window { ? ? ? ?returnUIInterfaceOrientationMaskAll; ?}
這樣自然是可以的狰闪,但是這樣造成的問題就是疯搅,當(dāng)取消相冊(cè)的時(shí)候,設(shè)備并沒能切回只支持橫屏埋泵,到了這一步幔欧,能想到的是就是當(dāng)調(diào)用和取消調(diào)用相冊(cè)的時(shí)候通知設(shè)備應(yīng)該支持哪些方向罪治,設(shè)置頭像的 viewController 層次比較深,本來準(zhǔn)備使用通知礁蔗,但是并沒有成功觉义,具體的原因有些忘記了,⊙﹏⊙b汗
正在冥思苦想的時(shí)候浴井,突然意識(shí)到我在項(xiàng)目里有運(yùn)用到 單例類晒骇,就想說我是不是能給單例類一個(gè)標(biāo)識(shí),用來標(biāo)識(shí)是否在調(diào)用相冊(cè)滋饲,最后的結(jié)果是這樣的
實(shí)驗(yàn)的結(jié)果自然是成功的厉碟,切回當(dāng)前程序的時(shí)候,旋轉(zhuǎn)屏幕屠缭,并沒有發(fā)生 UI 離開位置的情況箍鼓,但使用過程中,還有一個(gè)地方不是很好呵曹,就是調(diào)用相冊(cè)的時(shí)候款咖,相冊(cè)顯示是以豎屏的狀態(tài)呈現(xiàn)的,用戶在使用的時(shí)候要先旋轉(zhuǎn)屏幕到豎屏奄喂,切回程序的時(shí)候又要旋轉(zhuǎn)回橫屏铐殃,使用起來不是很舒服,最后想到的解決辦法是給 UIImagePickerController 指定支持的方向?yàn)?橫屏方向
總結(jié)了一下跨新,每次調(diào)用一個(gè) 視圖控制器 的時(shí)候富腊,都會(huì)調(diào)用指定支持屏幕的方法 - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 同時(shí)在一個(gè)視圖控制器顯示的時(shí)候,會(huì)調(diào)用自己的 支持屏幕方向 supportedInterfaceOrientations 的方法域帐,所以才能在 UIImagePickerController 顯示的時(shí)候通過指定支持方向來改變 其在用戶面前展現(xiàn)的方向赘被。