Если вы хотите, чтобы фиксированная позиция на ползунке соответствовала фиксированному углу поворота, то вы можете сделать что-то вроде этого:
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
.Если вы сделаете это, то я бы фактически предложил использовать обратный вызов анимации вместо метода таймера, чтобы избежать любого возможного пересечения между двумя событиями.