我在一个 UIView 类的 drawRect 方法中制作了一个箭头长度固定的尖箭头。我必须计算 ArrowView 的中心和旋转角度,然后将其添加到我的视图中,以使箭头看起来从源指向目标。
我使用的代码是
-(void)addArrowForChessMove:(CGPoint)source andDestination:(CGPoint)destination
{
CGPoint centerOfArrow=CGPointMake((abs(source.x+destination.x)/2), (abs(source.y+destination.y)/2));
DrawExperiment *drw=[[DrawExperiment alloc]initWithArrowHeight:70];
drw.frame=CGRectMake(0,0, 25, 70);
[drw setCenter:centerOfArrow];
[drw setBackgroundColor:[UIColor clearColor]];
[drw setTag:1002];
float angleVal = atan2((destination.x - source.x) , (destination.y - source.y))*180/M_PI;
if ((destination.y -source.y) > 0)
{
if((destination.x - source.x)<0)
{
angleVal= angleVal+M_PI_2;
}
NSLog(@"%f====%f",(destination.y -source.y),(destination.x - source.x));
}
else if ((destination.y -source.y) < 0)
{
if((destination.x - source.x)<0)
{
angleVal=angleVal+M_PI_2;
}
else{
NSLog(@"%f====%f",(destination.y -source.y),(destination.x - source.x));
angleVal= angleVal+M_PI;
}
}
else if ((destination.x - source.x) < 0)
{
if((destination.y -source.y)>=0)
{
angleVal= angleVal+M_PI;
}
else
{
NSLog(@"%f====%f",(destination.y -source.y),(destination.x - source.x));
angleVal= M_PI;
}
}
drw.transform=CGAffineTransformMakeRotation(angleVal);
[self.view addSubview:drw];
[self.view bringSubviewToFront:[self.view viewWithTag:1002]];
}`
` 该代码适用于水平或垂直轴,但是当点的角度不是 90 的倍数时,结果是相反的时间。
我错过了什么……谢谢
我已经添加了调整代码,因为箭头可以在任何方向它已经解决了很多问题,但仍然存在 45 度和 135 度的问题......
注意:- 我欢迎 Mark down 作为一个健康的批评,但请务必在评论中写下你的 markdown 原因,以便我可以改进