1

我想在一定程度上将 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"];

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

1

由于您想沿直线(而不是曲线)移动 UIView,因此您的 CAKeyFrameAnimation 只需要两个点 - 起点和终点。实际上,如果您愿意,您甚至可以为此使用 [UIView transistionWithView:] - 只需操作动画块中的帧。

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

如果你想避免棘手的代数,你可以画一个三角形,如下所示:

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

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

于 2013-11-04T04:56:41.770 回答