文章分享至我的个人技术博客: 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