文章分享至我的個人技術部落格: https://cainluo.github.io/14978567639492.html
Siri Kit Intents Extension UI
之前我們講了Siri Kit Intents Extension
, 但並沒有去講到UI
的方面, 這次我們把最後一丟丟給講完把.
這裡所用的工程還是之前的, 如果不懂得朋友, 可以去看看的那篇文章, 裡面也有工程的下載地址.
這裡的工程是Objective-C
版本的, 如果要看Swift
版本, 可以到這裡去檢視.
定製UI
這裡就不扯那麼多廢話了, 我們可以在SiriKitIntentsExtensionUI
資料夾裡找到MainInterface.storyboard
檔案, 在這裡佈置我們想要的UI
:
然後和Controller
關聯起來:
具體實現
回到我們的IntentViewController.m
檔案, 在- (void)configureWithInteraction:(INInteraction *)interaction context:(INUIHostedViewContext)context completion:(void (^)(CGSize))completion;
方法裡開始寫我們的程式碼:
// 擷取傳送訊息的Intent
INSendMessageIntent *intent = (INSendMessageIntent *)(interaction.intent);
// 獲取使用者資訊
NSString *name = [[intent.recipients lastObject] displayName];
NSString *content = intent.content;
NSString *icon = [UserList checkUserWithName:name].userIcon;
// 展示自己與接收人的頭像
self.userImageIcon.image = [UIImage imageNamed:@"icon3"];
self.toUserImageIcon.image = [UIImage imageNamed:icon];
// 改變標題
self.sectionTitleLabel.text = [NSString stringWithFormat:@"與\"%@\"對話", name];
// 傳送的訊息內容
self.messageContentLabel.text = content;
// 隱藏或顯示控制元件
self.sectionTitleLabel.hidden = !name.length;
self.messageContentLabel.hidden = !content.length;
self.messageBackgroundImage.hidden = !content.length;
self.toUserImageIcon.hidden = !self.toUserImageIcon.image;
if (completion) {
completion(CGSizeMake([self desiredSize].width, 150));
}
複製程式碼
效果:
雖然UI
已經展示了, 但特麼好像有些多啊, 這裡我們需要新增多一個協議, 並且是寫一個協議的方法:
@interface IntentViewController () <INUIHostedViewSiriProviding>
@end
- (BOOL)displaysMessage {
return YES;
}
複製程式碼
效果:
這裡我們需要注意一點, 開啟工程的配置, 看到SiriKitIntentsExtension
和SiriKitIntentsExtensionUI
的Copy Bundle Resources
有沒有連結Assets.xcassets
, 如果沒有連結上的話, 那就會造成本地圖片沒法展示:
工程地址
專案地址: https://github.com/CainRun/iOS-10-Characteristic/tree/master/10.Siri%20Intents%20UI