zoukankan      html  css  js  c++  java
  • iOS 3D Touch开发

    xcode7是支持3D Touch开发的,可是模拟器并不支持这个手势,我们只能在真机上进行学习与测试,但是github上有人为我们提供了这样的一个插件,可以让我们在模拟器上进行3D Touch的效果测试:

    地址: https://github.com/DeskConnect/SBShortcutMenuSimulator 

    经过测试,在Simulator9.2上无法运行。解决方法是在Xcode里面下载Simulator9.1,使用这个版本的模拟器, SBShortcutMenuSimulator 插件能正常使用。

     

    操作方法github项目中有教程

     

    依次运行以下指令

    git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git
    
    cd SBShortcutMenuSimulator
    
    make

     

    如果电脑中有多个Xcode版本,先做如下操作,如果只有一个版本的xcode,则可以跳过

    sudo xcode-select -switch /Applications/XcodeVersion.app/Contents/Developer/

    上面命令中,XcodeVersion.app是你电脑中Xcode的名字,这里如要特别注意,如果名字中有空格,需要修改一下,把空格去掉,否则会影响命令的执行。

     

    保持Simulator打开,然后运行如下命令

    此时是连接这上述命令的,也就是说下列命令需要你进入到 SBShortcutMenuSimulator 目录中执行

    xcrun simctl spawn booted launchctl debug system/com.apple.SpringBoard --environment DYLD_INSERT_LIBRARIES=$PWD/SBShortcutMenuSimulator.dylib
    
    xcrun simctl spawn booted launchctl stop com.apple.SpringBoard

    每次重新打开Simulator的时候,上述命令都要重新执行一次

     

    如果没有报错,我们可以通过向指定端口发送消息的方法来在模拟器上模拟3D Touch的效果

    echo 'com.apple.mobilecal' | nc 127.0.0.1 8000

    其中,com.apple.mobilecal是应用的Bundle ID ,如果要测试我们的应用,将其改为我们应用的BundleID即可

     

    效果:

     

    换成自己的 Bundle ID 后:

     

    Home Screen Quick Action使用与相关api详解

        iOS9为我们提供了两种屏幕标签,分别是静态标签和动态标签。

    1、静态标签

    必填项(下面两个键值是必须设置的):

    UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串 

    UIApplicationShortcutItemTitle 这个键值设置标签的标题

    选填项(下面这些键值不是必须设置的):

    UIApplicationShortcutItemSubtitle 设置标签的副标题

    UIApplicationShortcutItemIconType 设置标签Icon类型

    UIApplicationShortcutItemIconFile  设置标签的Icon文件

    UIApplicationShortcutItemUserInfo 设置信息字典(用于传值)

     

    在Info.plist中添加配置如下:

     

     

    2、动态标签

    动态标签是我们在程序中,通过代码添加的,与之相关的类,主要有三个:

    UIApplicationShortcutItem 创建3DTouch标签的类

    UIMutableApplicationShortcutItem 创建可变的3DTouch标签的类

    UIApplicationShortcutIcon 创建标签中图片Icon的类

     

    代码如下: 

                if #available(iOS 9.0, *) {
    
                    let item = UIApplicationShortcutItem(type: "", localizedTitle: "菜单选项")
    
                    UIApplication.sharedApplication().shortcutItems = [item]
    
                }

    几点注意:

    1、快捷标签最多可以创建四个,包括静态的和动态的。

    2、每个标签的题目和icon最多两行,多出的会用...省略

    3、动态标签不会覆盖静态标签, 静态标签的优先级高于动态标签

     

     

    3、响应标签的行为


    类似推送,当我们点击标签进入应用程序时,也可以进行一些操作,我们可以看到,在applocation中增加了这样一个方法:

        @available(iOS 9.0, *)
    
        optional public func application(application: UIApplication, performActionForShortcutItem shortcutItem: UIApplicationShortcutItem, completionHandler: (Bool) -> Void)

    当我们通过标签进入app时,就会在appdelegate中调用这样一个回调,我们可以获取shortcutItem的信息进行相关逻辑操作。

     

    需要注意如下问题, 当app已经处于启动状态(不论在前台还是在后台), 点击标签后只会触发 performActionForShortcutItem 这个回调行为。

    当app尚未启动时,点击标签会启动应用,在 didFinishLaunchingWithOptions 中, launchOptions里面会传入一个 UIApplicationLaunchOptionsShortcutItemKey,对应的value类型是 UIApplicationShortcutItem 可以从这里获取标签操作行为

     请看下面代码中的注释说明

            if #available(iOS 9.0, *) {
    
    //             如果在这里就已经接收到了 3D Touch的点击事件, 返回false则不会进入 performActionForShortcutItem 流程
    
    //             如果返回 true 则会进入到 performActionForShortcutItem
    
    //             那么可以不理会此处 直接在 performActionForShortcutItem 统一处理
    
                if let key = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey]{
    
                    
    
                    return false
    
                }
    
            }
    

      

     

  • 相关阅读:
    基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
    Configuration system failed to initialize
    WebException 请求被中止: 操作超时
    The underlying connection was closed: The connection was closed unexpectedly.
    无法将数据写入传输连接: 在一个非套接字上尝试了一个操作
    C# .NET UDP 形式调用 graylog,gelf
    python3存入redis是bytes
    python commands模块在python3.x被subprocess取代
    subprocess
    nginx重新编译添加ssl模块
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5147493.html
Copyright © 2011-2022 走看看