iOS 3D touch的基本使用

在我们的app中使用3D Touch功能,主要分为以下三个模块:

  1. Home Screen Quick Actions
    通过主屏幕的应用Icon,我们可以用3D Touch呼出一个菜单,进行快速定位应用功能模块相关功能的开发。如上面的日历。
  2. peek and pop
    这个功能是一套全新的用户交互机制,在使用3D Touch时,ViewController中会有如下三个交互阶段:
    (1)提示用户这里有3D Touch的交互,会使交互控件周围模糊
    (2)继续深按,会出现预览视图
    (3)通过视图上的交互控件进行进一步交互
    这个模块的设计可以在网址连接上进行网页的预览交互。
  3. Force Properties
    iOS9为我们提供了一个新的交互参数:力度。我们可以检测某一交互的力度值,来做相应的交互处理。例如,我们可以通过力度来控制快进的快慢,音量增加的快慢等。

实际的使用方法

Home Screen Quick Actions

有2种添加方式

  1. 静态添加
    在info.plist里添加UIApplicationShortcutItems
<array>
    <dict>
        <key>UIApplicationShortcutItemType</key>
        <string>1</string>
        <key>UIApplicationShortcutItemIconType</key>
        <string>1</string>
        <key>UIApplicationShortcutItemTitle</key>
        <string>title</string>
        <key>UIApplicationShortcutItemSubtitle</key>
        <string>subTitle</string>
        <key>UIApplicationShortcutItemIconFile</key>
        <string></string>
        <key>UIApplicationShortcutItemUserInfo</key>
        <string></string>
    </dict>
</array>
</plist>

首先是UIApplicationShortcutItems,他是一个数组类型,数组中的每一个元素表示一个入口标签。
然后是Item0,这是数组中的一个元素,字典类型。在这个字典中配置各个标签的相关属性。
UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串 必有项 我们可以监听该项的值来判断用户是从哪一个标签进入App的,该字段的值可以为空。
UIApplicationShortcutItemTitle 这个键值设置标签的标题 必有项 我们可以监听该项的值来判断用户是从哪一个标签进入App的
UIApplicationShortcutItemSubtitle 设置标签的副标题 可选项
UIApplicationShortcutItemIconType 设置标签的图标样式,系统提供了29中样式的图标,但大部分只能在9.1的系统上使用,只有少数可以在9.0的系统中使用,这一部分会在后边详细介绍 可选项
UIApplicationShortcutItemIconFile 设置自定义标签图片文件的路径 可选项
UIApplicationShortcutItemUserInfo 设置用户信息,是一个字典类型,可以用来传值 可选项
2.动态添加

 UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
    UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"chuan" localizedTitle:@"title" localizedSubtitle:@"" icon:icon1 userInfo:nil];
    [UIApplication sharedApplication].shortcutItems = @[item1];
///3dtouch回调
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
    if ([shortcutItem.type isEqualToString:@"chuan"]) {
        //执行操作
    }
}

peek and pop

首先需要继承代理<UIViewControllerPreviewingDelegate>
在viewwillappear里判断是否打开了3d touch功能

 if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable){
        self.isOpen3DTouch = YES;
    }

在支持3D Touch的设备上,用户可以在程序运行期间通过设置 -> 通用 -> 辅助功能 -> 3D Touch来关闭3D Touch功能,所以我们有必要通过重写-traitCollectionDidChange:方法随时处理

-(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection{
    
    if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable){
        self.isOpen3DTouch = YES;
    }
}

我这里是对cell进行的按压处理
if (self.isOpen3DTouch) { [self registerForPreviewingWithDelegate:self sourceView:cell]; }

#pragma mark - UIViewControllerPreviewingDelegate
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
    
    //通过预览上下文获取到当前按压的视图,判断indexPath值
    NSIndexPath *indexPath = [_boaterTable indexPathForCell:(UITableViewCell *)previewingContext.sourceView];
    
    //通过上下文可以调整不被虚化的范围
    previewingContext.sourceRect = CGRectMake(0, 0, kScreenWidth, 102);
    ///这里是需要预览的视图
    GWJobInfoViewController *ivc =[[GWJobInfoViewController alloc] init];
    ivc.title = @"求职信息";
    ivc.model = self.dataArr[indexPath.section];
    ivc.isSearch = YES;
    ivc.touch = ^(NSString *msg){
        [self.view makeToast:msg];
    };
    //可以调整预览视图的大小
    //    ivc.preferredContentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, 200);
    return ivc;
}
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{
    [self showViewController:viewControllerToCommit sender:self];
}

在预览是视图里实现-(NSArray<id<UIPreviewActionItem>> *)previewActionItems此方法,可以实现上拉实现功能

-(NSArray<id<UIPreviewActionItem>> *)previewActionItems
{

    // 生成UIPreviewAction 自定义action
    UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"邀请加入" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
       
    }];
    //可以有多个功能 以数组形式返回
    NSArray *actions = @[action1];
    return actions;
}

Force Properties

这个功能目前使用的比较少,这里就展示个小demo,按压改变背景色。

-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//    UITouch *touch = touches.anyObject;
//    
//    /**
//     *  maximumPossibleForce 最大 6.67
//     */
//    NSLog(@"%.2f,%2f",touch.force,touch.maximumPossibleForce); //iOS 9.0之后
//    
//    CGFloat radio = touch.force / touch.maximumPossibleForce;
//    
//    self.view.backgroundColor = [UIColor colorWithRed:radio green:radio blue:radio alpha:1];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容

  • 1.简单的介绍一下3D Touch 3D Touch的触控技术,被苹果称为新一代多点触控技术。其实,就是此前在Ap...
    Camille_chen阅读 11,983评论 19 33
  • 专著:http://www.jianshu.com/p/3443a3b27b2d 1.简单的介绍一下3D Touc...
    violafa阅读 962评论 1 0
  • 3D Touch简介 2015年,苹果发布了iOS9以及iphone6s/iphone6s Plus,其中最具有创...
    爱恨的潮汐阅读 382评论 0 2
  • 我是一名大四的985高校的学生,ok,so what呢? 一周有几天? 这两天周末我在干嘛?忙着补课挣钱。一周有七...
    落11阅读 405评论 0 0
  • 素净 典雅 宁谧 自然。懂得欣赏中式装修的人,无论社会是多么的浮躁,她一定能给自己的内心寻找一份宁静安详。
    纹物阅读 256评论 0 0