iOS-3D Touch 特性 & API 详解

鸡年狗年结交之际,六管“妖片”相继现世,决定是平等街妖怪大战。

前言

有人说,中国即是如果发生一庙妖怪复兴?

有关这首文章

鉴于iPhone
6S通告不至同年的辰,很多初特点、新技巧还免广泛,不管是3D Touch的施用或者出,对那个来有关询问之丁并无多。前几乎上偶然接触了3D Touch的有API接口,为了满足好奇心,于是我就网地去了解了之苹果的新技巧。查阅了有关的法定文档,敲了几Demo,并编制了马上篇稿子,作为总。

但是非是说好建国后不准成强大为?

从Force Touch到3D Touch

运用了新版Mac Book或Apple
Watch的情侣应本着Force Touch本条词汇并无陌生,这是苹果对设备触控操作的一模一样码新的技艺,将传统的用户触控点击操作扩展化,加上了如约压操作,设备可依据用户手指在屏幕及之照压力度来开展相应的响应。在新版Mac
Book以及Apple
Watch中,我们好透过行使不同的力度仍压触控板或触控屏来调出更多的决定选项,人机交互性非常高。
3D TouchForce Touch延长出的新一替代技术,它本采取为装配了iOS9上述操作系统的iPhone 6S高达,致力为往iPhone用户提供更为大质量之互相体验,将操作方法扩大及三维层面。

本篇文章分别指向3D Touch的特色和支付API进行教学。

不便说干净是为《捉妖记》的热映、《阴阳师》的盛行、《大鱼海棠》的诱惑眼球、还是要《三生三天下十里桃花》之类诸多奇小说的电影改编,“妖怪”这无异于于建国以后久不丢人的种重新回来民众视线。

特性 — 3D Touch On iPhone

顶了吉利瑞鸡年露出马脚,狗年起来探头探脑的2017年12月至次年3月,一多“妖片”更是携着各路导演、明星以及富宣发资本,气势汹汹地冲向银幕、行走天下。

Home Screen Quick Actions – 主页屏幕快速操作

以大哥大的主页上,假如你用指尖轻按压有应用之图标,图标的潜出现了一个半透明的矩形,这虽说明了当下款使用支撑Home Screen Quick Actions(主页屏幕快速操作)。这时,我们保持手指按,并加大力度,你虽会见意识这以图标的方圆还更换模糊了,一个娇小的挑三拣四项栏菜单以您眼前弹出。

美高梅4688.com 1

夫选项栏菜单每个选项视图最多允许发生个别履文本(主文本、次文本)以及一个图标(可要是而不用)。另外,图标的职务是未必然的,它见面在文件的左或者右边进行布局,具体放置于哪一方面,则因使用图标的档次位置而定,不过这些布局体系还早已拉我们处理好了。
当我们点击某一个选项,应用程序就见面运行起来,并且实施相应的操作,相比于以往用户如先上应用程序才能够再拓展操作,使用Home Screen Quick Actions则益的便宜。

说好之建国后不准成精呢?

Peek and Pop – 预览和查阅详情

自备感受到了网用语深深的欺诈。

Peek – 预览

在风俗的手机用户操作中,当我们于使用里观看有张缩略图、某个网址链接或者某列表Item时,若我们想查看详细的信,比如想看缩略图对应之大图、网址链接对应之网页、Item对应的详情页面,一般会就此指头指向屏幕进行点击操作,从而被使用的页面进行跳转。新特点Peek尽管大大提高了当时型操作的用户体验。

美高梅4688.com 2

Peek演示

上效果图所显示的是对准一个缩略图片展开Peek操作,当我们之所以手指轻压图片时,图片的四周迅速模糊,这说明您所遵循压的地方支持Peek操作。按压力度小增大,预览图就出了,这就是Peek(预览)功能。当我们将手指从屏幕及翘起时,预览图就见面流失,界面也就算过来回来。
有了Peek的操作简化,当我们纪念预览某些详情时,只需要按照压屏幕,手机即可弹来详情页面;移开手指,界面恢复原状,这样尽管令用户不用进入一个初的页面浏览详情,然后再次点击返回按钮回到原先视图了。


