iOS9 开发新特性 Spotlight使用
2015-11-13 10:37
477 查看
1.Spotloight是什么?
Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面。
Demo演示
![](http://images2015.cnblogs.com/blog/423172/201511/423172-20151112201913494-1959089873.gif)
2.如何集成Spotlight
a.添加所需要的框架
注,很多APP都是支持iOS9以下的,因此加入#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000,可以解决iOS9以下设备运行崩溃的问题
b.创建 CSSearchableItemAttributeSet 对象
c.创建可检索条目CSSearchableItem
d.添加检索入口
========完整代码========
========加载本地图片的使用方法========
========加载网络图片的使用方法========
========删除所有spotlight的方法========
========删除指定的spotlight的方法========
========点击spotlight后的响应方法========
备注:
Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面。
Demo演示
![](http://images2015.cnblogs.com/blog/423172/201511/423172-20151112201913494-1959089873.gif)
2.如何集成Spotlight
a.添加所需要的框架
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 #import <CoreSpotlight/CoreSpotlight.h> #import <MobileCoreServices/MobileCoreServices.h> #endif
注,很多APP都是支持iOS9以下的,因此加入#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000,可以解决iOS9以下设备运行崩溃的问题
b.创建 CSSearchableItemAttributeSet 对象
CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage]; attributeSet.title = spotlightTitle; // 标题 attributeSet.keywords = keywords; // 关键字,NSArray格式 attributeSet.contentDescription = spotlightDesc; // 描述 attributeSet.thumbnailData = photo; // 图标, NSData格式 // 把图片转换成NSData的方法 UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]
c.创建可检索条目CSSearchableItem
// spotlightInfo 可以作为一些数据传递给接受的地方 // domainId id,通过这个id来判断是哪个spotlight CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];
d.添加检索入口
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) { if (error) { NSLog(@"indexSearchableItems Error:%@",error.localizedDescription); } }];
========完整代码========
- (void)insertSearchableItem:(NSData *)photo spotlightTitle:(NSString *)spotlightTitle description:(NSString *)spotlightDesc keywords:(NSArray *)keywords spotlightInfo:(NSString *)spotlightInfo domainId:(NSString *)domainId {
CSSearchableItemAttributeSet *attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
attributeSet.title = spotlightTitle; // 标题
attributeSet.keywords = keywords; // 关键字,NSArray格式
attributeSet.contentDescription = spotlightDesc; // 描述
attributeSet.thumbnailData = photo; // 图标, NSData格式
// spotlightInfo 可以作为一些数据传递给接受的地方 // domainId id,通过这个id来判断是哪个spotlight CSSearchableItem *item = [[CSSearchableItem alloc] initWithUniqueIdentifier:spotlightInfo domainIdentifier:domainId attributeSet:attributeSet];
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler:^(NSError * error) {
if (error) {
NSLog(@"indexSearchableItems Error:%@",error.localizedDescription);
}
}];
}
========加载本地图片的使用方法========
[self insertSearchableItem:UIImagePNGRepresentation([UIImage imageNamed:@"xxx.png"]) spotlightTitle:@"等风来" description:@"等风来描述" keywords:@[@"鲍鲸鲸",@"大丽花"] spotlightInfo:@"传递过去的值" domainId:@"com.wb.spotlight"];
========加载网络图片的使用方法========
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://hiphotos.baidu.com/doc/pic/item/eaf81a4c510fd9f905f61934262dd42a2934a48e.jpg"]]; [self insertSearchableItem:data spotlightTitle:@"等风来" description:@"等风来描述" keywords:@[@"鲍鲸鲸",@"大丽花"] spotlightInfo:@"传递过去的值" domainId:@"com.wb.spotlight"]; });
========删除所有spotlight的方法========
[[CSSearchableIndex defaultSearchableIndex] deleteAllSearchableItemsWithCompletionHandler:^(NSError * _Nullable error) { if (error) { NSLog(@"%@", error.localizedDescription); } }];
========删除指定的spotlight的方法========
[[CSSearchableIndex defaultSearchableIndex] deleteSearchableItemsWithDomainIdentifiers:@"domainId" completionHandler:^(NSError * _Nullable error) { if (error) { NSLog(@"%@", error.localizedDescription); } }];
========点击spotlight后的响应方法========
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) { NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier]; // 接受事先定义好的数值,如果是多个参数可以使用把json转成string传递过来,接受后把string在转换为json NSLog(@"传递过来的值%@", uniqueIdentifier); } return YES; }
备注:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 90000 // 相关spotlight的方法等 #endif // Spotlight支持iOS9以上设备运行,对与低版本的设备需加入这个防止崩溃问题
相关文章推荐
- 一些题目iOS
- IOS的通知
- 修改图像大小的方法,IOS图片缩放功能
- iOS开发-常用第三方开源框架介绍
- iOS 代理为啥要用weak修饰? (刨根问底一)
- iOS 万能跳转界面方法 (runtime实用篇一)
- iOS 9音频应用播放音频之ios9音频基本功能
- iOS之应用程序国际化
- iOS Animations
- iOS 精益编程
- IOS8企业版无法通过itms-services覆盖安装,没反应
- iOS中区分照片的来源
- iOS6、7、8、9新特性总汇和适配说明
- iOS searchBar最近搜索结果的实现
- 初探 iOS8 中的 Size Class
- iOS 定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等授权检测
- iOS 中 Cookie的简单使用
- iOS9 适配(杂七杂八)
- iOS/OS X内存管理(一):基本概念与原理
- 17个提升iOS开发效率的必用工具