[iOS]iOS9 3DTouch、ShortcutItem、P

作者: 肖浩呗 | 来源:发表于2015-09-10 06:59 被阅读18931次

    3DTouch


    UITouch类里API的变化

    iOS9中添加的属性

    altitudeAngle

    • 当笔平行于平面时,该值为0

    • 当笔垂直于平面时,该值为Pi / 2

    estimatedProperties

    • 当前触摸对象估计的触摸特性

    • 返回值是UITouchPropertyies

    updatedProperties

    • 当前触摸对象已经更新的触摸特性

    • 返回值是UITouchPropertyies

    estimationUpdateIndex

    • 当每个触摸对象的触摸特性发生变化时,该值将会单独增加

    • 返回值是NSNumber

    iOS9中添加的方法

    - PreciseLocationInView:

    • 当前触摸对象的坐标

    - PrecisePreviousLocationInView:

    • 当前触摸对象的前置坐标

    - azimuthAngleInview:

    • 沿着x轴正向的方位角

    • 当与x轴正向方向相同时,该值为0

    • 当view参数为nil时,默认为keyWindow

    - azimuthUnitVectorInView:

    • 当前触摸对象的方向上的单位向量

    • 当view参数为nil时,默认为keyWindow

    UIForceTouchCapability

    UIForceTouchCapabilityUnknown

    • 不能确定是否支持压力感应
      UIForceTouchCapabilityUnavailable
    • 不能支持压力感应
      UIForceTouchCapabilityAvailable
    • 可以支持压力感应

    UITouchType

    UITouchTypeDirect

    • 垂直的触摸类型
      UITouchTypeIndirect
    • 非初值的触摸类型
      UITouchTypeStylus
    • 水平的触摸类型

    UITouchProperties

    UITouchPropertyForce


    ShortcutItem


    静态方式

    • 打开Info.plist文件
    • 在对应UIApplicationShortcutItems关键字下添加item

    动态方式

    修改当前应用程序的某个shortcutItem
      //获取第0个shortcutItem  
      id oldItem = [existingShortcutItems objectAtIndex: 0];  
      //将旧的shortcutItem改变为可修改类型shortcutItem  
      id mutableItem = [oldItem mutableCopy];  
      //修改shortcutItem的显示标题  
      [mutableItem setLocalizedTitle: @“Click Lewis”];
    
    获取当前应用程序的shortcutItems
      //获取当前应用程序对象  
      UIApplication *app = [UIApplication sharedApplication];  
      //获取一个应用程序对象的shortcutItem列表  
      id existingShortcutItems = [app shortcutItems];
    
    重置当前应用程序的shortcutItems
      //根据旧的shortcutItems生成可变shortcutItems数组  
      id updatedShortcutItems = [existingShortcutItems mutableCopy];  
      //修改可变shortcutItems数组中对应index下的元素为新的shortcutItem  
      [updatedShortcutItems replaceObjectAtIndex: 0 withObject: mutableItem];  
      //修改应用程序对象的shortcutItems为新的数组  
      [app setShortcutItems: updatedShortcutItems];
    
    创建一个新的UIApplicationShortcutItem
    • 初始化函数

      • - initWithType:localizedTitle:localizedSubtitle:icon:userInfo:
      • - initWithType:localizedTitle:
    • 属性

      • localizedTitle:NSString

      • - localizedSubtitle:NSString

      • - type:NSString

      • - icon:UIApplicationShortcutIcon

      • - userInfo:NSDictionary

      • 只有只读特性,想要进行修改时,需要通过mutableCopy方法转变为
        NSMutableApplicationShortcutItem

    创建一个新的Item图标
    • 初始化函数

      • + iconWithType:

      • + iconWithTemplateImageName:

      • + iconWithContact:

    当程序启动时

    • 判断launchOptions字典内的UIApplicationLaunchOptionsShortcutItemKey是否为空
    • 当不为空时,application:didFinishLaunchWithOptions方法返回false,否则返回true
    • 在application:performActionForShortcutItem:completionHandler方法内处理点击事件

    Peek and Pop


    注册预览功能的代理对象和源视图

    代理对象需要接受UIViewControllerPreviewingDelegate协议
      @interface RootVC<UIViewControllerPreviewingDelegate>  
      {}  
      @end
    
    代理对象实现协议内的Peek和Pop方法
      @implementation RootVC  
      - (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)context viewControllerForLocation:(CGPoint) point  
      {  
        UIViewController *childVC = [[UIViewController alloc] init];  
        childVC.preferredContentSize = CGSizeMake(0.0f,300f);  
          
        CGRect rect = CGRectMake(10, point.y - 10, self.view.frame.size.width - 20,20);  
        context.sourceRect = rect;  
        return childVC;  
      }  
      - (void)previewContext:(id<UIViewControllerPreviewing>)context commitViewController:(UIViewController*)vc  
      {  
        [self showViewController:vc sender:self];  
      }  
      @end
    
    注册方法声明在UIViewController类内
    [self registerForPreviewingWithDelegate:self sourceView:self.view];
    

    相关文章

      网友评论

      • Snow_L:为什么我的shortcutItems 的个数最多只能设置4个 楼主能帮我解惑一下吗
      • 施主小欣:请问楼主大大~ 3dtouch 写好后 那个系统分享应该怎样去做呢?
      • dedenc:你好 我在使用了你说的这个peek and pop实现跳转页面的时候,在跳到了一个viewcontroller之后,他的顶部的navigationController消失了 我并没有设置隐藏之类的 请问你有没有遇到过
        天空中不变的星:push过去应该可以
      • 仰望星空之Rocky:icon:UIApplicationShortcutIcon 我看你截图icon在左边,,我做的在右边,,需要做什么设置吗?3Q
        charlotte2018:@ZinkLin 我还纳闷了,怎么跟微信的不一样,回答的好。谢谢
        ZinkLin:@wwwang icon 在左边或者右边,这个是跟你的app 放在你手机的里面的位置有关系,你试试把APP移到屏幕左边,icon就跑到左边去了
      • 清眸如画:有什么模拟器可以测试吗
        lunaSun:@约定一生 自带模拟器就可以模拟
        mf168:@约定一生 https://github.com/DeskConnect/SBShortcutMenuSimulator
      • 爱丶不失手:3DTouch----mark
      • 大眼萌璇璇:onLaunchOptionsShortcutItemKey是否为空
        当不为空时,application:didFinishLaunchWithOptions方法返回false,否则返回true。 请问返回false和true的区别是什么
      • 大眼萌璇璇:onLaunchOptionsShortcutItemKey是否为空
        当不为空时,application:didFinishLaunchWithOptions方法返回false,否则返回true。 请问返回false 和 true的区别是什么
      • 45ccff1aca65: 用静态方法在info.plist里面配置 怎么做本地化呢
      • 夜之海澜:楼主,我在plist文件里边设置UIApplicationShortcutItemIconFile 想用自己的图片,但是一直显示不出来,这个对图片有什么特殊要求嘛?比如大小?放置位置之类的?
      • 0x0F:请问您这个有demo可以看吗
        半尺尘:@riseup 要6s或者6s plus才支持3D Touch噢
        1f0f77826518:@半尺尘 怎么没反应
        半尺尘:@Manloff 你好,我参考作者的文章和其他资料,做了一个Demo,链接:https://github.com/banchichen/3DTouch-PeekAndPopGestureDemo.git。如果感觉有用可以给个star~ :smile:
      • 7a9468fd08eb:有个问题,如果我只通过动态方法给应用添加了 shortitems,是不是在没有启动过app之前,shortitemsmenu是启动不起来的?
        半尺尘:@肖浩呗 你好,我发现,微信,支付宝等应用,未打开情况下shortItems也起作用,这是什么原因呢?
        肖浩呗:@CP0000 是的,因为配置代码还没有执行
        c49f19c51208:@CP0000 实测 是这样的

      本文标题:[iOS]iOS9 3DTouch、ShortcutItem、P

      本文链接:https://www.haomeiwen.com/subject/zfdpcttx.html