六管妖片撞车,给我们看妖天怪地·翻江倒海

自打片名貌似底蕴深厚、故事脑洞十分清奇的《奇门遁甲》,到改编自梦枕貘经典小说、人文底蕴理应十分稳步的《妖猫传》,再至市妖精故事《二代妖精》,再届预告片和主演都奇怪的《妖妖铃》,最后为“胡巴归来·继续打”期望又大卖的《捉妖记2》结尾,这新年轮流的3单月时间可谓是穿过古今,群妖乱舞。

嗯,还渗透了一个并且双叒叕拍西游记之《西游记女儿国》。

《奇门遁甲》上映日期:2017年12月15日 
出演妖怪:三目怪鱼、赤目、九天玄鸟等天妖

《妖猫传》上映日期:2017年12月22日  出演妖怪:妖猫

《二代妖精》上映日期:2017年12月29日  出演妖怪:狐妖白纤楚

《妖妖铃》上映日期:2017年12月29日 
出演妖怪:僵尸、丧尸、吸血男爵、红衣女鬼……

《西游记女儿国》上映日期:2018年2月16日  出演妖怪:猴妖孙悟空

《捉妖记2》上映日期:2018年2月16日  出演妖怪:小妖王胡巴

这么有点粗一看,古代的精、架空的怪、都市之精灵、外星的精灵(!),有古书记载的妖怪、小说写之妖魔、全新设计之妖魔,可以说凡是故事背景和妖怪设定都蛮加上了,在这么的很舞台上,各类妖怪应该力所能及演绎出一个个奇特瑰丽、动人心魄的故事。

用作对怪文化来趣味之自己,这时本应该兴高采烈,准备好票票,奔赴电影院才对,然而在自我翻译了六管辖电影简介及主后,我之心绪就是假设豆类某人所形容“确实有种不祥的预感”……

所以刚刚经话来讲,妖怪文化渐掀起了本金同商海之珍视,中国商在试图把传统文化融入商业,然而最多创作,在呈现所谓的“文化要素”方面做得实际不顺畅。

用非正经话简单来讲,这都撞得神马鬼东西啊我摔!

优秀的神仙妖魔的完美故事,被一个个未指谱的导演啊、编剧啊拍得天雷滚滚、支离玻碎,简直可谓是鬼影幢幢了。

Peek quick actions – 预览中的神速操作

上已经说交,当我们的手指按需要预览的屏幕的区域,预览的视图就会见起。现在,继续保障手指的仍压状态,然后再度为上方滑动,就会见当预览视图的江湖滑发生一个选项栏菜单。

美高梅4688.com 3

当菜单完全亮出后,你可下按压以屏幕及之指尖,然后点击相应的选料项来实行操作,就像上面效果图一律,可以复制、分享、点赞、删除等等。


日本精文化vs中国“妖怪文化”

华来妖怪,但是没有怪文化。如果硬而指向这六管妖怪电影做一个总评,我大概只能这么讲。

最近连连看了累累介绍妖怪文化的文章,然而其研究及介绍的靶子,不约而同地还对日本斯海上小国。

每当网易手游“阴阳师”大肆风靡之后,有人在知乎上问:“关于最近异常生气之阴阳师,如果是神州文化背景,能发今天那么火也?”很多答涉及《山海经》,但是诚说于《山海经》,有小年轻人完整地圈罢,又生出稍许人口能够如讲茨木、莹草、座敷一样信手拈来几个山海妖怪讲上同讲?更不用提中国古籍中其他写到妖怪的《搜神记》、《述异记》、《太平广记》、《阅微草堂笔记》等等了。

比来拘禁日本,妖怪在日本是兼备妖怪文化的,它不仅仅留存叫长的民间传说、古代典籍中,还在近代日本学、文学、艺术发展进程中,不断为提及、传承与传播。在这些传承传播人中,较为出名的,就发生被叫做“妖怪博士”的漫画家水木茂,他作了为妖怪为主题的连载漫画《鬼太郎》,编撰了选定764种怪、112种神明的《妖怪大全》,他的热土鸟取县,被包推广为闻名遐迩的“妖怪之都”。

