iPhone 軟體的無障礙支援

蘋果去年在 iPhoneOS 3.0 中就加入了三項為視力不佳者服務的設計(不過,因為硬體效能的限制,這三項功能只能夠在 iPhone 3Gs 、最新的 iPod Touch,以及 iPad 使用)-如果你沒有辦法清楚看到 iPhone 上預設大小的文字,你可以開啟畫面的局部放大功能,同時用三隻手指點按畫面,就可以放大手指所在的區域;如果覺得白底黑字不夠清楚,可以將畫面反白,切換成黑底白字。

而如果已經完全失去視力,完全無法透過視力操作電腦,iPhone OS 提供一項名為 Voiceover 的語音功能,開啟後會改變一些觸控的操作行為-原本只要按在畫面中某個元件上(例如按鈕等),就會使用這一個元件的功能,在開啟 Voiceover 之後,單點一下,系統會先告訴你目前點到的地方是怎樣的東西,之後再連續點兩下,才是使用這個元件的功能。

Voiceover 可以念出多種語文,除了我們關心的中文之外,英德法義日自然也不會少;相對的,Mac OS X 上面目前還是只有英文而已,希望蘋果之後也會把這些語言的語音支援,加入 Mac OS X 10.7 當中。

Continue reading

MPMoviePlayerController 與 MPMoviePlayerViewController

ADC 這兩天寄信通告開發者,隨著 iOS 4.0 已經正式上市,接下來如果要在 AppStore 上推出新軟體、或是更新版本,都一定要用 4.0 SDK 編譯。雖然是用 4.0 SDK,我們還是可以透過修改 Deployment Target 的方式,讓編譯出來的軟體也可以在使用 4.0 之前版本作業系統的裝置使用,不是什麼大問題。

不過,如果你的軟體裡頭需要播放影片,使用了系統提供的影片播放元件,就必須注意-MPMoviePlayerController 的宣告與實作變了。

Continue reading

IBOutletCollection

一開始我們在學寫 Cocoa 應用程式的時候,我們學到,當你用 Interface Builder(以下簡稱 IB) 拉完了各種介面-視窗、選單、按鈕-之後,接著,在你的 controller class 中要控制某個 IB 產生的介面元素-假設是一個按鈕,你要產生一個 IBOutlet 成員變數,在 IB 裡頭把成員變數與這個拉出來的按鈕連結起來。按下按鈕要做什麼事情,則要建立一個 IBAction 的介面,繼續在 IB 裡頭連結,最後在 .m 或 .mm 檔案中完成實作。一個 IBOutlet 連結到一個 UI 物件,一個 UI 物件連結到一個 IBAction,一個對一個。

後來我們有了 iPhone。在 iPhone SDK 裡頭,一個按鈕就可以連結不只一個 IBAction,你可以透過 addTarget:action:forControlEvents: 不斷增加指定要負責做事的 class 與拿來做事的 method。一個按鈕按下去,會同時做許多件事情。事情有了變化了,不再只是一對一,而是一對多。

現在我們有了 iOS 4.0,就更從一對多,變成多對多了。iOS 4.0 的 SDK 多了一個新的關鍵字,叫做 IBOutletCollection,於是你可以將一個單一的成員變數,連結到許多的 UI 元件的實體上。

Continue reading

Core Telephony

iOS 4.0 的官方 API 裡頭,多了一個叫做 Core Telephony 的 framework;一直以來 Core Telephony 都是 private API,現在開放出來,但是從文件來看,裡頭根本沒有幾行,既沒有告訴你應該怎麼用,也沒有範例,你從 framework 裡頭寥寥四個 class 的 header 中,也搞不清楚,究竟可以把這個東西用在什麼用途上。

目前只知道可以拿來做兩件事情:1. 知道目前你這隻 iPhone 用的是哪個電信商的服務;2. 知道現在 iPhone 是不是在打電話。

Continue reading