[CS193P] 第十五堂課摘要及心得筆記

在先前的課程中,我們所學習到的大多都是軟體上API的呼叫,並沒有使用到太多硬體上的裝置設備。而在這一次的內容中,我們就會看到如何使用Cocoa Touch的API來操作iPhone的硬體,使用像是加速度感應器、羅盤和地理定位系統等裝置來創造出更多有趣的應用,還請多多指教!
評論
評論

在先前的課程中,我們所學習到的大多都是軟體上 API 的呼叫,並沒有使用到太多硬體上的裝置設備。而在這一次的內容中,我們就會看到如何使用 Cocoa Touch 的 API 來操作 iPhone 的硬體,使用像是加速度感應器、羅盤和地理定位系統等裝置來創造出更多有趣的應用,還請多多指教!

Image Picker

在前幾次的課程內容中,我們在學習 Modal View 的呈現時,曾經有看過如何使用 UIImagePickerController 來讓使用者選取影像。而當我們需要使用照相機、攝影機的硬體功能時,也同樣是透過 Image Picker 來達成。

在 iPhone 平台上,我們主要有以下幾種影像來源:

  • UIImagePickerControllerSourceTypePhotoLibrary -- 照片資料庫(包含同步而來的照片)
  • UIImagePickerControllerSourceTypeCamera -- iPhone 上的照相鏡頭
  • UIImagePickerControllerSourceTypeSavedPhotosAlbum -- 相片膠卷(也就是拍過的照片)

而 Image Picker 提供了 -(BOOL) isSourceTypeAvailable 這個方法讓我們檢查所需要的影像來源是否可以使用(像是 iPod 上就不能使用照相機)。在確定影像來源之後,我們可以設定 sourceType 屬性,來決定使用者可以在這個 Image Picker 中使用哪種影像來源。

此外,UIImagePicker 也有提供 allowsImageEditing 屬性,當這個屬性被設定成 YES 之後,我們就可以讓使用者移動、裁剪照片後再回傳,如下圖所示:

透過 delegate 的設定,在使用者挑選完照片或是拍完照片之後變會呼叫 delegate 方法,或者是使用者取消選取之後,也會呼叫 delegate 方法。這些方法都定義在 UIImagePickerControllerDelegate 中,分別是:

- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingImage:(UIImage*)image editingInfo:(NSDictionary*)editingInfo; // 選取完畢 - (void)imagePickerControllerDidCancel: (UIImagePickerController*)picker; // 取消選取

透過這些方法的呼叫,我們可以取得使用者所挑選的照片,包含裁剪過後的照片和原始檔。要注意的是,在 UIImagePicker 呼叫了這些方法之後,我們必須自己在程式中將 Picker 從畫面上移除,並且 release。投影片的第 18、19 頁有簡單的範例程式碼可以參考。

而我們前面有提過,UIImagePicker 有提供讓使用者自行裁剪照片的功能,在我們開啟這項功能之後,delegate 方法所回傳的 UIImage 就會是裁剪過後的照片。而如果我們希望同時也可以取得原始檔的話,則是透過 editingInfo 中的 UIImagePickerControllerOriginalImage 來取回。

最後,當我們完成照片的操作之後,若有需要將照片存回使用者的相簿中則可以透過呼叫 UIImageWriteToSavedPhotosAlbum 這個由 UIKit 所提供的函式,而這個函式也可以在存檔完成後另外呼叫一個 callback 方法作為通知。

整體來講,大概有幾個重點:

  1. 確認影像來源是否可以使用
  2. delegate 方法要清理畫面和記憶體
  3. 影像佔記憶體很多空間,盡量都寫到檔案系統中
  4. 可以在 iPhone Simulator 中模擬大多數的操作

Core Location

Core Location 是 iPhone 上用來存取地理定位系統的 Framework,主要透過 CLLocationManager 來取得 CLLocation,後者即包含了各種我們所需要的座標資料。

需要注意的是,不同於其他的 delegate 設計,CLLocationManager 只會在使用者更新座標的時候呼叫 delegate 方法,而不是在固定的時間間隔呼叫。

其他 Core Location 的細節說明,還請參考筆者的 第十二堂課摘要及心得筆記 ,其中對於 CCLocationManager 等類別的使用均有說明。

加速度感應器

iPhone 除了優異的多點觸控螢幕之外,也具備了加速度感應器讓開發者可以發揮想像力,設計許多創新的互動方法。如下圖所顯示的,當我們將 iPhone 或是 iPod 側向一旁的時候,其具備的加速度感應器也會偵測到改變。

而加速度感應器最基本的應用莫過於旋轉畫面的顯示了,這樣的功能在 Safari 和 iPhoto 等應用程式中都很常見。我們可以透過 UIDevice 類別來取得目前裝置的方向:

  • beginGeneratingDeviceOrientationNotifications -- 開始傳遞方向訊息
  • UIDeviceOrientationDidChangeNotification -- 方向改變中
  • endGeneratingDeviceOrientationNotifications -- 停止傳遞方向訊息