《鬼太郎》

日本精已经成为了千篇一律派叫做“妖怪学”的专门学科,不仅仅被日本乡的关切、研究暨友爱,也当日本文化输出的首要组成部分,吸引了连中国小伙在内的森外国人的着迷。

建国以后不准成强大,终归是平句笑谈。建国之后,真正断档的,其实还是神州风俗文化。

说掉轻松的话题,马上妖片就要聚众打了,我一边吐槽一边还会当正影片上映观看,你们吧?

独愿意生天可以视确实优秀的神州精故事。

Pop – 查看详情

以能出现Peek预览视图的手指按压力度基础及,用户更如把劲加大点力度,就能上相关详情页面,这个就是是Pop。事实上,Pop所进入的详情页面和用户用指尖轻点后所过反下的页面是同样的,所以,用户一旦想一直进详情页面,不需预览,可以直接轻点屏幕指定区域即可;而以预览中,用户想询问得重新多,可以另行加大以压力度上详情页面。

3D Touch 还能开些什么?

3D Touch克成功的效应很多,你可利用它来制造一个绘画画板,根据手指在屏幕上的下压力大小来拟画笔的粗细,你吗可以举行同样款好之手游,通过手指的按照压力度来报告不同的戏操作……
总之,3D Touch颇的兵不血刃,潜力无限。

开发 — 3D Touch API

脚,我会通过苹果提供的3D TouchAPI就之前所提及到之一一3D Touch特性开展开发实现之解析。所有的互相和视图布局我还是用纯代码去落实。

认清设备是否支持3D Touch

咱以呢利用添加3D Touch作用时,有必不可少举行装备是否支持或被3D Touch的论断,考虑到用户采取的手机型号比iPhone 6s不如,或者用户自己曾经手动关闭了3D Touch成效,所以在编排代码的时候,需要取得或监听时配备对让3D Touch的可用性状态,以便在后做出判断。

俺们沾当前设备对被3D Touch的可用性状态,可以下协议UITraitEnvironment

UITraitEnvironment的结构

UITraitEnvironment惨遭蕴含一个属性与一个方式:

  • var traitCollection: UITraitCollection
  • func traitCollectionDidChange(previousTraitCollection:
    UITraitCollection?)

不管是性还是艺术,其目的都是给我们能够拿走到当下之配备特征环境聚,只不过使用方式来赢得比较动态,可以天天监听变化。

得到之条件聚为UITraitCollection类,这个近乎里包含属性forceTouchCapability,是一个UIForceTouchCapability枚举类型,有三独case,分别是Unknown(未知的)、Unavailable(不可用之)、Available(可用的),根据对应的forceTouchCapability价,我们就算能明白当前装备对3D Touch的可用性状态。


怎使用UITraitEnvironment

实际上,很多咱常常因此底类都已经落实了UITraitEnvironment协议,比如说UIViewUIViewController等等,我们得以直接由她们之里边被赢得traitCollection特性然后进行判断:

if self.traitCollection.forceTouchCapability == .Available {
    //  TODO:  加入实现3D Touch的代码
}

若是我们怀念形成实时监听状态的变动,比如软件以运转的时刻用户突然关闭了3D Touch,我们好团结失去落实UITraitEnvironment情商,实现中的监听方法,在此处自己就不演示代码了。

Home Screen Quick Actions

贯彻Home Screen Quick Actions选项栏菜单

