iphone - CGAffineTransformMakeRotation拉伸我的图像,我在做什么?

  显示原文与译文双语对照的内容
0 0

我有一张图显示了地图上北方的方向。 如果找到新标题,则CoreLocation会更新这里图像。 它也放置在正确的位置,我使用下面的代码:


locateMeView.transform = CGAffineTransformMakeRotation(([CoreLocationController sharedInstance].heading - 45) * M_PI/180);
CGRect frame = locateMeView.frame;
CGPoint pos = [MapClass vectorForLocation:[CoreLocationController sharedInstance].location mapCenter:curLocation zoom:curZoom];
frame.origin.x = (int)(self.view.bounds.size.width/2 + pos.x - frame.size.width/2);
frame.origin.y = (int)(self.view.bounds.size.height/2 + pos.y - frame.size.height/2);
frame.size.width = 24;
frame.size.height = 24;
locateMeView.frame = frame;

CoreLocationController是存储普通CoreLocation的更新的类。 MapClass将纬度/lng坐标转换为地图上的X/Y 坐标。 图像的位置是正确的,但旋转导致了奇怪的效果。 对于 0个 en M_PI,图像是正确的,但在这些图像之间被拉伸,好像它也围绕z 轴旋转,M_PI/2 和 3 * M_PI/2,它消失了。 谁能解释发生了什么以及我在做什么?

时间: 原作者:

0 0

我发现了错误的( 或多或少) 。 使用transform属性时,不允许( 因为任何原因) 通过更改框架更改位置,必须使用中心属性。 最后的代码是:


CGPoint pos = [MapClass vectorForLocation:[CoreLocationController sharedInstance].location mapCenter:curLocation zoom:curZoom];
locateMeView.transform = CGAffineTransformMakeRotation(([CoreLocationController sharedInstance].heading - 45) * M_PI/180);
locateMeView.center = CGPointMake(int)(self.view.bounds.size.width/2 + pos.x), (int)(self.view.bounds.size.height/2 + pos.y));

希望有同样问题的人能找到我的答案。

原作者:
0 0

另一个解决方案:

  1. 将转换设置为标识
  2. 更改框架
  3. 设置转换

在你的情况下,它应该是:


locateMeView.transform = CGAffineTransformIdentity;

CGRect frame = locateMeView.frame;
CGPoint pos = [MapClass vectorForLocation:[CoreLocationController sharedInstance].location mapCenter:curLocation zoom:curZoom];
frame.origin.x = (int)(self.view.bounds.size.width/2 + pos.x - frame.size.width/2);
frame.origin.y = (int)(self.view.bounds.size.height/2 + pos.y - frame.size.height/2);
frame.size.width = 24;
frame.size.height = 24;
locateMeView.frame = frame;

locateMeView.transform = CGAffineTransformMakeRotation(([CoreLocationController sharedInstance].heading - 45) * M_PI/180);

0 0

尝试在调整大小后设置转换? 次序与转换无关。

...