而 UIDevice 中也有 orientation 屬性可以直接取得目前的方向。

然而,硬體的方向跟目前介面上的方向有可能會是不一致的,我們可以從 UIApplication 的 statusBarOrientation 屬性知道目前介面的方向,並且透過 UIViewController 的以下方法來設定介面選轉的功能:

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation

在大多數的情況下,我們只要設定好以上 UIViewController 的方法,就可以讓介面進行正確的旋轉動作了。

而在 iPhone OS 3.0 之後,Cocoa Touch 也新增了一種 UIEvent 叫做 Shake。就如同多點觸控一般,我們可以透過重載 UIResponser 的 – motionBegan:withEvent: 等一系列的方法來取得 shake 的動作,並且進行相對應的處理。

一般而言,在 iPhone 上的 shake 動作通常代表著「還原」的功能,或者是「隨機播放」這樣的意思。所以如果在設計的過程中需要賦予 shake 動作不同的意義,要記得一定要對使用者詳加提示,避免混淆。

針對一般的應用程式,或許以上的功能已經相當的夠用,但針對遊戲等來講,我們會希望能夠有詳細的加速度數字,以便提供細微的操作。在 iPhone 平台上,加速度感應器分成六軸,如下圖:

而加速度感應器的使用上,與 Core Location 可以說是相當的類似,UIAccelerometer 會以每秒 10~100 的頻率傳遞 UIAcceleration 給 delegate,程式碼如下:

