3D Touch详细实例介绍之一
*关于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属性,具体我将UIKit peek & pop写到一个demo中,大家可以到github地址参考:https://github.com/jakajacky/3DTouch-SFSafariViewController*
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];
效果图:
我们知道,这个功能的作用就是用来快速启动App中某一个特定功能,EX: 扫一扫,那么如何判断点击类型来确定App入口呢?
iOS9在AppDelegated中提供了一个新方法:
func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {// performActionForShortcutItem作为入口标记
}
如果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 }}
}
- 新建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}}
到这基本就实现了我们所说的Peek & Pop功能,具体细节,请到github下载:https://github.com/jakajacky/3DTouch-SFSafariViewController
关于Force Properties的细节,将在之后的文章中介绍,顺便看看做个关于压力的小东西,谢谢~
3D Touch详细实例介绍之一相关推荐
- word2vec的详细实例介绍(包含jieba分词提供的语料)
原创实在不易,欢迎大家关注我微信公众号:阳洋up 重要参考博客:word2vec中文相似词计算和聚类的使用说明及c语言源码_杨秀璋的专栏-CSDN博客_word2vec词语相似度 https://ww ...
- mysql 事务操作详细实例介绍
1.打开mysql 本人由于重装了系统之后,不能快速正确找到mysql客户端,所以需要使用cmd窗口来运行命令行程序. 如果在打开cmd窗口时就使用mysql命令,会出现如下错误: 这是由于没有目前还 ...
- 3D Touch介绍: 一个数字压力器App和Quick Actions
随着iPhone 6s and 6s Plus的发布,苹果介绍了全新的手机交互方式:重按手势.你应该知道,这个特性其实早已应用在苹果手表和MacBook产品中,名字叫Force Touch.它给用户交 ...
- 3D Touch介绍:电子秤App与快捷操作
随着iPhone6s与6s plus的到来,苹果给我们展现了一种全新的交互方式:重按手势.你可能知道,这个特性已经在Apple Watch和MacBook上推出了,不过那时叫Force Touch,就 ...
- 你知道安卓的3D Touch吗?(Shortcut详解,你想知道的我都有)
前因后果 苹果在iPhone 6s和iPhone 6s Plus开始新增了3D Touch,这个功能褒贬不一,但我觉得还是特别好用的,特别是在微信上付款.加好友.扫二维码,或是在支付宝上付款等等场景. ...
- Android 设备上可以实现 3D Touch 吗?| 原力计划
作者 | Android_zhu_jiang 责编 | 屠敏 出品 | CSDN 博客 苹果在iPhone 6s和iPhone 6s Plus开始新增了3D Touch,这个功能褒贬不一,但我觉得还是 ...
- iOS技术总结1——3D Touch技术
简介 3D Touch是iPhone 6s+,iOS9之后新增的功能.是一种立体触控技术,被苹果称为新一代多点触控技术,在Apple Watch上体现为采用了Force Touch,屏幕可感知不同的感 ...
- 苹果弃用 3D Touch!
被称之为新一代多点触控技术的 3D Touch 为何频遭 iPhone 等产品嫌弃?本文将从用户体验角度分析这项技术失败的原因. 3D Touch 上个月,苹果公布了他们最成功的产品和品牌--iPho ...
- iOS9 3D Touch 标签菜单 peek and pop force 压力触控 功能开发高级版教程
iOS9 3D Touch 标签菜单 peek and pop force 压力触控 功能开发高级版教程 github地址: https://github.com/wyk125/3DTouchDem ...
- android-b9是什么设备,Android 设备上可以实现 3D Touch 吗?| 原力计划
这么好用的功能安卓能不模仿吗?呸!能不实现吗? 从安卓7.1(25)开始,系统新增了Shortcut来实现类似{e6803e21b9c61f9ab3d04088638cecd2}3D Touch的功能 ...
最新文章
- numpy.array()基本操作
- 第0次作业——读推荐博客有感
- Kinect学习(一):开发环境搭建
- QTP之对测试用例的自动化过程的分解
- linux 提取cpio_使用rpm2cpio,cpio提取rpm包的中的特定文件
- html5,表格与框架综合布局
- 如何将10进制转成16进制,又如何将16进制数转成10进制,C#和VB代码?
- 基于粒子群优化算法的函数寻优算法
- Java实现第九届蓝桥杯分数
- 二元二次方程例题_二元二次方程组-解法-例题.
- js获取当前农历时间
- 计算机uc,UC浏览器
- 知识经济时代的基石:知识协同
- 大部分前端都在用的 ES6 代码简化技巧,你都在用吗?
- 做程序界中的死神,获取自己的灵力修养
- 商城小程序的一些功能介绍以及搭建教程
- 高中OJ3837. 【NOIP2014模拟9.14】心灵终结
- 【Android】带你细看Android input系统中ANR的机制
- CSS visibility
- 杰理之充电芯片选型【篇】