2012-02-09 202 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