3DTouch介绍(一)
*关于3D Touch,目前能用的就是三处,
1、Home Screen Quick Actions,
就是 应用图标压力感应,弹出的菜单,这个是简单的应用场景,下面稍作介绍;
2、UIKit peek and pop & Web view peek and pop,
指的是在App内部,压力感应的预览功能,这两个我归为一类,是因为大同小异,都是预览,只是UIKit预览,要我们自定义一个预览VC,而Web view预览,使用SFSafariViewController,只需要打开webView的allowsLinkPreview属性
3、Force Properties,
结合UITouch的自定义压力感应需求的属性,这个打算有空先写个demo,然后在之后的博客中写写。。。这里不提了
下面进入正题:
1、Home Screen Quick Actions
1、静态添加入口标签
在plist文件中添加如图字段
这个大家自己YY吧
2、动态添加入口标签
我们在工程中根视图的viewDidLoad方法中添加如下代码:
// 创建标签的ICON图标。//如果系统图标不满足需求,可以使用+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;添加自定义图片作为标签,需要注意的是:图片必须预先添加进bundle。
let addIcon = UIApplicationShortcutIcon(type: UIApplicationShortcutIconType.Add)let alarmIcon = UIApplicationShortcutIcon(type: UIApplicationShortcutIconType.Alarm)let cloudIcon = UIApplicationShortcutIcon(type: UIApplicationShortcutIconType.Cloud)let bookMIcon = UIApplicationShortcutIcon(type: UIApplicationShortcutIconType.Bookmark)
// 创建一个标签,并配置相关属性。
let addItem = UIApplicationShortcutItem
(type: "a", localizedTitle: "添加", localizedSubtitle: "", icon: addIcon, userInfo: nil)let alarmItem = UIApplicationShortcutItem(type: "b", localizedTitle: "闹钟", localizedSubtitle: "", icon: alarmIcon, userInfo: nil)
(type: "c", localizedTitle: "cloud", localizedSubtitle: "", icon: cloudIcon, userInfo: nil)let booMItem = UIApplicationShortcutItem(type: "d", localizedTitle: "书签", localizedSubtitle: "", icon: bookMIcon, userInfo: nil)
// 将标签添加进Application的shortcutItems中。
UIApplication.sharedApplication().shortcutItems = [addItem, alarmItem, cloudItem, booMItem];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
效果图:
我们知道,这个功能的作用就是用来快速启动App中某一个特定功能,EX: 扫一扫,那么如何判断点击类型来确定App入口呢?
iOS9在AppDelegated中提供了一个新方法:
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {// performActionForShortcutItem作为入口标记
}
- 1
- 2
- 3
如果App是从快速入口启动的,则会执行这个方法。该方法的shortcutItem参数携带了从快速入口进入app时的标签参数。
参数详情:
字段名 | 功能 | 备注 |
---|---|---|
UIApplicationShortcutIemType | 设置快捷item的类型 | 可以根据此type判断不同的item,从而能判定入口 |
UIApplicationShortcutItemUserInfo | 设置用户信息,是一个字典类型,可以用来传值 | 传值到对应的入口处 |
UIApplicationShortcutIcon | 菜单图标 | - |
UIApplicationShortcutItem | 菜单类 | - |
2、Peek & Pop
这个是我非常喜欢的功能,结合其他技术,我们可以实现很diao的交互体验。
先上一个效果图吧
上滑~
下面以我的demo(使用SFSafariViewController预览当前链接)说一下从0开始怎么添加Peek & Pop到工程中:
- 在一个已存在的控制器ViewController中,遵循 UIViewControllerPreviewingDelegate、SFSafariViewControllerDelegate,并实现代理方法
// 我习惯写在了extension中
extension ViewController: UIViewControllerPreviewingDelegate, SFSafariViewControllerDelegate{/**UIViewControllerPreviewingDelegate peek & pop*/func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {// location:手指压力的位置,是一个很有用参数,比如设定压力响应有效范围、tableView中辨别cell// SFSafariViewController展示url内容的预览VC// SFViewController是我继承SFSafariViewController写的,目的是为了扩展Peek & Pop的UIPreviewAction功能(预览状态,上移VC,下方弹出类似ActionSheet框)let pre = SFViewController(URL: NSURL(string:constellEN == "" ? "http://www.xzw.com/astro/" : "http://www.xzw.com/astro/".stringByAppendingFormat(constellEN))!,entersReaderIfAvailable: true)pre.constellEN = "http://www.xzw.com/astro/".stringByAppendingFormat(constellEN)/* // 当然,根据不同需求,我们可以自定义预览VC,不局限于SFSafariViewControllerlet mains = UIStoryboard(name: "Main", bundle: nil)let pre = mains.instantiateViewControllerWithIdentifier("preVC")*/// 预览VC的大小pre.preferredContentSize = CGSizeMake(0, 670)// 设置peek后的非模糊部分view的framelet rect = CGRectMake(0, button.frame.origin.y, self.view.frame.size.width - 20, 50)previewingContext.sourceRect = rect// 固定3D Touch的有效感应范围return CGRectContainsPoint(button.frame, location) ? pre : nil}func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {self.showViewController(viewControllerToCommit, sender: self)}/**1. SFSafariViewControllerDelegate 点击'Done' 关闭SFSafariViewController*/func safariViewControllerDidFinish(controller: SFSafariViewController) {// 关闭SFViewControllercontroller .dismissViewControllerAnimated(true) { () -> Void in }}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 新建SFViewController
class SFViewController: SFSafariViewController {var constellEN : String? = ""override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}
// Preview action items.// 计算属性lazy var previewActions: [UIPreviewActionItem] = {// 创建UIPreViewAction的函数func previewActionForTitle(title: String, style: UIPreviewActionStyle = .Default) -> UIPreviewAction {let action = UIPreviewAction(title: title, style: style) { previewAction, viewController in// previewAction 是被点击的Action; viewController 就是预览的VC// 这个闭包内,可以写点击Action的响应事件guard let detailViewController = viewController as? SFViewController,item = detailViewController.constellEN else { return }if previewAction.title == "复制链接" {// 访问剪切板let pasteB = UIPasteboard.generalPasteboard()pasteB.string = item}}return action}// 创建多个actionlet action = previewActionForTitle("分享")let action1 = previewActionForTitle("复制链接")let action2 = previewActionForTitle("Destructive Action", style: .Destructive)let subAction1 = previewActionForTitle("Sub Action 1")let subAction2 = previewActionForTitle("Sub Action 2")let groupedActions = UIPreviewActionGroup(title: "Sub Actions…", style: .Default, actions: [subAction1, subAction2] )return [action, action1, action2, groupedActions]}()// MARK: Preview actions// 重写previewActionItems(),将多个actions返回override func previewActionItems() -> [UIPreviewActionItem] {return previewActions}}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
到这基本就实现了我们所说的Peek & Pop功能
关于Force Properties的细节,将在之后的文章中介绍,顺便看看做个关于压力的小东西,谢谢~
3DTouch介绍(一)相关推荐
- 3D-Touch介绍与细节实现App架构配合总结
iOS9,新的iPhone提供新的用户交互方式-3D touch.调研说明3D–Touch相关功能,以及具体实现方式.以及架构目前需要支持的TODO 3D touch主要依赖于iPhone6S和iPh ...
- win10鼠标灵敏度怎么调_iPhone8怎么调3DTouch灵敏度 iPhone8调3DTouch灵敏度方法【介绍】...
iPhone8如何调3DTouch灵敏度?相信小伙伴们一定很好奇,下面小编为大家带来了iPhone8调3DTouch灵敏度方法详细介绍,感兴趣的小伙伴赶紧跟着小编一起来看看吧. iPhone8调3D ...
- 详解3DTouch集成篇
欢迎大家一起交流 QQ群 139852091 本文主要讲解3DTouch各种场景下的集成,开发主屏幕应用icon上的快捷选项标签(Home Screen Quick Actions),静态设置 UIA ...
- 3DTouch的简单使用
北京时间2015年9月10日凌晨,Apple在美国旧金山比尔格拉汉姆公民大礼堂(Bill Graham Civic Auditorium)召开新品发布会.本次发布会带来了3D Touch技术. 本文主 ...
- iOS9 3DTouch开发 知识点详解
本篇文章介绍3D Touch功能, 大体介绍一下: 下篇为大家提供一个3DTouch的简单Demo 增强版的Force Touch(压力触控)技术,Force Touch之前被应用在于Apple Wa ...
- iOS开发 3D-touch使用
3D Touch的触控技术,被苹果称为新一代多点触控技术.3D Touch,苹果iPhone 6s的新功能,看起来类似 PC 上的右键.有Peek Pop 两种新手势.iOS 9提供了如下3D Tou ...
- c语言%.6s和%6s的差别,6s和6的区别有哪些 各方面详细介绍【图文】
苹果 手机大家都听说过吧,它现在是很多年轻人追捧的对象,尤其是对于女性朋友来说,苹果手机是美国的一个手机品牌.在大陆市场非常受欢迎,它的价格虽然高,但是它的销量非常高,目前最为流行的款式就是苹果6S了 ...
- iOS开发3DTouch(一)
一.3D Touch 的简单介绍 ①主屏幕的快捷操作: 在主屏幕按压app图标,有两种类型:静态操作(在info.plist中添加UIApplicationShortcutItems数组)和动态操作( ...
- iOS 开源项目介绍之UI篇
本文介绍一些UI方面的开源项目,大家可以结合自己的需求选择合适的开源库进行使用和学习.大家也可以关注我的公众号阅读此文章. ...
最新文章
- 字节跳动教育大规模裁员:赔付方式N+2
- matlab与excel的交互
- iOS UUID配合keychain的替换方案实现
- [leetcode] 根据String数组构造TreeNode,用于LeetCode树结构相关的测试用例
- 教你如何利用EXCEL制作动态仪表盘
- jeesite的junit,数据没有插入?
- mysql current_MySQL中CURRENT_TIMESTAMP数据类型详解
- Mac(不限于)中几个有内涵的工具
- Shell.NavBarIsVisible=“false“
- 战国七雄中最强大的国家(除秦外)——赵国_我是亲民_新浪博客
- 华为OD机试题:统计射击比赛成绩
- 鸿蒙之境浩然溟涬,泰泉集-明-黄佐.pdf
- 2012-8-18可樂美文分享《遗留在时…
- MIUI ROM 定制教程
- 百度实时主动推送url
- java中math的方法_Java中Math类常用方法代码详解
- 恢复W ndows10系统方法步骤,教你windows10的映像文件还原系统
- 百瑞BARROT BR2262e蓝牙模块的使用
- 猝灭剂BHQ-1 amine/1308657-79-5/BHQ-2 氨基/1241962-11-7者相关的物理性质还是有一定的区别,整理以下相关的数据进行对比。
- P1926 小书童——刷题大军(dp背包(01背包)状态转移方程)