IOS 实现3D Touch在tableView的简单应用(swift版)

之前记录过OC版实现3D Touch功能的小小演示,最近无事整整swift,也弄个swift版的3D Touoch。。。

上代码。

一、3D Touch重按主屏icon出现快捷标签有两种添加方式:

1.静态添加,在工程中的info.plist文件中添加,这种方式添加的标签安装后就能显示

2.动态添加,通过代码动态添加快速入口。这种方式添加的标签,必须先运行一次App才会出现。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        self.window?.frame = UIScreen.mainScreen().bounds
        self.window?.makeKeyAndVisible()

        UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.makeKeyWindow()

        self.configShortCutItems()

        self.window?.rootViewController = McUITabBarController()

        return true
    }
func configShortCutItems()
    {
        //动态添加方式
        let icon1 = UIApplicationShortcutIcon(type: .Play)
        let item1 = UIMutableApplicationShortcutItem(type: "777", localizedTitle: "标题", localizedSubtitle: "副标题", icon: icon1, userInfo: nil)
        let icon2 = UIApplicationShortcutIcon(type: .Add)
        let item2 = UIMutableApplicationShortcutItem(type: "888", localizedTitle: "标题", localizedSubtitle: "副标题", icon: icon2, userInfo: nil)
        let icon3 = UIApplicationShortcutIcon(templateImageName: "shareIcon")
        let item3 = UIMutableApplicationShortcutItem(type: "999", localizedTitle: "自定义图片", localizedSubtitle: nil, icon: icon3, userInfo: nil)
        UIApplication.sharedApplication().shortcutItems = [item1,item2,item3]

    }

需要说明一点,主屏呼出的快捷标签,静态和动态添加的共只能有四个。

3D Touch在appdelegate.swift代理方法:

//pragma mark - 3D Touch
    func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void) {
        switch shortcutItem.type {
        case "666":
            print("静态添加")
        case "777":
            print("动态代码添加一")
        case "888":
            print("动态代码添加二")
        case "999":
            print("自定义图片")
        default:
            print("")
        }
    }

至此,通过重按主屏触发3D Touch 呼出快捷标签和点击分别响应操作已集成完毕!

二、3D Touch 的peek和pop功能在tableView上的简单实现

话不多说,直接上代码

1.peek预览

DDDTouchVC.swift

3D
Touch的代理控制器需要实现 UIViewControllerPreviewingDelegate 协议

import UIKit

class DDDTouchVC: McBaseViewController,UITableViewDataSource,UITableViewDelegate,UIViewControllerPreviewingDelegate {

