2012-02-09 200 views
3

我已经实现了一个速度计。我有一个箭头图像。我想用手指轻轻地将它旋转0°至180°,同时我也应该给出界限。这怎么可能?速度计中的箭头旋转

这是我的代码(在UIImageView类别):

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    UITouch *touch = [touches anyObject]; 

    CGPoint currentLocation = [touch locationInView:self.superview]; 
    CGPoint pastLocation = [touch previousLocationInView:self.superview]; 

    CGPoint d1 = CGPointMake(currentLocation.x-self.superview.center.x, currentLocation.y-self.superview.center.y); 
    CGPoint d2 = CGPointMake(pastLocation.x-self.superview.center.x, pastLocation.y-self.superview.center.y); 

    CGFloat angle1 = atan2(d1.y, d1.x); 
    CGFloat angle2 = atan2(d2.y, d2.x); 

    self.transform = CGAffineTransformRotate(self.transform, angle1-angle2); 
} 

它旋转0到360度,我需要像20至160度的角度之间限制。

+0

如果你提供了一些实际的代码并获得有关该代码的反馈,而不是问这样一个普通的问题,那么你会从Stack Overflow中得到最好的结果。 – theTRON 2012-02-09 13:22:42

+1

可能的重复[http://stackoverflow.com/questions/9210346/how-to-rotate-needle-just-like-car-speedo-meter-with-boundaries-in-ios](http://stackoverflow。问题/ 9210346 /如何旋转针只是像汽车速度米与边界在IOS) – Beuj 2012-02-09 13:23:15

回答

3

找出基于触摸应用的正确仿射变换(使用trig)并应用它。

view.transform = CGAffineTransformMakeRotation(angleInRadians); 

也许你需要先翻译原点,然后再回来,让它围绕你想要的点旋转。或者,您可以制作视图,以使枢轴点位于视图的中心。

要计算角度,请查找触点与旋转点(dx,dy)的距离。

黄褐色角= DY/DX

使用

atan2(dy, dx) 

因为它通过知道哪个象限它与涉及的迹象(不要在0通作DX)。

https://developer.apple.com/library/IOs/#documentation/System/Conceptual/ManPages_iPhoneOS/man3/atan2.3.html

处理DX分别为0的情况下(它的PI/2弧度)。可能还有其他特殊情况需要处理以限制它 - 只需选择最小和最大弧度,然后在转换中使用它们之前检查它们。

编辑基于问题的更新:你已经完成了艰难的部分 - 只是看的角度,并限制其

使用MIN和MAX限制角度1和angle2(记住它的弧度,所以20/180*pi160/180*pi)。在你传递给CGAffineTransformRotate之前做这件事

+0

但我需要限制之间的角度像20至160度(它旋转0到360度) – 2012-02-09 13:47:36

+0

检查角度并使用min和max限制它(但你必须用弧度表示)'radians = degrees/180 * PI' – 2012-02-09 13:51:21

+0

我无法找到确切的解决方案:@Lou Franco,可以吗?请填写以上代码 – 2012-02-09 13:54:43