股票场内基金交易,没时间盯盘?

   
使用优财助手电脑客户端记录下您的股票买入卖出数据,能帮您时刻盯盘,会根据您记录的未售出买入价计算上涨或下跌幅度,及时弹框通知您。想知道如何使用?快点击左方视频观看了解吧~~下载地址:http://youcaizhushou.com

3D Touch APIs

吐槽一句,苹果给 API 起名字也太随便了。另外这里提到的 peek 就是重按钮使劲按屏幕

在iOS 9 操作系统中提供如下的 3D Touch API:

  • 主界面快速动作按钮
    (Home screen quick action API)
    主界面快速动作按钮 API 是用来为你的应用的图标增加快捷按钮。可以提前知道用户要怎样与,APP互动,同时能给用户更快捷的体验。
    这个 API 实现了在主界面重按一个 APP 图标,弹出快捷菜单的效果。

  • 快速预览API
    (UIKit peek and pop API)
    UIKit 框架的快速预览 API 应用在 APP 中。它能在保持用户现有应用的情境下,为用户便捷的展示附加内容。
    这个 API 实现了重按屏幕上个控件,会弹出相应的预览窗口。

  • 这玩意应该叫什么?
    (Peek quick actions API)
    使用 Peek quick actions API 能够让点按操作代替掉原来的长按操作。
    就是用重按代替长按喽~

  • 网页预览 API
    (Web view peek and pop API)
    Web view peek and pop API 能让你在APP中使用系统内置的 HTML link 预览功能。
    我理解就是 Web View 带有和 Safari 一样的预览功能,重按一个链接就会弹出窗口预览网页。

  • UITouch 的力度属性
    UITouch 中与按压力度相关的若干属性能让你为APP订制基于按压力度的交互
    UITouch 能识别按压力度的大小,可以实现许多基于力度大小的好玩的功能。

无论你采用上述的哪一种 API,APP 必须在runtime中检查设备是否支持 3D Touch。

检查设备是否支持 3D Touch

想要知道当前设备是否支持 3D Touch 功能,可以通过任何一个遵守 UITraitEnviroment 协议的对象的 traitCollection 属性来获取。

要注意的是,用户可能在使用APP的过程中关闭 3D Touch 功能,因此在实现traitCollectionDidChange: 这个代理方法的时候应该重新获取 traitCollection 中的信息。

这里提到了一个协议 UITraitEnviroment。traitCollection 和 traitCollectionDidChange: 都是这个协议要求实现的方法。所以我就了解了下关于UITraitEnviroment 这个协议的相关信息。

UITraitEnviroment Protocol

运行 APP 的设备环境可以通过这个协议来获取。例如可以知道运行设备横放和竖放分别属于哪个 size class,设备的显示比例还有设备类型等信息。

默认遵守此协议的官方类有:UIScreen,UIWindow,UIVIewController,UIPresentationControllerUIView
通过 traitCollection 属性可以了解对象(必须遵守 UItraitEnviroment 协议)的界面信息。

属性和方法

traitCollection

traitCollection是协议必需的属性。其中保存了与运行设备环境相关的信息。

这个属性是一个UITraitCollection类型的对象,并且是只读的。

traitCollectionDidChange:

这个方法也是协议所必须实现的方法。当系统发现运行设备环境发生变化就会调用这个方法,例如当你的iPhone从横屏状态切换到竖屏状态时,就会调用。

这个方法的声明是这样的:

这个方法会传递一个参数:previousTraitCollection,就是发生变化之前的traitCollection。而变化后的运行设备环境信息可以通过 traitCollection 属性获取,这样就可以通过对比了解是哪个属性发生了变化。注意,这个方法的初始实现是空的,但要注意的是在实现这个方法时还是要先调用继承父类的方法,这样才能保证在 traitCollection 发生变化时,高层级的 view 会优先调整它们的显示状态。官方文档还给出了一个实例代码:

问题

对这段话我不是很理解,尤其是当 traitCollection 变化的时候,每个遵守UITraitEnviroment Protocol 的对象都会收到traitCollectionDidChange:信息,这是如何实现的?

猜想

对此我有两个猜想:
* 第一个是某个类会在 traitCollection 发生变化的时候轮询,历遍所有对象。
* 第二个是某个类会在 traitCollection 发生变化的时候想 UIScreen 发送traitCollectionDidChange: 信息,收到信息的对象会向它的subView发送这个信息,这条信息会沿着view hierarchy向下传递。

可以确定的是 traitCollection 的更新不是通过 NotificationCenter 发送通知进行的。但是方法中并没有把调用者作为参数传入,因此不容易判断发送者。更新 traitCollection的代码没有放在方法中,因此 traitCollection 属性应该是指向某个单例或者某个在APP运行过程中一直存在的对象。官方文档中提到,继承父类的方法能保证高级别的view先于低级别的view发生变化,因此我倾向于第二个猜想。但是这与官方文档中说的这个方法的初始实现是空的矛盾。

验证

其实验证的方法不难,只要新建一个遵守 UITraitEnviroment Protocol 协议的类,让它独立于view hierarchy,然后观察它会不会在traitCollection发生变化的时候相应方法。

测试代码已经上传到Github欢迎fork和star。

经过测试,独立于hierarchy的对象不会收到 traitCollectionDidChange: 信息,也就是说这个方法是基于 view hierarchy 传递的,也否定了官方文档中关于traitCollectionDidChange: 方法的初始实现是空的的说法。至少它调用了 subviews 的此方法。

注:
本文是一篇学习笔记,学到哪里就写到哪里,所以没有严密的组织框架,希望读者也能从拙作中获得一点裨益。

   

想获得去掉 5 元限制的证券账户吗?

证券交易股票基金的佣金,不足 5 元会按照 5 元收取。比如交易 1000 元的股票,按照普遍的证券佣金手续费率万 2.5,其交易佣金为 0.25 元,小于 5 元,实际会收取佣金 5 元,买卖两次需要支付 10 元佣金成本,1% 的利润就这样没了。

如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。

请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。

发表评论

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