【iOS特性】3D Touch主屏交互

3D Touch简介

3D Touch 是苹果推出的一项屏幕技术,它通过识别用户按压屏幕的力度,提供更丰富的交互体验。

3D Touch的主要表现形式有三种:

  1. 主屏交互(Home Screen Interaction):在手机桌面上,用户可以通过用力按压应用图标来快速访问该应用的快捷操作菜单,这种方式可以在应用图标上静态或动态地添加快捷操作。

  2. 预览和跳转(Peek and Pop):用户在手机屏幕上用力按压想要预览的选项位置,可以弹出一个可以预览二级页面的预览窗口,如果继续用力,就可以直接打开或“Pop”进入该选项。

  3. Live Photo:这是3D Touch技术的延伸,允许用户拍摄带有动态效果的照片。在待机画面上,通过3D Touch可以操作通知,而且可以将动态图片(Live Photo)设置为锁屏壁纸,通过不同力度的按压来预览动态效果。

3D Touch效果预览

在这里插入图片描述

主屏交互(Home Screen Interaction)

注意:

当我们长按手机屏幕上的一些应用图标时,常会看到应用下方弹出的快捷菜单。这些菜单提供了快速入口,让我们能够立即打开应用并跳转到特定的功能页面,这就是 3D Touch 技术中的“主屏交互”功能。

在这里插入图片描述

主屏交互特点:

  • 主屏交互的按钮有指定的模型类 UIApplicationShortcutItem,每个选项都是一个 UIApplicationShortcutItem
  • 主屏交互有两种配置方式,一种是 静态添加,一种是 动态添加

1.静态添加

在项目工程的 info.plist 文件中添加 UIApplicationShortcutItems 属性。

在这里插入图片描述

这里配置了5项,长按应用图标实际只展示出来了4项(主屏交互快捷菜单限制4项没问题

在这里插入图片描述

info.plistUIApplicationShortcutItems 列表内容

  • UIApplicationShortcutItemType:快捷可选项中按钮的唯一标示,用作判断点击了哪一个快捷按钮(必填)
  • UIApplicationShortcutItemTitle:快捷可选项中按钮名称(必填)
  • UIApplicationShortcutItemSubtitle:快捷可选项的子标题(可选)
  • UIApplicationShortcutItemIconType:快捷可选项的图标(可选)
  • UIApplicationShortcutItemIconFile:快捷可选项的自定义图标名(可选)
  • UIApplicationShortcutItemUserInfo:快捷可选项的附加信息(可选)

2.动态添加

动态添加就是通过生成 shortcutItem 对象数组,添加给 UIApplication 单例对象的 shortcutItems

使用系统icon,代码配置如下:

// 首页
UIApplicationShortcutItem *homeShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.home" localizedTitle:@"首页" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeHome] userInfo:nil]; 
// 我的
UIApplicationShortcutItem *carShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.qiche" localizedTitle:@"车辆" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCompose] userInfo:nil];
// 发现
UIApplicationShortcutItem *disShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.faxian" localizedTitle:@"发现" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch] userInfo:nil];
// 我的
UIApplicationShortcutItem *myShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.wode" localizedTitle:@"我的" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeTask] userInfo:nil];
// 赋值给Application的shortcutItems  
[UIApplication sharedApplication].shortcutItems = @[homeShoreItem, carShoreItem, disShoreItem, myShoreItem];

在这里插入图片描述

使用自定义icon,代码配置如下:

// 首页
UIApplicationShortcutItem *homeShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.home" localizedTitle:@"首页" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName: @"tab_shouye_normal"] userInfo:nil];  
// 我的
UIApplicationShortcutItem *carShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.qiche" localizedTitle:@"车辆" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithTemplateImageName: @"tab_che_normal"] userInfo:nil];
// 发现
UIApplicationShortcutItem *disShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.faxian" localizedTitle:@"发现" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName: @"tab_discover_normal"] userInfo:nil];    
// 我的
UIApplicationShortcutItem *myShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.wode" localizedTitle:@"我的" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithTemplateImageName: @"tab_wode_normal"] userInfo:nil];
// 赋值给Application的shortcutItems  
[UIApplication sharedApplication].shortcutItems = @[homeShoreItem, carShoreItem, disShoreItem, myShoreItem];

在这里插入图片描述

UIApplicationShortcutItem 配置内容

  • type:快捷可选项的特定字符串(必填)
  • localizedTitle:快捷可选项的标题(必填)
  • localizedSubtitle:快捷可选项的子标题(可选)
  • icon:快捷可选项的图标(可选)
  • userInfo:快捷可选项的附加信息(可选)

主屏交互事件处理

注意:

  • 处理主屏交互事件需要实现 AppDelegate 的 **- (void)application: performActionForShortcutItem: completionHandler:**代理方法
  • 如果你项目使用了**SceneDelegate****,那么需要实现- (void)windowScene:performActionForShortcutItem:completionHandler:**代理方法

成功设置好主屏交互的快捷按钮后,剩下要做的就是在APP内监听快捷按钮的点击事件,此时我们就需要用到 UIApplicationShortcutItemType,快捷按钮的唯一标示符。

在 AppDelegate 中实现 -(void)application: performActionForShortcutItem: completionHandler: 代理方法

// AppDelegate.m

#pragma mark - ShortcutItem Click Delegate
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
    //不管APP在后台还是进程被杀死,只要通过主屏快捷操作进来的,都会调用这个方法
    //不管APP在后台还是进程被杀死,只要通过主屏快捷操作进来的,都会调用这个方法
    if ([shortcutItem.type isEqualToString:@"com.touch.home"]) { // 首页
        NSLog(@"首页");
        return;
    }
    if ([shortcutItem.type isEqualToString:@"com.touch.qiche"]) { // 车辆
        NSLog(@"车辆");
        return;
    }
    if ([shortcutItem.type isEqualToString:@"com.touch.faxian"]) { // 发现
        NSLog(@"发现");
        return;
    }
    if ([shortcutItem.type isEqualToString:@"com.touch.wode"]) { // 我的
        NSLog(@"我的");
        return;
    }
}

