zoukankan      html  css  js  c++  java
  • iOS9 开发新特性 Spotlight使用

       

    1.Spotloight是什么?

      Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight。集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面。

      Demo演示

      

    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以上设备运行,对与低版本的设备需加入这个防止崩溃问题
  • 相关阅读:
    设计模式之原型模式
    【转载】 吵翻了!这张图里到底是人还是狗?心理学家这样说
    【转载】 DeepMind 提出元梯度强化学习算法,显著提高大规模深度强化学习应用的性能
    ubuntu18.04 安装wine64出现错误: X 64-bit development files not found.
    ubuntu18.04 源码方式安装wine , 警告,libxrender 64-bit development files not found, XRender won't be supported.
    【转载】 信息如何像零食、金钱一样掌控你的大脑
    图像处理算法 之 滤波 模糊(基于OpenCV)
    图像处理之FPN校正
    ISP-黑电平校正(BLC)
    ISP基础(0y):图像传感器
  • 原文地址:https://www.cnblogs.com/jgCho/p/4961435.html
Copyright © 2011-2022 走看看