实现Home Screen Quick Actions来零星种植艺术,分别是static(静态)实现与dynamic(动态)实现,它们的兑现主要还是赖UIApplicationShortcutItem这看似来展开。

  • Static 静态实现
    可以硬性地规定好只要显现出的精选项信息,这些设定好的选择项在晚是无可知还修改的。进行静态实现,我们用修改的凡Info.plist文本。下面我便编写Info.plist文件来开展静态实现:

    美高梅4688.com 4

    如图所示,我于Info.plist文件被补充加了一个key为UIApplicationShortcutItems的一再组,里面来少只字典类Item,每个字典类Item都代表了一个UIApplicationShortcutItem,它们有着5单特性:

    • UIApplicationShortcutItemIconType (String)
      选项之图标类型,可选择性设置。使用static静态实现是无法使自己定义之图标的,不过系统为一度提供好一些默认的图标,我们好安装图标的种来利用指定的系默认图标。那究竟发生多少种图标类型也?这个自在后面说~

    • UIApplicationShortcutItemTitle (String)
      选项的主标题,必要装项。相对于软题,主标题文字较充分且颜色较生,位于浅题的头。

    • UIApplicationShortcutItemSubtitle (String)
      选项的坏题,可选择性设置。主要由及选之扶提示图。

    • UIApplicationShortcutItemType (String)
      选项之型,必要装项。利用她,我们尽管得以您点击选择执行handle语句时辨认具体是啦一个摘被入选了,从而为程序进行对应的操作。关于选择选择后的反映处理,我在后面也会详细去说。

    • UIApplicationShortcutItemUserInfo (Dictionary)
      附加信,可选择性设置。你得于其间添加某些附加信,在履handle语词的下只是领出来,具体看君的操作逻辑是哪实现的了。

      而今本身管用跑起后,回到手机的主页面,并努力按压此应用的图标,Home Screen Quick Actions的选取项栏菜单就呈现在我们的先头:

      美高梅4688.com 5


  • Dynamic 动态实现
    较为灵活,我们经过代码去构建每个选项,所以,在程序运行的进程中,选项之音讯可动态地失去改变,不过,动态实现比较静态实现的话相对复杂了点。

    enum ShortcutItemType: String {
        case Home
        case Share
    }
    
    func setupShortcutItemsWithApplication(application: UIApplication) {
        let playItem = UIApplicationShortcutItem(type: ShortcutItemType.Home.rawValue, localizedTitle: "主页", localizedSubtitle: "点击进入应用主页", icon: UIApplicationShortcutIcon(templateImageName: "icon_home"), userInfo: nil)
        let shareItem = UIApplicationShortcutItem(type: ShortcutItemType.Share.rawValue, localizedTitle: "分享", localizedSubtitle: "点击向朋友分享", icon: UIApplicationShortcutIcon(type: .Share), userInfo: nil)
        application.shortcutItems = [playItem, shareItem]
    }
    

    要代码所示,应用之单例application对象中负有shortcutItems特性,这是一个数组对象,我们得当里面长UIApplicationShortcutItem实例或可换UIMutableApplicationShortcutItem实例,从而实现菜单中的每个选项。
    此值得注意的是,要当shortcutItem达到配备icon并无是为此到简的UIImage仿佛,而是使用专门的UIApplicationShortcutIcon,它有有限栽结构方式,一种植是择一个类型,然后以与品种相对应的体系所提供的图标,究竟生微微种档次也?我下来列举一下:

    UIApplicationShortcutIconType 枚举:
    
    iOS 9.0 及以上系统所支持:
    case Compose
    case Play
    case Pause
    case Add
    case Location
    case Search
    case Share
    
    iOS 9.1 及以上系统所支持:
    case Prohibit
    case Contact
    case Home
    case MarkLocation
    case Favorite
    case Love
    case Cloud
    case Invitation
    case Confirmation
    case Mail
    case Message
    case Date
    case Time
    case CapturePhoto
    case CaptureVideo
    case Task
    case TaskCompleted
    case Alarm
    case Bookmark
    case Shuffle
    case Audio
    case Update
    

    结构的别样一样种植艺术是填写入一失误字符串,其实就是图的讳,对于这张图,苹果做出了以下的渴求:

    1. 及时张图纸必须放在你的应用程序包(app bundle)中。
    2. 图形要呢正方形,颜色以单色,大小为35×35
      points(点)。系统为保障UI的统一性,会用公提供的当下张图进行颜色渲染,最终图片的共同体颜色会变为灰黑色,所以这里建议图片采取单色,即只有发相同种植颜色。

    现在我们当AppDelegate中的application(_:, didFinishLaunchingWithOptions:)术中实践setupShortcutItemsWithApplication(_:),把application作为参数传入其中。
    这里提供有之参照代码:

    if let shortcutItems = application.shortcutItems where shortcutItems.isEmpty {
            setupShortcutItemsWithApplication(application)
        }
    

    或者有人以此地见面深感奇怪,为什么我以实行setupShortcutItemsWithApplication(_:)方法前要先行判断application中的shortcutItems数组属性是否也空容器(里面没有目标),原因是当我们首先不成被这利用之时节,系统会将我们运用所安排的具有shortcutItem展开记录,在我们下同样次打开应用时,我们不用还失去安排一全勤,也就是说,application中的shortcutItems特性在行使第一糟打开的时段是拖欠的,但是当我们进行相应的布后,在产一样不好的采取被时,shortcutItems即便见面默认为网所赋值,我们也无必要每次打开应用都去安排它。

    现在,运行程序,我们来测试一下:

