CGAffineTransformMakeRotation效果不佳

时间:2012-03-13 00:47:42

标签: objective-c ios rotation cgaffinetransform

我有一个游戏,你有“斑点”和“连接器”。

我创建了一个连接两个“斑点”的UIImageView ...但正如你所看到的(如果图片有效),当斑点几乎在彼此之上时,就像在左边一样,它不起作用。这是我的代码......我想知道如何在这种情况下使旋转更准确。

UIImageView *connector = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"RedConnector.png"]];
        connector.contentMode = UIViewContentModeScaleToFill;
        connector.hidden = NO;
        connector.alpha = 1;

        connector.frame = CGRectMake(0, 0, [self DistanceBetweenPoints:speck1.center :speck2.center], 7);
        connector.center = CGPointMake((speck1.center.x + speck2.center.x)/2, (speck1.center.y + speck2.center.y)/2);
//This is where the prob is:
        connector.transform = CGAffineTransformMakeRotation(tanh((speck2.center.y - speck1.center.y)/(speck2.center.x - speck1.center.x)) );
        [Connectors addObject:connector];
        [self.view addSubview:connector];

“DistanceBetweenPoints”不是问题。这很好。另外,我知道中心和框架有点多余 - 我稍后会解决这个问题。第三,我确保两个斑点永远不会直接相互叠加(永远不会除以零)。最后,我仍然希望这些是UIIMAGEVIEWS !!因此,我可以更改图像并为它们设置动画,使其看起来像是从斑点到斑点的电流。

如果有人能告诉我如何使旋转更准确,我们将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:5)

您应该使用atan2(y,x),而不是tanh(y/x)。也就是说,你想要反正切,而不是双曲正切。