• 3D Touch,苹果iPhone 6s的新功能。有Quick Actions以及Peek Pop 两种新手势,Peek专注于预览,Pop可以全面展现内容。

    3D Touch,苹果iPhone 6s的新功能。有Quick Actions以及Peek Pop 两种新手势,Peek专注于预览,Pop可以全面展现内容。

    一、Quick Actions

    1、设置重按图标显示的操作, AppDelegate中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中执行:

        // 拍照 UIApplicationShortcutIcon 设置icon
        UIApplicationShortcutIcon *iconCamera = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCapturePhoto];
        // UIMutableApplicationShortcutItem 设置标题和type(可以作为一种标识)
        UIMutableApplicationShortcutItem *itemCamera = [[UIMutableApplicationShortcutItem alloc] initWithType:@"camera" localizedTitle:@"拍照"];
        
        itemCamera.icon = iconCamera;
        
        // 相册
        UIApplicationShortcutIcon *iconPhotoLibrary = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeLove];
        UIMutableApplicationShortcutItem *itemPhotoLibrary = [[UIMutableApplicationShortcutItem alloc] initWithType:@"photoLibrary" localizedTitle:@"相册"];
        
        itemPhotoLibrary.icon = iconPhotoLibrary;
        
        // 设置自定义图片的icon
    //    NSDictionary *userInfo1 = @{@"key":@"example"};
        UIApplicationShortcutIcon *exampleIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"imageName"];
        UIMutableApplicationShortcutItem *exampleItem = [[UIMutableApplicationShortcutItem alloc] initWithType:@"example" localizedTitle:@"大标题" localizedSubtitle:@"小标题" icon:exampleIcon userInfo:nil]; // 分大标题和小标题
        
        application.shortcutItems = @[itemCamera, itemPhotoLibrary, exampleItem];
    
    2、在AppDelegate.m中实现下面方法:

    // 自己实现下面方法
    - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
    {
        // 根据type响应每个按钮的结果。
        if ([shortcutItem.type isEqualToString:@"camera"]) {
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.allowsEditing = YES;
            picker.sourceType = UIImagePickerControllerSourceTypeCamera;
            [self.window.rootViewController presentViewController:picker animated:YES completion:nil];
        }
        
        if ([shortcutItem.type isEqualToString:@"photoLibrary"]) {
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.allowsEditing = YES;
            picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            [self.window.rootViewController presentViewController:picker animated:YES completion:nil];
        }
        
        if ([shortcutItem.type isEqualToString:@"example"]) {
            NSLog(@"example");
        }
    }
    



    二、Peek和Pop

    1、首先在需要进行3DTouch的类中遵守协议:UIViewControllerPreviewingDelegate

    2、注册代理:

    // 3DTouch
    -(void)registerPreview
    {
        // 判断:如果如果支持3DTouch就进行注册代理
        if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
            // sourceView是支持3DTouch的区域,即能感知力度的区域
            [self registerForPreviewingWithDelegate:self sourceView:self.view];
        }
        else {
    //        NSLog(@"该设备不支持3D-Touch");
        }
    }
    
    3、实现代理方法
    // 稍重点击的时候调用 peek
    // previewingContext:预览内容   location:是按压的位置
    - (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
    {
        // 创建预览的控制器或者视图
        SecondViewController *vc = [[SecondViewController alloc] init];
        // 预览内容的区域,(0, 0)为默认区域
        vc.preferredContentSize = CGSizeMake(0, 0);
        // 轻点后在sourceRect范围外的区域变模糊
        previewingContext.sourceRect = self.btn.frame;
    
        return vc;
    }
    
    // 加重按调用
    - (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
    {
        // 在这里执行加重按后的代码
        [self showViewController:viewControllerToCommit sender:self];
    }
    
    4、设置目的控制器(即预览的控制器)下面可以点击的操作(如复制、点赞等):

    // 预览下面的按钮,这里是一个数组,可以设置多个action,会有多个操作。
    - (NSArray<id<UIPreviewActionItem>> *)previewActionItems
    {
        return @[
                 [UIPreviewAction actionWithTitle:@"请点击我" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
                     NSLog(@"你点到我了");
                 }]];
    }
    


    demo地址:https://github.com/sweetday/3DTouch.git

















    展开全文
  • iOS 9 以后使用3D touch()

    2017-01-10 10:16:10
    3D TouchiOS9中使用3D Touch  官方文档 3D touch 地址:...

    3D Touch在iOS9中使用3D Touch

     官方文档 3D touch 地址:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/index.html#//apple_ref/doc/uid/TP40016543-CH1-SW1

    原博客地址请移步:http://git.devzeng.com/blog/ios9-3d-touch.html?utm_source=tuicool&utm_medium=referral

    在iPhone 6s,iPhone 6s Plus,7,7 Plus 中Apple引入了3D Touch技术。3D Touch的触控技术,被苹果称为新一代多点触控技术。其实,就是此前在Apple Watch上采用的Force Touch,屏幕可感应不同的感压力度。

    iOS9提供了四类API(Home Screen Quick ActionUIKit Peek & Pop 、WebView Peek & Pop 和UITouch Force Properties)用于操作3D Touch(Pressure Sensitivity 、 Peek and Pop 和 Quick Actions)。不过无论使用哪一种API,首先需要做的事情是检查3D Touch是否可用。

    检测是否支持3D Touch

    在iOS9中提供如下的接口用于检查设备是否支持3D Touch:

    @property(nonatomic, readonly) UIForceTouchCapability forceTouchCapability;
    

    其中UIForceTouchCapability是一个枚举类型,具体的描述情况如下:

    • UIForceTouchCapability
      • UIForceTouchCapabilityUnknown //3D Touch检测失败
      • UIForceTouchCapabilityUnavailable //3D Touch不可用
      • UIForceTouchCapabilityAvailable //3D Touch可用

    这3个枚举值就是我们来判断设备是否开启3D Touch功能,可以在UIViewController生命周期的viewWillAppear中做如下判断:

    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
        //do something
    }
    

    当然在生命周期内,如果用户有意修改了设备的3D Touch功能,我们还有一个地方来重新检测:

    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
        //do something
    }
    

    Home Screen Quick Action

    在iPhone 6s或者iPhone 6s Plus上面,当用户按压App的Icon图标的时候,会弹出Quick Action,当用户选择其中的Action的时候,App会启动并实现相应的功能。这一过程相当于在PC上面的右键快捷菜单的功能,如下图所示的效果:

    maps_directions_home

    开发环境

    官方文档上指出Xcode7.0以上的模拟器不支持3D Touch,必须使用支持3D Touch的设备(iPhone 6s或者iPhone 6s Plus)进行调试。但是这并不能阻止我们在模拟器上面进行调试,GitHub上面早有大神提供了模拟器调试Quick Action的方法,项目的地址是:https://github.com/DeskConnect/SBShortcutMenuSimulator。下面简单介绍一下安装的步骤:

    ①编译
    git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git
    cd SBShortcutMenuSimulat
    make
    
    ②让SpringBoard支持SBShortcutMenuSimulator

    在开启模拟器的情况下,在SBShortcutMenuSimulator目录下面执行如下两行命令:

    xcrun simctl spawn booted launchctl debug system/com.apple.SpringBoard --environment DYLD_INSERT_LIBRARIES=$PWD/SBShortcutMenuSimulator.dylib
    xcrun simctl spawn booted launchctl stop com.apple.SpringBoard
    
    ③预览效果

    echo 'com.apple.mobilecal' | nc 127.0.0.1 8000,其中com.apple.mobilecal指的是系统自带的日历的Bundle ID,运行的时候替换成你的应用的Bundle ID即可。

    创建方式

    上面的示例图中有四个Action Item,其中每个Action是使用UIApplicationShortcutItem这个对象进行描述的,下面列出每一个UIApplicationShortcutItem中能够包含的信息:

    action_item_desc.png

    创建Quick Action有两种方式:静态和动态

    ①以静态方式创建

    静态创建的方式是在Info.plist文件中进行声明的

    <key>UIApplicationShortcutItems</key>
    <array>
        <dict>
            <key>UIApplicationShortcutItemType</key>
            <string>com.devzeng.homePage</string>
            <key>UIApplicationShortcutItemTitle</key>
            <string>首页</string>
            <key>UIApplicationShortcutItemSubtitle</key>
            <string>这是首页</string>
            <key>UIApplicationShortcutItemIconFile</key>
            <string>icon_home.png</string>
            <key>UIApplicationShortcutItemUserInfo</key>
            <dict>
                <key>scheme</key>
                <string>devzeng://home</string>
            </dict>
        </dict>
        <dict>
            <key>UIApplicationShortcutItemType</key>
            <string>com.devzeng.about</string>
            <key>UIApplicationShortcutItemTitle</key>
            <string>关于我们</string>
            <key>UIApplicationShortcutItemSubtitle</key>
            <string>这是关于我们</string>
            <key>UIApplicationShortcutItemIconFile</key>
            <string>icon_about.png</string>
            <key>UIApplicationShortcutItemUserInfo</key>
            <dict>
                <key>scheme</key>
                <string>devzeng://about</string>
            </dict>
        </dict>
    </array>
    
    ②以动态方式创建

    动态创建是在程序初始化的时候用代码动态添加。UIApplication对象多了一个支持快捷方式的数组(shortcutItems), 如果需要增加快捷方式,可以赋值给shortcutItems属性。

    @property(nonatomic, copy) NSArray <UIApplicationShortcutItem *> *shortcutItems;
    

    示例代码如下:

    //创建ShortcutItem
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"icon_register.png"];//创建快捷item的icon即UIApplicationShortcutItemIconFile
    NSDictionary *info1 = @{@"scheme":@"devzeng://register"};//创建快捷item的userinfo即UIApplicationShortcutItemUserInfo
    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.devzeng.registerPage" localizedTitle:@"注册" localizedSubtitle:@"注册新用户" icon:icon1 userInfo:info1];
    //创建ShortcutItem
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"icon_shop.png"];
    NSDictionary *info2 = @{@"scheme":@"devzeng://shop"};
    UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.devzeng.shopPage" localizedTitle:@"购物车" localizedSubtitle:@"查看购物车" icon:icon2 userInfo:info2];
    //创建ShortcutItem
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"icon_help.png"];
    NSDictionary *info3 = @{@"scheme":@"devzeng://help"};
    UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.devzeng.helpPage" localizedTitle:@"帮助" localizedSubtitle:@"帮助手册" icon:icon3 userInfo:info3];
    //注册ShortcutItem
    [UIApplication sharedApplication].shortcutItems = items;
    

    说明:

    1)系统限制每个App最多能够显示4个Action Item,其中包括静态方式和动态方式进行创建的;

    2)如果静态和动态方式同时使用的时候,给UIApplication的shortcutItems赋值的时候不会覆盖

    响应回调

    当app在后台的时候UIApplication提供了一个回调方法

    - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler NS_AVAILABLE_IOS(9_0);
    

    我们依据这个回调中的shortcutItem的type和userinfo来做出不同的事件处理,而最后的completionHandler在API的说明中我们看到当应用并非在后台,而是直接重新开进程的时候,直接返回No,那么这个时候,我们的回调会放在

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    

    UIApplication又给我们一个从launchOptions中获取这个shortcutItem的key(UIApplicationLaunchOptionsShortcutItemKey)

    UIApplicationShortcutItem *item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
    //根据不同的Action响应不同的事件
    

    在performActionForShortcutItem回调中

    - (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler {
        if (shortcutItem) {
            //根据不同的Action响应不同的事件
        }
        if (completionHandler) {
            completionHandler(YES);
        }
    }
    

    UIKit Peek & Pop

    Peek和Pop手势给了iOS9用户预览和体验内容的全新方法。iPhone6s/iPhone6s Plus可通过用户触摸力度感知需求,并给出更加丰富的操作选项。目前这项功能已经在邮件、照片、日历等应用中启用。

    根据苹果的介绍,Peek手势允许用户通过短时间按压屏幕进行操作,可在邮件、照片等应用弹出全新功能菜单,给出预览内容。如果按压力度加大,则是Pop手势功能,会让被点击内容完全呈现,这些内容可以是文字、图像、网页以及其他各种内容。简单来说,Peek专注于预览,Pop可以全面展现内容。

    peek_2x.png

    1、检测3D Touch是否可用,如果可用就注册
    - (void)check3DTouchAvailable {
        // 如果开启了3D touch,注册
        if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
            [self registerForPreviewingWithDelegate:(id)self sourceView:_label];
        }
    }
    
    2、实现UIViewControllerPreviewingDelegate的Protocol

    ①Peek手势相关处理:

    - (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)context viewControllerForLocation:(CGPoint)point {
        //防止重复加入
        if ([self.presentedViewController isKindOfClass:[PeekDemoViewController class]]){
            return nil;
        }
        else {
            PeekDemoViewController *peekViewController = [[PeekDemoViewController alloc] init];
            return peekViewController;
        }
    }
    

    在PeekDemoViewController中添加previewActionItems:

    - (NSArray<id<UIPreviewActionItem>> *)previewActionItems {
    
        // 生成UIPreviewAction
        UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Action 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
            NSLog(@"Action 1 selected");
        }];
    
        UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Action 2" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
            NSLog(@"Action 2 selected");
        }];
    
        UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Action 3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
            NSLog(@"Action 3 selected");
        }];
    
        UIPreviewAction *tap1 = [UIPreviewAction actionWithTitle:@"tap 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
            NSLog(@"tap 1 selected");
        }];
    
        UIPreviewAction *tap2 = [UIPreviewAction actionWithTitle:@"tap 2" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
            NSLog(@"tap 2 selected");
        }];
    
        UIPreviewAction *tap3 = [UIPreviewAction actionWithTitle:@"tap 3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
            NSLog(@"tap 3 selected");
        }];
    
        //添加到到UIPreviewActionGroup中
        NSArray *actions = @[action1, action2, action3];
        NSArray *taps = @[tap1, tap2, tap3];
        UIPreviewActionGroup *group1 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:actions];
        UIPreviewActionGroup *group2 = [UIPreviewActionGroup actionGroupWithTitle:@"Tap Group" style:UIPreviewActionStyleDefault actions:taps];
        NSArray *group = @[group1,group2];
    
        return group;
    }
    

    peek_quick_actions_2x.png

    ②Pop手势相关处理:

    - (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
        PopDemoViewController *popViewController = [[PopDemoViewController alloc] init];
        [self showViewController:popViewController sender:self];
    }
    

    参考资料

    1.《Adopting 3D Touch on iPhone》

    2.《浅谈3D Touch(1) -- Home screen quick action》

    3.《浅谈3D Touch(2) -- UITouch && Peek && Pop》

    4.《适配3d-touch》

    5.《Add iOS 9’s Quick Actions shortcut support in 15 minutes right now !》

    6.《15分钟搞定iOS9 Quick Actions》

    7.《iOS: 3D Touch, impressions and thoughts》

    8.《3D Touch之我见》

    展开全文
  • ios10前 3D touch没有widget显示,ios10后默认显示widget。 但是问题来了,要是一个app有多个widget,3D touch就不知道要用哪个了。这就需要在工程的plist文件里面加上个UIApplicationShortcutWidget 的key,里面...

    ios10上3D touch多个widget的显示

    在ios10前 3D touch没有widget显示,ios10后默认显示widget。
    但是问题来了,要是一个app有多个widget,3D touch就不知道要用哪个了。

    这就需要在工程的plist文件里面加上个UIApplicationShortcutWidget 的key,里面填你想要显示的widget的BundleIdentifier

    官方文档
    https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW32

    这里写图片描述


    系统会自动改成Home Screen Widget

    如下图
    这里写图片描述

    展开全文
  • 效果图好丑. 测试手机iPhone6s , 也就是使用了新特性 3DTouch. 囧 不知道的以为会有多难.在开始之前UIViewControllerPreviewingDelegate // 签订这个协议- (UITableViewCell *)tableView:(UITableView *)tableView ...

    这里写图片描述
    这里写图片描述
    效果图好丑.
    测试手机iPhone6s , 也就是使用了新特性 3DTouch. 囧 不知道的以为会有多难.

    在开始之前

    UIViewControllerPreviewingDelegate // 签订这个协议
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellId"];
        // 对每个cell指定代理, 大致是这个意思
        [self registerForPreviewingWithDelegate:self sourceView:cell];
        //
        cell.textLabel.text = self.arrayData[indexPath.row];
        return cell;
    }
    #pragma mark - peek的代理方法,轻按即可触发弹出vc
    - (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
        //通过[previewingContext sourceView]拿到对应的cell的数据;
        NSIndexPath *indexPath = [_tableView indexPathForCell:(UITableViewCell* )[previewingContext sourceView]];
        // 用于显示预览的vc
        ListViewController *listVc = [[ListViewController alloc] init];
        // 演示的是传入一个字符串 , 实际可能是你需要的model
        listVc.strText = [self.arrayData objectAtIndex:indexPath.row];
        return listVc;
    }
    #pragma mark -  pop的代理方法,在此处可对将要进入的vc进行处理
    - (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
    {
    }

    在 ListViewController 中我用一个label作为演示的, 您可能还需要添加底部菜单(类似于 收藏 喜欢这样)

    -(NSArray<id<UIPreviewActionItem>> *)previewActionItems
     {
         UIPreviewAction * action1 = [UIPreviewAction actionWithTitle:@"收藏" style:1 handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
                NSLog(@"收藏");
        }];
    
         UIPreviewAction * action2 = [UIPreviewAction actionWithTitle:@"喜欢" style:0 handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
                NSLog(@"喜欢");
    
         }];
         NSArray *items = @[action1,action2];
         return items;
    }
    展开全文
  • 3D-Touch 只在 iOS 9 及以上版本得到支持,之前版本的 iOS 并不支持该功能;3D-Touch 只在 iPhone 6s 及以后型号的 iPhone 或 iPad Pro 上可用,更早的设备并不支持该功能。 2. 添加按钮:a:...

    1. 功能支持

    3D-Touch 只在 iOS 9 及以上版本得到支持,之前版本的 iOS 并不支持该功能;
    3D-Touch 只在 iPhone 6s 及以后型号的 iPhone 或 iPad Pro 上可用,更早的设备并不支持该功能。

    2. 添加按钮:a:静态,b:动态,c:点击事件

    在info中的添加的是静态的,不可改变;想要自由控制可以用代码添加动态的

     

    各参数意义如下:
    
    1. UIApplicationShortcutItemTitle
    按钮标题
    
    2. UIApplicationShortcutItemType
    设置标签 icon 类型,当用户调用相应的 Action 的时候,会将该字符串传递给你 App
    
    3. UIApplicationShortcutItemSubtitle
    按钮副标题,显示在按钮标题下面的小文字
    
    4. UIApplicationShortcutItemIconType
    设置按钮图片为系统图标,更多图标可以参见:https://developer.xamarin.com/api/type/UIKit.UIApplicationShortcutIconType/
    
    5. UIApplicationShortcutItemUserInfo
    该值用来提供 App 的版本信息
    
    6. UIApplicationShortcutItemIconFile 
    指定 App Bundle 中的文件图片或者是在 Asset Catalog 里面的文件名。注意 icon 应是正方形的,单一的颜色。如果你指定了这个值,系统便会忽略掉对 UIApplicationShortcutItemIconType 的设置,因为这两个值是冲突的,而且开发者自己指定的图片优先级比系统图标更高。
    参数

     

     

    静态VS 动态:

    1、优先显示静态添加,总数达到4个不再显示

    2、静态使用系统图标,自定义麻烦;动态的可以轻松自定义

    3、静态的不可变,但是在动态改变后,静态设置是一直存在的,可以设置固定菜单结合使用

    4、动态的可以在任何情况下掉用方法改变,当前显示3D-Touch效果是最后一次改变的

    5、动态中自定义 image (2x:70*70  3x:104*104)⚠️:图标显示只有有色(有色区域全是黑色)和透明

    a、静态添加:

    右键点击工程中的 info.plist 文件选择打开方式为 Source Code:
    
    以 Source Code 方式打开 info.plist
    在其中填写如下代码:
    
    <key>UIApplicationShortcutItems</key>
    <array>
    <dict>
            <key>UIApplicationShortcutItemIconType</key>
            <string>UIApplicationShortcutIconTypeLove</string>
            <key>UIApplicationShortcutItemTitle</key>
            <string>开始上一次挑战</string>
            <key>UIApplicationShortcutItemType</key>
            <string>1</string>
        </dict>
        <dict> 
            <key>UIApplicationShortcutItemIconType</key> 
            <string>UIApplicationShortcutIconTypeShuffle</string> 
            <key>UIApplicationShortcutItemTitle</key> 
            <string>最多可以添加4个,后边的不会再显示</string> 
            <key>UIApplicationShortcutItemType</key> 
          <string>0</string>
       </dict> 
    </array>
    详情?

    b、动态添加:

    在需要添加改变的地方添加如下代码:

     

    CGFloat currentDeviceVersionFloat = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (currentDeviceVersionFloat >= 9.0) {
    // 自定义 image 
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"qq.png"];
    //菜单文字
    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"1" localizedTitle:@"旋转"];
    //绑定信息到指定菜单
    item1.icon = icon1;

     

    // 系统图标
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay];
    UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"亮点"];
    item2.icon = icon2;

    [UIApplication sharedApplication].shortcutItems = @[item1,item2];

    }

     

    c、点击事件

    点击事件的判断,是根据在info\代码中设置的type值;

    //3D Touch
    - (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler{
        if ([shortcutItem.type isEqualToString:@"0"]) {
            NSLog(@"info中");
            
        }else if ([shortcutItem.type isEqualToString:@"1"]) {
           NSLog(@"设置");
            
        }
       
        else if ([shortcutItem.type isEqualToString:@"2"]) {
            NSLog(@"旋转");
            
        } else if ([shortcutItem.type isEqualToString:@"5"]|[shortcutItem.type isEqualToString:@"6"]) {
            NSLog(@"我在记录界面");
            
        }
        else if ([shortcutItem.type isEqualToString:@"7"]|[shortcutItem.type isEqualToString:@"8"]) {
            NSLog(@"我在游戏界面");
            
        }
        
    }
    事件处理

     

     

    成功添加 3D Touch 按钮

    值得一提的是,实际的按钮显示的顺序1 2 3,是根据距离图标的距离由近到远1 2 3 排序的,可以尝试把应用拖动到屏幕上边或者下边使用3D Touch。

     

     

     

    转载于:https://www.cnblogs.com/xujiahui/p/7681352.html

    展开全文
  • 3D touch 首次出现在 iPhone 6s 上,直到现在的 iPhone XS Max (iPhone XR 除外) 都支持 3D touch 功能 3D touch 配合压敏传感器可以接收到来自 Z 轴的两级力度操作,可以根据你按压力度的不同呼出不同的菜单或...
  • iOS 3D Touch浅谈

    2016-10-18 10:05:03
    一、什么是3D Touch3D Touch是iPhone 6s推出的一种可以让你与手机进行互动的全新方式。除了轻点、轻扫、双指开合这些熟悉的 Multi‑Touch 手势之外,3D Touch 还带来 Peek 和 Pop,为 iPhone 的使用体验开拓出全新...
  • iOS 为 App 图标添加 3D Touch 快捷访问菜单,Demo 地址: github.com/EyreFree/EF… 1. 注意事项 3D Touch 只在 iOS 9 及以上版本得到支持,之前版本的 iOS 并不支持该功能; 3D Touch 只在 iPhone 6s 及以后型号...
  • iOS 3D Touch功能

    2016-03-04 09:54:33
    新的触摸体验——iOS9的3D Touch 一、引言 二、在模拟器上学习和测试3D Touch 附.SBShortcutMenuSimulator的安装和使用 三、3D Touch的主要应用 四、3D Touch的三大模块 1、Home Screen Quick Actions 2、...
  • 之前一直在忙着维护项目,偶然的一天闲着玩手机玩到3Dtouch,看着效果挺不错的 于是就尝试着搜索了一下相关的文案,结果除了官网给的全英文api意外国内的基本都 是互相抄袭,我搜了37篇文章,29篇相似度惊人,而且仅...
  • ios 3D Touch功能的实现

    2016-05-31 15:01:51
    ios9中3D Touch功能是一个新的亮点,这个方便快捷的功能实现也比较简单,废话不多说直接上代码, 一.3D Touch功能添加分为两种(1).静态标签 (2).动态标签 (1).静态添加 这个方法是在app的plist文件中添加如下图的...
  • iOS 3D Touch开发介绍

    2016-05-26 16:20:15
    它的功能默认是开启的,但用户也可以在系统设置中把它关掉(Settings > General > Accessibility > 3D Touch), 支持3D Touch的最低系统要求为 iOS 9,开发人员则需要至少使用XCode 7,目前支持3D Touch的设备只有...
  • iOS禁止Touch事件

    2019-01-30 11:23:08
    iOS程序中有时会有需要禁止应用接收Touch的要求(比如动画进行时,防止触摸事件触发新方法)。 一、一般有两种: 1、弄个遮罩层,禁止交互; 2、使用UIApplication中的方法进行相关的交互设置,方法如下: // ...
  • IOS 3D Touch功能分析

    2017-03-04 16:25:42
    IOS9以后,苹果退出了新的3D Touch功能,目前支持3Dtouch的设备只有Iphone6s以及之后的产品,当然,你的手机系统要升级到IOS9以后才能使用,苹果增加3Dtouch功能,就是为了增加APP的快捷入口,方便和简化用户进入APP相应...
  • 3D Touch开发主要有4个方面: - 主界面快捷菜单功能 (Home screen quick action) - 预览图和重击功能( UIKit Peek and Pop) - Web view预览链接的页面(Web view peek and pop) - 检测3D Touch的相对...
  • 代码:   if (self.traitCollection....不能使用判断手机是否为6S或6SP,因为如果用户在设置 -> 通用 -> 3D Touch中将该功能关闭的话,同样forceTouch是不可用的. 而且此功能必须在运行时随时检查.因为用户
  • iOS 3D Touch 简述

    2016-03-04 11:21:47
    3D Touch 简单实现 主要是 正对iPhone 手机 iOS9.0 以上手机的应用的需求
1 2 3 4 5 ... 20
收藏数 9,311
精华内容 3,724
关键字:

3d ios touch 动态