![](https://upload-images.jianshu.io/upload_images/1484579-8b734a628b7c7bc2.png)

在程序运行的过程中,我们可以任意改变`shortcutItems`:

    UIApplication.sharedApplication().shortcutItems = dynamicShortcuts
  • static与dynamic混用共同实现Home Screen Quick Actions
    时,选项栏菜单受到相继选项的依次是按先静态后动态来排的。此外,我们还要小心避免选择类型的扑。

监听Home Screen Quick Actions选项的挑并开展处理

监听Home Screen Quick Actions摘的点击选择,我们而当AppDelegate中落实方式application(_:, performActionForShortcutItem:, completionHandler:),判断用户挑选的是啦一个精选,然后进行相应的操作:

    func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
        switch shortcutItem.type {
        case ShortcutItemType.Home.rawValue:
            print("选择了主页选项")
        case ShortcutItemType.Share.rawValue:
            print("选择了分享选项")
        default:
            print("选择了其他选项")
        }
        completionHandler(true)
    }

于措施的尾声记得调用completionHandler闭包,把是否处理完成的布尔值传上,如成功拍卖完,传true,失败,则传false


注意:有关艺术application(_:, performActionForShortcutItem:, completionHandler:),苹果官方文档给闹了使的连带注意事项:

斯方法会在您选了某Home Screen Quick Actions选料时调用,但是前提条件是AppDelegate中的application(_:,willFinishLaunchingWithOptions:)方法和application(_:didFinishLaunchingWithOptions)办法都要回来true真值。苹果建议者方法是以应用都起步了、在后台工作的时光才去监听Home Screen Quick Actions摘的挑,若我们以应用程序还无启动之下以Home Screen Quick Actions选料某个选项,我们就非应该下此艺术来进行监听,应当以application(_:,willFinishLaunchingWithOptions:)方法要application(_:didFinishLaunchingWithOptions)办法里进行操作,最后回到false,使得AppDelegate不见面更错过调用application(_:, performActionForShortcutItem:, completionHandler:)此点子。


那么,当Home Screen Quick Actions摘在应用还非启动时于捎了,我们当什么在AppDelegate中的application(_:,willFinishLaunchingWithOptions:)方法或application(_:didFinishLaunchingWithOptions)计里监听Home Screen Quick Actions挑选的选项和做出相应的操作也?这里我们得起即有限独办法的launchOptions参数中得到到相应的shortcutItem

let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem

下我不怕还写application(_:didFinishLaunchingWithOptions)来演示一下:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        //  TODO: 应用的初始化代码,包括UIWindow以及UIViewController等等的配置...

        var performActionForShortcutItemWhenAppLaunch = false
        //  判断应用的启动是否是因为用户选择了Home Screen Quick Actions选项
        if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
            performActionForShortcutItemWhenAppLaunch = true
            print("选择了\(shortcutItem.type)类的选项")
            //  TODO: 相应的Handle操作
        }

        return !performActionForShortcutItemWhenAppLaunch
    }