    static let cellIdentifer = "myCell"
    var tableView: UITableView?
    var isCan3DTouch = true
    var itemArray : Array = [Dictionary<String,String>]()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.setCustomTitle("3D Touch")
        self.initData()
        self.initSubView()
        if traitCollection.forceTouchCapability == UIForceTouchCapability.Available {

            self.isCan3DTouch = true
        }
        else {
            self.isCan3DTouch = false
        }
    }

    func initData()
    {
        let dic1 = ["m":"http://a.hiphotos.baidu.com/image/h%3D360/sign=1698b41ebb389b5027ffe654b535e5f1/a686c9177f3e6709e974ebff39c79f3df8dc55bd.jpg"]
        let dic2 = ["mm":"http://b.hiphotos.baidu.com/image/h%3D360/sign=ff34dff8bd389b5027ffe654b537e5f1/a686c9177f3e670900d880193fc79f3df9dc5578.jpg"]
        let dic3 = ["mmm":"http://a.hiphotos.baidu.com/image/h%3D360/sign=f527ab2f4b540923b5696578a259d1dc/dcc451da81cb39dbce6b325ad2160924ab183016.jpg"]
        let dic4 = ["mmmm":"http://d.hiphotos.baidu.com/image/h%3D360/sign=81d5d22779f40ad10ae4c1e5672d1151/d439b6003af33a8762fee505c45c10385343b51a.jpg"]
        let dic5 = ["mmmmm":"http://d.hiphotos.baidu.com/image/h%3D200/sign=8d3a52a04ded2e73e3e9812cb701a16d/f7246b600c33874450b89258560fd9f9d72aa091.jpg"]
        let dic6 = ["mmmmmm":"http://h.hiphotos.baidu.com/image/h%3D360/sign=e53dee25d5ca7bcb627bc1298e086b3f/a2cc7cd98d1001e9ae32c3e9ba0e7bec55e797ce.jpg"]
        let dic7 = ["mmmmm":"http://g.hiphotos.baidu.com/image/h%3D360/sign=8cb0e6191a178a82d13c79a6c602737f/6c224f4a20a446230761b9b79c22720e0df3d7bf.jpg"]
        let dic8 = ["mmmm":"http://a.hiphotos.baidu.com/image/h%3D360/sign=80285822f9f2b211fb2e8348fa806511/bd315c6034a85edf1da1c0724b540923dd5475b5.jpg"]
        let dic9 = ["mmm":"http://e.hiphotos.baidu.com/image/h%3D360/sign=708629f379cb0a469a228d3f5b62f63e/7dd98d1001e939015d4a463779ec54e736d1966b.jpg"]
        let dic10 = ["mm":"http://h.hiphotos.baidu.com/image/h%3D360/sign=95102c30bc096b639e1958563c338733/3801213fb80e7beccbb1e8fe2d2eb9389b506b42.jpg"]
        let dic11 = ["m":"http://a.hiphotos.baidu.com/image/h%3D360/sign=cbd227bf8e5494ee9822091f1df5e0e1/c2cec3fdfc039245ee84470f8594a4c27d1e25f8.jpg"]
        let dic12 = ["mm":"http://e.hiphotos.baidu.com/image/h%3D360/sign=87824d652adda3cc14e4be2631e83905/b03533fa828ba61e64671cd54534970a314e59bb.jpg"]
        itemArray.append(dic1)
        itemArray.append(dic2)
        itemArray.append(dic3)
        itemArray.append(dic4)
        itemArray.append(dic5)
        itemArray.append(dic6)
        itemArray.append(dic7)
        itemArray.append(dic8)
        itemArray.append(dic9)
        itemArray.append(dic10)
        itemArray.append(dic11)
        itemArray.append(dic12)
    }

    func initSubView()
    {
        self.tableView = UITableView(frame: CGRectMake(0, 0, McConstant.screenWidth, McConstant.screenHeight), style: UITableViewStyle.Plain)
        self.tableView?.backgroundColor = UIColor.clearColor()
        self.tableView?.dataSource = self
        self.tableView?.delegate = self
        self.view.addSubview(self.tableView!)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return itemArray.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier(ModuleOneVC.cellIdentifer)
        if cell == nil {
            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: ModuleOneVC.cellIdentifer)
            if self.isCan3DTouch {
                //注册3D Touch
                registerForPreviewingWithDelegate(self, sourceView: (cell?.contentView)!)
            }
        }
        let dic = itemArray[indexPath.row]
        cell?.textLabel?.text = Array(dic.keys)[0]
        cell?.textLabel?.textColor = UIColor.blackColor()
        cell?.backgroundColor = UIColor.clearColor()
        return cell!
    }

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 50
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
        let dic = itemArray[indexPath.row]
        self.navigationController?.pushViewController(DDDTouchPeekVC(imgUrl: Array(dic.values)[0]), animated: true)

    }

    //mark -UIViewControllerPreviewingDelegate 3D Touch代理方法
    func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        let indexPath = self.tableView?.indexPathForCell(previewingContext.sourceView.superview as! UITableViewCell)
        let dic = itemArray[indexPath!.row]
        let peekVC = DDDTouchPeekVC(imgUrl: Array(dic.values)[0])
        peekVC.preferredContentSize = CGSizeMake(0, 400)
        return peekVC
    }

    func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController) {
        self.navigationController?.pushViewController(viewControllerToCommit, animated: true)
    }

}

***以上演示用图片来源均来自百度随机搜索。

2.pop界面控制器

DDDTouchPeekVC.swift

import UIKit

class DDDTouchPeekVC: McBaseViewController {
    var etag:String?
    var potoView:UIImageView?
    var imageUrl:String?
    init(imgUrl:String){
        super.init(nibName: nil, bundle: nil)
        self.imageUrl = imgUrl
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.setCustomTitle("3D TouchPeekVC")
        self.initSubView()
        self.initData()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func initData()
    {
        let url = NSURL.init(string: imageUrl!)
        let request = NSURLRequest(URL: url!)
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { (dataa, response, error) in
            dispatch_async(dispatch_get_main_queue(), {
                //
                self.potoView?.image = UIImage(data: dataa!)
            })
        }
        task.resume()

    }
    func initSubView(){
        let titleView = UILabel(frame: CGRectMake(0, 0, McConstant.screenWidth, 64))
        titleView.backgroundColor = UIColor(red: 52/255, green: 222/255, blue: 136/255, alpha: 1).colorWithAlphaComponent(0.8)
        titleView.textAlignment = NSTextAlignment.Center
        titleView.text = "PeekView"
        self.view.addSubview(titleView)

        self.potoView = UIImageView(frame: CGRect(x: 0, y: 64, width: McConstant.screenWidth, height: McConstant.screenHeight-60))
        self.potoView?.contentMode = UIViewContentMode.ScaleToFill
        self.view.addSubview(self.potoView!)
    }
    //pragma mark - 底部预览界面选项
    override func previewActionItems() -> [UIPreviewActionItem] {
        //
        let action1 = UIPreviewAction(title: "点赞", style: .Default) { (action, previewViewController) in
            //
        }
        let action2 = UIPreviewAction(title: "评论", style: .Default) { (action, previewViewController) in
            //
        }
        let action3 = UIPreviewAction(title: "嘿嘿", style: .Default) { (action, previewViewController) in
            //
        }
        let action4 = UIPreviewAction(title: "呵呵", style: .Default) { (action, previewViewController) in
            //
        }
        let actionItems = [action1,action2,action3,action4]
        return actionItems

    }

}

至此,3D Touch功能在tableView上列表的简单功能就完成了, 这边是peek 、pop展示的是加载一张百度连接的图片。匆忙而就,写得不详细,如有错误,谅解。。。

上效果图

时间: 06-02

IOS 实现3D Touch在tableView的简单应用(swift版)的相关文章

iOS开发--3D Touch的基本使用

1.桌面快捷菜单项 效果如图: 桌面快捷菜单 点击之后的效果如图: 点击桌面快捷菜单的效果 接下来看下具体实现:1).在-application:didFinishLaunchingWithOptions:方法中用-setShortcutItems:方法来添加快捷菜单项. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //

