我正在开发指向特定位置的应用程序,我已经计算出当前坐标与特定坐标之间的角度,我的图像正在通过该差异旋转但是图像旋转是固定的意味着当我改变方向时图像不会被移动它保留修复特定位置,我希望图像应根据它所在的实际位置(我们想要到达的位置)移动,感谢下面的帮助,下面是我的代码..
-(float) angleToRadians:(float) a {
return ((a/180)*M_PI);
}
- (float) getHeadingForDirectionFromCoordinate:(CLLocationCoordinate2D)fromLoc toCoordinate:(CLLocationCoordinate2D)toLoc
{
float fLat = [self angleToRadians:fromLoc.latitude];
float fLng = [self angleToRadians:fromLoc.longitude];
float tLat = [self angleToRadians:toLoc.latitude];
float tLng = [self angleToRadians:toLoc.longitude];
float result= atan2f(sin(tLng-fLng)*cos(tLat), cos(fLat)*sin(tLat)-sin(fLat)*cos(tLat)*cos(tLng-fLng));
return RadiansToDegrees(result);
}
- (void) scanButtonTouchUpInside {
UIImage *overlayGraphic = [UIImage imageNamed:@"GFI.jpg"];
overlayGraphicView = [[UIImageView alloc] initWithImage:overlayGraphic];
overlayGraphicView.frame = CGRectMake(50, 50, 50, 80);
[self addSubview:overlayGraphicView];
float angle =[self getHeadingForDirectionFromCoordinate:currentlocation toCoordinate:pointlocation];
if(angle < 0.0)
angle += 2*M_PI;
overlayGraphicView.transform=CGAffineTransformMakeRotation(angle);
}
答案 0 :(得分:0)
根据旋转图像的方法的名称判断:scanButtonTouchUpInside,我猜测只有当用户点击按钮时才会调用它。如果只调用一次,我希望图像只旋转一次,然后保持固定。为了保持图像旋转,您需要将代码放在重复调用的地方。一种(便宜的黑客)测试方法是将此行添加到- (void)scanButtonTouchUpInside
方法的末尾:
[self performSelector:@selector(scanButtonTouchUpInside) withObject:nil afterDelay:0.25f];
这将使方法重复调用fire。有一点需要注意:似乎你的旋转角度的计算取决于一个名为currentLocation
的变量。只有在适当更新currentLocation
时,此解决方案才有效。
修改强> 只是想一想,您当前正在根据设备的位置和目的地的位置计算旋转角度。你根本没有考虑罗盘轴承。这是故意的吗?使用这种方法,除非设备实际移动,否则您的角度永远不会改变。方向的任何改变都将被忽略。