若果上方代码所示,我以面前就是定义了坐布尔型变量performActionForShortcutItemWhenAppLaunch,默认值为false,然后重新于launchOptions中取出shortcutItem,如果shortcutItem呢空,则说明下之启用是出于用户点击了使的图标,而未是透过Home Screen Quick Actions;如果shortcutItem未为空,则印证用户是为此了点击shortcutItem相应的抉择项来启动以之,这时候我用true值赋值给了performActionForShortcutItemWhenAppLaunch。在点子的尾声,我通过返回performActionForShortcutItemWhenAppLaunch的布尔相反值,来给动用避免调用application(_:, performActionForShortcutItem:, completionHandler:)方法。

Peek And Pop

Peek And PopHome Screen Quick Actions来说更加复杂,下面我就是PeekPeek quick actionsPop的落实进行解析。

Peek & Pop

实现PeekPop首先我们要关注协议UIViewControllerPreviewingDelegate,它有个别独需要我们错过落实之办法:

  • previewingContext(_:, viewControllerForLocation:) ->
    UIViewController

    Peek纵使用户用力按压屏幕有地方经常,周围变得模糊,然后就按压的力度加强,最后见面出一个预览视图弹出。举个例子,屏幕及闹一个TableView,当我们手指按压其中有Cell时,Cell的四周就会转换得模糊,然后关于这个Cell的预览视图就应运而生了。这个点子就是是用于配置是过程中之相干逻辑,并回最终的预览视图所属之视图控制器。在斯措施吃,我们需要配备部分物:

    1. previewingContext参数中之sourceRect。这是一个CGSize色,我们若将手指所按压的视图控件的frame赋值给她,从而为系统标准将视图控件的四周模糊掉;如何收获给仍压的视图控件呢?方法的viewControllerForLocation参数就是当用户用力按压时指的以压点,我们得以运用这本压点来找到包含此点的视图控件。
    2. 详情视图控制器的创导、预览尺寸设置和返回。在这个法里,我们得实例化我们设预览时表现出来的详情视图控制器,并且利用preferredContentSize装它的预览大小,这是一个CGSize品类,当我们将长宽都安为0.0的上,预览视图大小就会见下系统默认的尺寸值。
  • previewingContext(_:, commitViewController:)

    Pop操作就是当这个美高梅4688.com措施里实施,在面前早已说及,Pop实则就算是咱传统情况下点击控件然后采用跳出详情视图控制器这无异于历程,所以,在这里我们需要举行的就是将详情视图控制器展现出。方法中的commitViewController参数就是咱在前方法中回到的详情视图控制器,我们当此方法吃以该”Show”出来即可。

下面就是参考的代码:

//  MARK: - UIViewControllerPreviewingDelegate
extension ViewController: UIViewControllerPreviewingDelegate {
    func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        guard let indexPath = self.tableView.indexPathForRowAtPoint(location) else { return nil }
        let selectedCellFrame = tableView.cellForRowAtIndexPath(indexPath)!.frame

        let detailViewController = DetailViewController()
        detailViewController.mainTitle = self.tableViewData[indexPath.row]
        detailViewController.preferredContentSize = CGSize(width: 0.0, height: 350)

        previewingContext.sourceRect = selectedCellFrame

        return detailViewController
    }

    func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
        self.showViewController(viewControllerToCommit, sender: self)
    }
}

当我们兑现了UIViewControllerPreviewingDelegate协商后,我们便足以呢视图控制器注册Peek预览了,不过,在登记的时段势必要优先判断好设施的3D Touch是不是可用:

//  MARK: - Setup 3D Touch
        if self.traitCollection.forceTouchCapability == .Available {
            self.registerForPreviewingWithDelegate(self, sourceView: self.tableView)
        } else {
            print("3D Touch 不可用!")
        }

