我有两个视图:A和B. A被定位在屏幕的顶部,B被定位在屏幕的底部。
当用户按下按钮时,图B,其中A EaseInEaseOut Bezier曲线向上动画直到它到达Y = 0。当B是在它的途中到它的目的地,它应该推起来,当它击中A.换句话说,当B具有从底部到顶部的过渡期间,通过一定的y坐标(A的y原点+高),A应该坚持到B如此看来乙推送向上。
我迄今为止尝试:
- 注册一个目标+选择到CADisplayLink后,立即在用户按下按钮。 内部此选择,请求视图乙的Y通过访问其表示层坐标和调整的Y坐标相应。 然而,这种方法被证明是不够准确的:在表示层的帧后面是在屏幕上B的当前位置(这可能是因为-presentationLayer重新计算当前时间的动画视图的位置,其时间比1帧) 。 当我增加B的动画时间,这种方法效果很好。
- 注册一个目标+选择到CADisplayLink后,立即在用户按下按钮。 这里面选择器,计算B的当前y通过求解贝塞尔方程对于x =经过时间/持续时间的动画(其应返回的商行进距离/总距离)坐标。 我用苹果的开源UnitBezier.h这个( http://opensource.apple.com/source/WebCore/WebCore-955.66/platform/graphics/UnitBezier.h )。 然而,结果是不正确的。
什么我可以尝试下有什么建议?