曾经我有这样一种的想法,只要善用百度谷歌,并且肯花时间去研究,基本就能解决大部分问题。
但到了实际工作时就会发现,这样的想法太过美好了。
1.工作的问题基本上不可能直接在网上找到解决方案,需要对问题进行分解。工作问题一般会被分解为业务层面和技术层面,前者基本不可能在百度中找到答案,需要通过内部的确认;后者也非全部依赖百度,还需要进行分解,剥除了内部实现那部分之后,剩下的才是能在网上找到答案的问题;
2.基于1,工作问题的分解是一种能力。我有一个不做技术但偶尔需要编程的朋友,有时他会问我比如为什么这个实现不了问题,举个例子,“为什么我的Vue按这个教程装不了?”,然后给了我教程链接告诉我哪里卡住。我一般会先反问,你百度了吗?通常他的回答是我百度不到。实际上我也没用过Vue,但按照第一点的原则我会这样分解,首先剥除教程这一点,因为教程属于“业务”,针对(博客性质的)教程寻找解决方法有点蠢,所以我会看一下出问题这一步的报错,显示依赖没有装上,这时百度“XX依赖提示错误”这种问题一般可以获得解决问题的思路。
3.同一个问题,分解的形式也很多样。除了掌握分解的能力,还要把握分解的方向,这是我在最近一次版本开发中的切身体会,下面详细说一下。
需求
做一个小火箭的Icon在轨道上面飞的动画。
设计给了两种图,一个是只有小火箭,一个是小火箭在轨道上面,如下图
其实在看到第二种图的时候就应该有正确的思路,但当时已经先入为主的陷入另一种思维模式了。
开发思路和过程
在设计给图时我就没有思考一个问题,为什么会有第二种图。
最直接的思路是轨道是固定的,火箭在上面转,所以采用了图1+自己画轨道的方式。
画轨道很容易,把火箭放上去也很容易,该考虑动画了。
第一个思路明显是脑子短路的想法,想的是火箭需要绕Z轴自转,同时绕圆心旋转。
其实一看就有点蠢,但偏偏是我纠结了最久的。问题点在于两个旋转动画如何兼容。
经过一番努力放弃了这个尝试,但还没有意识到这个方法的荒谬,进行了一种“优化”的设计。
第二个设计方案就是把火箭放进一个UIView里面,自转是给小火箭的动画,绕圆心公转是给UIView的动画
依然不行,其实这时候就应该认识到了一点,绕View外一点旋转应该是有问题的,可惜并没有。(这一点并不能完全确定,因为我都是按照网上的方法设置ancherPoint 和 position,并没有研究属性的具体含义)
第三回我醒悟了一点,为什么不直接让小火箭绕圆心旋转呢?
如上所言,我并没有能实现小火箭绕外部点旋转的动画。
在经历了四回愚蠢的尝试后,我终于开窍了,为什么不直接让轨道和火箭一起转呢?
于是直接给轨道+火箭的View加上CA基本动画,完成。
补充一点,用的是CA动画,进出后台的时候会自动把动画给停掉(Why?)
所以需要监听一下进出后台的通知,在进入前台时重绘动画。
说实话在做完之后回头思考,这个动画其实就是5分钟的事情,但是因为从一开始就想偏了解决方法,所以最后花费了差不多半天的时间。问题其实就出于自己在解决问题之前对解决方案缺乏思考,也就是开头所说的分解问题方向错误,习惯于想到方法就去实践,而不是考虑“是否有更好的方法呢?”。
方向的错误意味着之后无论怎么善用百度谷歌,无论怎么熟悉业务技术,也无助于问题的解决。谨以此文记录下这次并不成功的需求开发,提醒自己在日后每一次面对问题时都应该持有的严谨、冷静的态度。