2014年6月17日 星期二

2014年6月13日 星期五

iOS7 視圖移轉(畫面遷移)



整理成以下圖示:




再補充一個片段,在 iOS7 的 UIViewController.h 中有以下宣告:

@interface UIViewController(CustomTransitioning)

@property (nonatomic,assign) id <UIViewControllerTransitioningDelegate> transitioningDelegate NS_AVAILABLE_IOS(7_0);


@end

至於想知道更詳畫說明的人,大家一起出來喝杯咖啡邊聊吧。哈哈…

2014年6月5日 星期四

iOS 8 自訂鍵盤試作

前兩天 iOS8 的登場,筆者覺得亮點挺多、延伸性很廣。雖然習慣看硬不看軟的國內媒體似乎還是不夠滿意的樣子。

iOS8 提供了Extension 機制,而其中筆者第一個想試作的,就是:自訂鍵盤。

二話不說,趕快來介紹一下。

I. Introduction


1. 未來可以下載實作自訂鍵盤的 App,安裝後就能在「設定」-> 「鍵盤」-> 「新增鍵盤」中看到 "購買的鍵盤" 的項目。只要用以往一樣的方式新增鍵盤,就可以跨 App 地使用各種自訂鍵盤了哦。

2. 開發方面,要先安裝好 Xcode 6 以上版本(含beta),然後使用 iOS8 模擬器 (有測試機直接安裝 iOS8 更好)來運行 App。

II. Implementation


1. 新增 Project
2. 新增 Target,並選定「iOS」-> 「Application extension」-> 「Custom Keyboard」。接下來輸入 Project Name、選定開發語言 (也可以選 Swift)後就完成了哦。
3. Target 新增完後,於 Project navigator 中會產生新 Target 對應的 Group,預設會有 Info.plist 及程式檔 (使用 Objective-C 的話,會有一對 .h/.m 檔)
4. 預設範例裡只有一個鍵:可切換鍵盤,該鍵的配置方式是使用程式碼,而非 IB。我的試作使用 xib,選擇在 initWithNibName:bundle 中自行建立並 add subview。
5. 向左刪除一個字元:[self.textDocumentProxy deleteBackward];
6. 切換鍵盤:[self advanceToNextInputMode];
7. 這裡的 self 指的是 UIInputViewController 子類別的實體。UIInputViewController 是:

NS_CLASS_AVAILABLE_IOS(8_0) @interface UIInputViewController : UIViewController

8. 要在 textField/textView 等元件輸出字串時,使用:[self.textDocumentProxy insertText:@"對應鍵盤邏輯的文字"];
9. 其餘按鍵的部分就和一般的 App 開發無異。

III. Deployment


1. 先選擇 App 原來的 Target 進行程式安裝,再選擇 Extension Target 進行安裝。
2. 於 「設定」-> 「鍵盤」-> 「新增鍵盤」 中加入自訂鍵盤
3. 接下來就可以開任意一個 App (備忘錄、Safari...),切換鍵盤到自訂鍵盤後進行輸入。

IV. Issue


1. 就筆者有試用到的:在 Spotlight 或使用提醒事項新增列表時,無法進行鍵入。
2. 依官網說明,設定好 App 本身的 Target 及 Extension 的 Target 中 Info.plist 的 bundle display name 後,就可以在正常顯示自行的鍵盤名稱。
如下:

 (1) Keyboard group name in Purchased Keyboards list in Settings
 (2) Keyboard name in Settings
 (3) Keyboard name in globe key menu

不過我設定後,第(3)的顯示不正常:當設備的語言環境為中文時,長壓「地球」按鈕時,出現的是「繁體中文」;若設備的語言環境為英文時,則顯示「English」。
希望在後續版本會改掉。

V. Reference


https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/index.html#//apple_ref/doc/uid/TP40014214-CH20-SW1

https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html