2011-07-01 39 views
0

我在XCode控制UISlider的那一刻卡住了。我在Interface Builder中製作了一個水平滑塊,並設法在xcode中對控件進行編碼。現在我只是不確定如何編寫邏輯。如果用戶將筆尖向左滑動,我希望它能夠逆時針旋轉我的圖像,並且如果用戶將它向右滑動,請順時針旋轉圖像。滑塊我已經設置的使用UISlider Xcode的邏輯

最小值是0並且最大值是100。初始值爲50

爲了轉化我使用CGAffineTransformMakeRotation(myAngle)。我已經設置myAngle浮動。至於條件,這裏有一段代碼:

mySlider.value = myAngle; // This is for CGAffine 

if(myAngle < 50) { 
    myAngle -= 0.1; 
} 

if(myAngle > 50) { 
    myAngle += 0.1; 
} 

當我滑動筆尖時,它只逆時針旋轉。我可以使用什麼樣的最佳邏輯?希望有人能幫忙。謝謝。

-Hakimo

回答

0

注意,Doc說有關angle如,

角度,以弧度爲單位,通過該該矩陣旋轉座標系的軸。在iOS中,正值指定逆時針旋轉,負值指定順時針旋轉。在Mac OS X中,正值指定順時針旋轉,負值指定逆時針旋轉。

我覺得像下面應該工作。但我不確定。 (考慮到minimumValue是0)。

float middleValue = slider.maximumValue/2; 
float value = middleValue - slider.value; 
float degrees = (middleValue/180) * value; 
float radians = degrees * (3.14/180); 
+0

嗨EmptyStack,感謝您的答覆。我一直在測試你所展示的想法。我認爲我對弧度和角度沒有問題。當我將滑塊向左移動時,我可以逆時針旋轉圖像,但當我將滑塊向右移動時,它不會順時針移動。我錯過了如何編碼的邏輯,如果負值,逆時針,如果正值,順時針。我知道它在iOS中有所不同,但我無法理解將其旋轉到2個方向的邏輯。再次感謝 - Hakimo – hakimo

0

如果你想在滑塊上的固定位置對應於旋轉一定角度,那麼你可以做這樣的事情:

float degreesToRadians = M_PI/180.0; 
CGFloat angle = (mySlider.value - 50) * degreesToRadians; 
myView.transform = CGAffineTransformMakeRotation(angle); 

在另一方面,如果想更復雜行爲,例如除了被拖動之外,滑塊捕捉到中間,拖動它的距離決定視圖旋轉的速度,然後我會建議使用計時器。設置一個NSTimer調用一個給定的選擇,並且在選擇做這樣的事情:

- (void)timerFired:(NSTimer *)aTimer { 
    CGFloat angleDelta = (mySlider.value - 50)/500; 
    // I'll assume myAngle is an instance variable. 
    myAngle += angleDelta; 
    myView.transform = CGAffineTransformMakeRotation(myAngle); 
} 

而且別的地方,你需要寫設置mySlider.value = 50的方法,當用戶停止拖動它,你可以通過做在滑塊上添加UIControlEventTouchUpInside和... Outside的目標/動作。

如果你願意,你可以旋轉顯示,通過使用每次設置的轉換時間UIView動畫,使用動畫持續時間等於NSTimer間隔非常流暢。如果你這樣做,那麼我實際上會建議使用動畫回調代替計時器方法,以避免兩個事件之間可能出現交叉。