此间我们使用UIViewController吃之方registerForPreviewingWithDelegate(_:, sourceView:)来进行Peek登记,方法第一只传入的参数就是促成了UIViewControllerPreviewingDelegate的实例,第二个参数就是手指按的监听视图。

Peek quick actions

Peek的短平快操作是当详情视图控制器中落实之,我们惟有待另行写这个视图控制器的previewActionItems() -> [UIPreviewActionItem]方法,返回一个数组即可。
UIPreviewActionItem否一个商谈,一般我们得创造的是UIPreviewAction或者UIPreviewActionGroup实例。

  • UIPreviewAction虽代表一个摘取,它的构造方法为init(title: String, style: UIPreviewActionStyle, handler: (UIPreviewAction, UIViewController) -> Void),设置的凡择之题目、类型及选项选择后所欲处理的操作。这里的类型UIPreviewActionStyle有三种,分别是默认类型、已选择列(旁边有一个唤起)、取消型(标题颜色也红)。
  • UIPreviewActionGroup是一个UIPreviewAction的分组,它的构造方法为init(title: String, style: UIPreviewActionStyle, actions: [UIPreviewAction]),传入的参数为标题以及做这小组的UIPreviewAction成员数组。它的来意是当我们点击是小组选项时,它就是见面拿自己之分子选项们开展并呈现出。

此地提供参考代码:

    private lazy var previewActions: [UIPreviewActionItem] = {
        let action1 = UIPreviewAction(title: "分享", style: .Default, handler: { action, viewController in
            print("Peek quick actions- 分享")
        })
        let action2 = UIPreviewAction(title: "搜索", style: .Default, handler: { action, viewController in
            print("Peek quick actions- 搜索")
        })
        let action3 = UIPreviewActionGroup(title: "更多", style: .Default, actions: [action1, action2])
        return [action1, action2, action3]
    }()

//  MARK: - Setup PreviewActionItems
    override func previewActionItems() -> [UIPreviewActionItem] {
        return self.previewActions
    }

应用运行的功力图如下:

美高梅4688.com 6

3D Touch的其他API

苹果为3D Touch提供了Force Properties(按压强度属性),我们可在UITouch好像吃找到属性forcemaximumPossibleForce,分别代表瞬时本压力度和设备最充分可能高达的随压力度,我们可以动用就半独特性完成很多妙不可言之互,这将看大家的想象力了,在此间我就算举一个略的小例子:

自己修了一个UIView的子类,它的深浅由咱们手指按它的力度去决定,这是它的其中代码:

class ResizeableView: UIView {
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        var multiple: CGFloat = 0.0
        if let force = touches.first?.force, let maximumPossibleForce = touches.first?.maximumPossibleForce {
            multiple = force / maximumPossibleForce
        }
        self.transform = CGAffineTransformMakeScale(1 + multiple, 1 + multiple)
    }
}

而今己以一个视图控制器中创造它的一个实例,并加加至控制器的视图中,然后凭设置一个frame给它:

class TouchViewController: UIViewController {

    private let mViewSizeValue: CGFloat = 70.0

    private lazy var mView: ResizeableView = {
        let view = ResizeableView()
        view.backgroundColor = UIColor.redColor()
        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(self.mView)
        self.mView.frame = CGRectMake(100, 200, mViewSizeValue, mViewSizeValue)
    }

}

遂,一个利用简易的采取forcemaximumPossibleForce特性的小例子就举行下了。我们运行一下看效果:

美高梅4688.com 7

总结

即时首稿子于大家介绍了3D Touch的风味,并详细讲解了有关于3D Touch支付API的行使。相关代码我曾发布暨村办的GitHub上:Tan3DTouch。
感大家之读书,在此间为祝大家夏日喜欢!

参考资料

苹果官方文档:
Adopting 3D Touch on
iPhone
iOS Human Interface Guidelines: 3D
Touch

苹果官方参考项目:
ApplicationShortcuts: Using
UIApplicationShortcutItem
ViewControllerPreviews: Using the UIViewController previewing
APIs

发表评论

电子邮件地址不会被公开。 必填项已用*标注