2010-03-19 124 views
5

這可能聽起來很有趣,但我花了數小時試圖重新使用UIView和一些三角現實旋轉的旋鈕。我達到了目標,但現在我無法弄清楚如何知道旋鈕是左旋還是右旋。數學是最相關的部分是在這裏:得到UIView的旋轉方向touchesMoved

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

    float dx = pt.x - iv.center.x; 
    float dy = pt.y - iv.center.y; 
    float ang = atan2(dy,dx); 

    //do the rotation 
    if (deltaAngle == 0.0) { 
     deltaAngle = ang; 
     initialTransform = iv.transform; 
    }else 
    { 
     float angleDif = deltaAngle - ang; 
     CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif); 
     iv.transform = newTrans; 
     currentValue = [self goodDegrees:radiansToDegrees(angleDif)]; 
    } 
} 

理想情況下,我可以利用一個數值來告訴我,如果旋轉是正還是負。

回答

3

如果您的旋鈕的中心點是您用於旋鈕的圖像的中心,那麼您應該能夠檢測到觸摸是從中心的左側/右側開始並向上/向下移動。如果觸摸從左邊開始並向下移動,則向左旋轉。反之亦然,在中心的另一邊開始觸摸。您可以通過在touchesDidMove方法中放置數組中的連續x座標並進行簡單比較來檢測觸摸是向上還是向下移動。

0

謝謝卸妝。這接近我所需要的,但最終,由於旋鈕對象將事件傳遞給控制器​​類,我需要一種方法來測量旋轉的值...即:在CClockWise中,340 *爲94%。無論如何,我結束瞭解決這個使用上面的方法,並將currentValue傳遞給一個委託。然後委託將採取該方法,並用它自己的私人浮動,比較,如果該值大於收到的最後的值更高或更低:

//代表使用專用值從去年回電 的#pragma標誌UIKnobViewDelegate測量(void)dialValue :(浮點)值 if(lastValue == 0.00){ lastValue = lastValue; } if(value

從那裏,我們的控制器可以做任何它喜歡的事情