SceneDelegate 中需要实现 **- (void)windowScene: performActionForShortcutItem: completionHandler:**代理方法

    // SceneDelegate.m

    - (void)windowScene:(UIWindowScene *)windowScene performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
        //不管APP在后台还是进程被杀死,只要通过主屏快捷操作进来的,都会调用这个方法
        if ([shortcutItem.type isEqualToString:@"com.touch.home"]) { // 首页
            NSLog(@"首页");
            return;
        }
        if ([shortcutItem.type isEqualToString:@"com.touch.qiche"]) { // 车辆
            NSLog(@"车辆");
            return;
        }
        if ([shortcutItem.type isEqualToString:@"com.touch.faxian"]) { // 发现
            NSLog(@"发现");
            return;
        }
        if ([shortcutItem.type isEqualToString:@"com.touch.wode"]) { // 我的
            NSLog(@"我的");
            return;
        }
    }

完整代码

// AppDelegate.m

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [self createShortcuts];
    
    return YES;
}

#pragma mark - ShortcutItem Click Delegate
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
    //不管APP在后台还是进程被杀死,只要通过主屏快捷操作进来的,都会调用这个方法
    //不管APP在后台还是进程被杀死,只要通过主屏快捷操作进来的,都会调用这个方法
    if ([shortcutItem.type isEqualToString:@"com.touch.home"]) { // 首页
        NSLog(@"首页");
        return;
    }
    if ([shortcutItem.type isEqualToString:@"com.touch.qiche"]) { // 车辆
        NSLog(@"车辆");
        return;
    }
    if ([shortcutItem.type isEqualToString:@"com.touch.faxian"]) { // 发现
        NSLog(@"发现");
        return;
    }
    if ([shortcutItem.type isEqualToString:@"com.touch.wode"]) { // 我的
        NSLog(@"我的");
        return;
    }
}

- (void)createShortcuts {
    if ( @available(ios 9.1, *)) {
        // 首页
        UIApplicationShortcutItem *homeShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.home" localizedTitle:@"首页" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName: @"tab_shouye_normal"] userInfo:nil];
        // 我的
        UIApplicationShortcutItem *carShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.qiche" localizedTitle:@"车辆" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithTemplateImageName: @"tab_che_normal"] userInfo:nil];
        // 发现
        UIApplicationShortcutItem *disShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.faxian" localizedTitle:@"发现" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName: @"tab_discover_normal"] userInfo:nil];
        // 我的
        UIApplicationShortcutItem *myShoreItem = [[UIApplicationShortcutItem alloc] initWithType:@"com.touch.wode" localizedTitle:@"我的" localizedSubtitle:@"" icon:[UIApplicationShortcutIcon iconWithTemplateImageName: @"tab_wode_normal"] userInfo:nil];
        // 赋值给Application的shortcutItems
        [UIApplication sharedApplication].shortcutItems = @[homeShoreItem, carShoreItem, disShoreItem, myShoreItem];
    }
}
@end

友情提示

见原文:【iOS特性】3D Touch主屏交互)

本文同步自微信公众号 “程序员小溪” ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值