- (void)enableAccelerometerEvents {     UIAccelerometer* theAccel = [UIAccelerometer sharedAccelerometer];     theAccel.updateInterval = 1/50;     theAccel.delegate = self;

比較特別的是,不同於 CLLocationManager,我們不需要建立個別的 UIAccelerometer,只需要呼叫 + sharedAccelerometer 來取得共用的實體物件即可。此外,我們也不需要呼叫某個方法來「開始」,只需要將 delegate 設定好就會開始接收資訊了。至於如果要停止更新的話,則是將 delegate 設定為 nil 就可以了。

在投影片第 85 到 99 頁中,有對實務操作上的一些範例,像是如何透過簡單的數學運算來過濾加速器的資料等等,有興趣的讀者還務必參考。

結論

在這一堂課程中,我們看到許多 iPhone 硬體資源的使用範例以及學習了相關的操作方法。在下一次的課程中

參考資源


一圖看懂 最強留才計畫「TCA」

TCA計畫以人工智慧、資料科學、智慧內容、智慧聯網、數位行銷為核心,推出國際人才循環交流模式,整合企業實習計畫與混成式培訓課程,讓在台外籍學生能快速融入本地企業、增強台灣科技人才庫。
評論
評論
Photo Credit:The News Lens Brand Studio

在變化快速的產業趨勢下,無論是個人或國家都必須不斷強化競爭力,在變革中保持優勢。世界經濟論壇(World Economic Forum, 簡稱WEF)提出的《未來工作報告》(the Future of Jobs Report)[1]預測,在自動化科技與疫情的催化下,到了2025年將有8,500萬個現有的職位消失,但也將產生9,700萬個新崗位,這意味著人才技能的提升與重塑事不宜遲。

但實際上,我們應該從何著手?綜觀歷史,文明的精彩總是源自於「開放」。以新加坡為例,根據世界銀行2021全球創新指數(Global Innovation Index 2021[2])調查,新加坡在全球最具創新力國家中排名第八,這得益於他們吸引對外投資及海外人才的豐碩成果。

有鑑於此,為了連接台灣與世界的創新能量,以經濟部、美國在台協會與工業局三單位為核心促成的「人才循環交流推動計畫(Talent Circulation Alliance Program,簡稱TCA)」,就擔綱起吸引與培育優秀人才的責任。TCA 聚焦於數位經濟產業發展相關主題,如人工智慧、資料科學、智慧物聯網、智慧內容、數位行銷、資安、數位轉型等領域,不僅爭取國際上最頂尖的技術、研發和管理人才,也同時連接資源給本地人才,互相激盪交流,更快速促進台灣未來人才的國際力。

結合交流、培育與媒合的一條龍計畫:TCA

TCA 計畫的目標是促進台灣的國際人才流通,培養一批有能力、國際化、數位化的專業人才,提升我國數位人才素質與國際競爭力。不過,要增進台灣產業的未來人才庫,不能靠單點式的努力,而要從頭至尾、一條龍式的打通脈絡,才能更有效地促進人才成長。

因此,TCA 計畫具備三大任務,一是「人才循環」(Circulation)、二是「人才培育」(Cultivation)、三是「人才鏈結」(Connection)。分別著手海內外學生的交流互動、各領域人才的線上線下混成式學習資源,再到與實務界的串接,創造實習與就業機會,讓學有所用;同時也替產業帶進最新的數位應用,讓實習生激發既有產業的創新力、也讓富有經驗的企業提供實務經驗給新鮮人,兩相刺激、教學相長。

除了實務的工作技能外,TCA 也相當注重外籍學生的融入狀況,幫助他們適應文化上的差異,提供國際培訓和實習計畫,讓國際學生更容易融入台灣職場、台灣學生更容易進入海外單位實習,並於兩者間搭起團隊合作的橋樑。

學以致用,與企業實務接軌

TCA 的實習計畫於 2022 年串接了多達 22 家台灣企業與機構,提供 240 小時培訓與實務研習時數,結合 DIGI+ Talent 跨域數位人才加速躍升計畫(簡稱 DIGI+ 計畫,其對象為 230 名大三至碩二的台灣學生)與 TCA(TCA 的對象為 80 名在台就學之大學至研究所的外籍學生)兩項計畫,讓具有國際背景的求職者得以更快融入並站上合適的舞臺,也讓台灣學生更適應與國際人才互動。

為了避免無效的實習模式,TCA 採用的實習方式也相當特殊:「專題實務研習模式」。這種以專題為主軸的實習,不僅能提供企業有實務價值的提案,也讓在台外籍學生與台灣本地學生有機會共同執行跨領域數位經濟相關專題,達到多贏的局面。

例如,在上一屆計畫中,來自巴基斯坦、泰國的研習生與台灣研習生進行合作,在研習單位(財團法人紡織產業綜合研究所)的輔佐下,開發出「智慧互動瑜珈墊」,透過感測足底壓力判斷使用者姿勢並引導呼吸頻率,可輔助初學者達到瑜伽正念的最佳效果。在專題研習的過程中,外籍研習生與台灣研習生充分進行語言及文化方面交流,並以問題解決為導向,結合智慧織物與數位媒介,最終產出令人眼前為之一亮的產品,並一舉奪得首獎。

在執行的兩年中,此計畫已成功媒合 32 國 138 位外籍生進入 27 家台灣企業與機構進行實習,創造讓人才留台發揮所長的平台。

Photo Credit:TCA 計畫同學提供

線上線下不間斷,免費培訓與資源媒合

此計畫同時提供眾多免費學習資源,包括線上課程與工作坊,讓有興趣的學生們得以共同學習。其中包括「TCA 網路學院」平台,現有 30 門英語授課之數位課程上線,內容針對外籍學生所需的各種知識設計而成,包括實務技能如數位技能、數位行銷,以及文化相關的軟實力課程。

除此之外,計畫也積極辦理諸如數位技能、職場軟實力、文化議題之論壇與工作坊,結合大師對談與企業參訪,讓知識與實務間的距離更為縮短。過去曾舉辦的大師對談講座包括「Hacking for Good : AI in Cybersecurity Forum」,邀請到數據分析公司鄧白氏(Dun & Bradstreet)的高級副總裁兼首席數據科學家 Anthony Scriffignano 博士擔綱演講;另外也和美國在台協會(AIT)於 2021 年共同辦理「看見科技業多元與共融的職場文化」講座,邀請來自科技業的傑出領導者擔任與談貴賓,分享企業如何在職場中實踐 DEIA(指多元 Diversity、公平 Equity、共融 Inclusion 與可及性 Accessibility)的理念,並鼓勵來自不同身分與背景的優秀青年積極投入科技產業。

透過自學課程與大師的觀點分享,讓人才不僅得以學習最前沿的數位技能,更能具備國際視野與宏觀思維,而這些高價值的知識在 TCA 計畫中皆不收取費用,就是希望能降低學習的門檻,讓人才得以盡情吸收各種珍貴的知識。

Photo Credit:TCA 計畫提供

上工啦!全方位國際徵才博覽會與職缺平台

經過了扎實的企業專題實習與超高價值的學習培訓後,最重要的還是讓人才學以致用,最終在產業中發揮價值。因此,TCA 計畫透過辦理國際企業徵才博覽會,以及建置國際人才媒合平台「TCA 國際人才庫」,鎖定國際化、想要跨入數位領域的求職者,提前為台灣的人才轉型做準備,並真正落實「將人才留在台灣」。

以剛落幕的「2022 跨域數位暨國際人才就業博覽會」為例,TCA邀請華碩、廣達、緯創等 30 家企業參與徵才、開放超過 2,000 個職缺,參與求職的人才中,有高達三成為在臺外籍專業人才,連續兩年下來,國際企業徵才博覽會已累積媒合 45 家廠商、超過 700 名人才;而所建置的人才媒合平台,也透過生動活潑的「路線圖」,清楚呈現國際人才來台求學、求職、生活等豐富資訊。

Photo Credit:TCA 計畫提供

透過 TCA 計畫,最終願景是希望得以留才於台灣,在數位轉型的時代積蓄能量、培養我國人才與產業競爭力,打造創新台灣產業。

了解更多
按讚粉絲專頁

經濟部工業局廣告

[1] The Future of Jobs Report 2020
[2] Global Innovation Index 2021