iOS: 在两个动画视图之间画线
iOS: Draw line between two animating views
我有两个 UIView,使用 UIView.animateWithDuration 有两个不同的动画。第一个动画立即开始,第二个动画在延迟 0.5 秒后开始。
如何在它们之间绘制一条线并为其设置动画,如下例所示:
我的第一次尝试是将线绘制为 CGPath,然后使用 CABasicAnimation 对其进行动画处理。如果两个视图(或该测试中的形状)同时进行动画处理,则此方法有效,而不是在第二个动画延迟开始时。
然后我一直在研究连续获取 UIView 框架位置的值。这将使我能够在每个动画帧上重新绘制线条,但我也找不到任何方法。
所以...我如何做实现这个?
CADisplayLink
可能就是您要找的。
将 update
方法添加到您的 class 并在那里执行动画:
- (void)update {
// animate view 1
CGRect frame = view1.frame;
frame.origin.y += 1;
view1.frame = frame;
// animate view 2
// draw the line/animate another view
}
当你想开始动画时,执行:
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
动画完成后,从 运行 循环中删除 displayLink
。
我有两个 UIView,使用 UIView.animateWithDuration 有两个不同的动画。第一个动画立即开始,第二个动画在延迟 0.5 秒后开始。
如何在它们之间绘制一条线并为其设置动画,如下例所示:
我的第一次尝试是将线绘制为 CGPath,然后使用 CABasicAnimation 对其进行动画处理。如果两个视图(或该测试中的形状)同时进行动画处理,则此方法有效,而不是在第二个动画延迟开始时。
然后我一直在研究连续获取 UIView 框架位置的值。这将使我能够在每个动画帧上重新绘制线条,但我也找不到任何方法。
所以...我如何做实现这个?
CADisplayLink
可能就是您要找的。
将 update
方法添加到您的 class 并在那里执行动画:
- (void)update {
// animate view 1
CGRect frame = view1.frame;
frame.origin.y += 1;
view1.frame = frame;
// animate view 2
// draw the line/animate another view
}
当你想开始动画时,执行:
displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
动画完成后,从 运行 循环中删除 displayLink
。