如何在一定程度上将UIImageview从A点移动到B点

时间:2013-11-04 04:08:40

标签: ios objective-c uiimageview core-animation

我想在一定程度上将UIImageview从A点移动到B点。 红色和蓝色箭头表示我希望点移动的程度。

我可以将点从一个点移动到另一个点,但是如何在一定程度上移动音符?

    NSLog(@"cgpoint %@",NSStringFromCGPoint(self.aggressiveDots.frame.origin)); 
CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], nil];
[anim setKeyTimes:times];   
NSArray *values = [NSArray arrayWithObjects:[NSValue valueWithCGPoint:CGPointMake(118, 188.)],
                   [NSValue valueWithCGPoint:CGPointMake(115, 300.)], nil];
[anim setValues:values];
[anim setDuration:6.0]; //seconds    
[self.redDots.layer addAnimation:anim forKey:@"position"];

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

由于你想沿着一条直线(不是曲线)移动UIView,你只需要两个积分来表示CAKeyFrameAnimation - 起点和终点。事实上,如果你愿意,你甚至可以使用[UIView transistionWithView:] - 只需操纵动画块中的帧即可。

  • 你已经知道了起点。
  • 要计算结束点,您需要找到红色圆圈边缘与白色圆圈相交的点。有一个方程可以解决两个圆圈的交点(详见here

如果您想避免棘手的代数,可以按如下方式绘制三角形:

  • 使用简单的线方程y = mx + b
  • ,让第一个圆沿着直线移动
  • 使用公式here
  • 测试圆的边缘(沿着中心前方的线的半径点)是否在三角形内部

“一般来说,xy必须满足(x - center_x)^2 + (y - center_y)^2 < radius^2