最近两周把 HRZN 更新到了 3.1 版本。拜苹果 iOS 13.0 这种史无前例的灾难性系统更新所赐,HRZN 3.0 版本许多想塞进去的东西都没塞进去就匆匆发版,只是为了能正常在 iPhone 11 和 iOS 13 上跑。

不过今天不是来抱怨苹果的——这足够单开一篇文章。今天想说说很久以来就想加的功能:相机取景框用于辅助构图的三分线线框——这个功能至少拖了半年时间,一直就在整个 app 的 to-do 里扔着。

这个功能一直拖着也并非毫无道理。相机取景器的线框这样细节要求高的 UI 部件并不适合直接通过贴上一张位图来实现;正确做法明显是运行时绘制一张大小合适的矢量图片交给 UI 框架渲染,这在 iOS 的框架下大概需要一个 CALayer 才能画出来。半年前的我对这个 class 的理解基本为零,只有偶尔做 UI 动效的时候接触过,基本上是 copy-paste 别人的代码稍作修改而来。怎么在这个 CALayer 上画出三条矢量的线,决定线宽,上色,调整透明度,还能保证线框在任何取景器的场景下都能清晰可见——听上去是个不小的工程。于是就一直这么拖下去了。

直到后来一天搜到了 Ray Wenderlich 的 CALayer 教程,发现 Example 8 的 CAShapeLayer 不正是我想要的么。看了看代码的示范,结合我对矢量绘图工具的浅薄理解,接入了动态的屏幕尺寸之后,这个功能花了不到三十分钟就搞定了——

HRZN 3.1: Camera grid

Camera Grid on HRZN 3.1

要说难是真的不难,计算一下整个区域的长款,三分点上横竖划四条线,哪一步都不算难。真说哪里难,主要是难在脑子里,之前自己给自己设置了太多障碍。

世间事大抵如此吧。