Android 7.1.1 之实现 3D Touch

转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/68962736 Shortcut概念 具体实现 BuildConfig 配置 静态配置 动态配置 创建 删除或禁用 更新 返回栈问题 Shortcut概念 Shortcut 是Android-25(Android 7.1)新增的一项类似iOS的 3D Touch 功能的快捷方式组件,但是有着不同的表现形式,因为Android在硬件上不支持触摸压力感应,所以表现形式为长按,而iOS

iOS 3d touch设计的秘密

相信很多苹果的用户对这个3d touch这个功能都不是很了解,而苹果设备上的这个交互设计主要是给用户带来更多的互动维度.那苹果公司为啥要这个交互功能,那我们首先来解析一下这个设计的用法:在支持的设备上,人们可以通过按压主屏幕应用程序的图标快速选择特定的操作.在应用程序中,人们可以使用压力来获得项目的预览,可以在一个单独的视图中打开该项目,并获得相关的操作. Peek和PopPeek可以让用户在没有打开应用的情况下预览的应用所支持的快捷操作.轻压有支持Peek的应用图标可以显示一个矩形的Pop视图

《iOS Human Interface Guidelines》——3D Touch

3D Touch 3D Touch让iOS 9的用户多了一个交互的维度.在支持的设备上,人们可以通过按压主屏幕上的app图标来快速地选择其特有的操作.在app内,人们可以使用多种压力来获取一个内容的预览.在另一个视图打开内容以及获取相关的操作.(查看Adopting 3D Touch on iPhone来学习更多关于在你的代码中支持3D Touch的内容.) Peek 和 Pop Peek让用户可以在不离开当前环境的情况下预览一个内容以及执行相关的操作.元素通过在轻按时显示一个小的矩形视图(有时

iOS 3D Touch功能

新的触摸体验--iOS9的3D Touch 一.引言 在iphone6s问世之后,很多果粉都争先要体验3D Touch给用户带来的额外维度上的交互,这个设计之所以叫做3D Touch,其原理上是增加了一个压力的感触,通过区分轻按和重按来进行不同的用户交互. 二.在模拟器上学习和测试3D Touch 3D Touch 是一个很新颖的设计,可是苹果文档有言: With Xcode 7.0 you must develop on a device that supports 3D Touch. Sim

3D Touch的简单使用

6s发布以后新增了一个3D touch功能,我个人觉得这个功能点在某些时候还是挺方便的,比如说微信的扫码功能. 直接长按图标就可以进入这个功能里面,不用再打开app.一层层查找了,比较方便. 其实这个功能实现起来是比较简单的,主要在appDelegate.m里面实现设置: 具体代码如下: //这里是设置3D touch的功能菜单,即要显示哪些功能 然后就是功能的具体实现了: 这里为了方便只做了打开相机和打开相册两个功能,主要就是根据不同的type值做出不同的相应. 以上是3D touch在app

iOS 9之3D Touch

金田 北京时间9月10日凌晨, Apple在美国旧金山比尔格拉汉姆公民大礼堂(Bill Graham Civic Auditorium)召开新品发布会.本次着重介绍了3D Touch功能, 大体介绍一下: - 增强版的Force Touch(压力触控)技术,Force Touch之前被应用在于Apple Watch - 根据力度的不同,从而带来更多样化的用户体验.比如,用力按快进按钮会使快进的速度更快.用力度触摸代替了长按拖拽选项.用力按屏幕时用户可以自行调节应用界面等 - 在点击.滑动.缩放的

iOS开发之 3D Touch 开发

在App 的开发中对于开发人员来说新设备以及新功能的适配无疑是一个很苦逼的事.在今年九月份iPhone 6S 以及 6S+ 出来之后,新的功能 3D Touch又是一个比较头疼的事.刚刚看到的时候以为是比较麻烦的东西 看着开发文档就头大(本撸主英语水平有限).但是看完官方文档之后感觉也不是很麻烦.所以就自己写了一个Demo 供大家吐槽和狂喷. 我感觉  3D Touch  的使用和  UITabBar  差不多还是一个比较简单的东西,几乎是拿过来就能用的东西. 一. 给桌面 Icon 添加 3D

iOS开发之3D Touch

1.简介 3DTouch是在6s之后苹果的一项技术,只能在6s及其以上机型真机运行,Xcode的模拟器是不支持的. Quick Actions(点击icon的快捷方式) Peek&Pop(应用内快速预览内容) UITouch和LivePhoto(读取压力和最大压力) 2.Quick Actions(点击icon的快捷方式) 点击app的图标,可以弹出Today小组件(如果有的话)和UIApplicationShortcutItem快捷方式--这就是Quick Actions! // // UIA