Frederick C. Lee
Frederick C. Lee

Reputation: 9493

How to I rotate a UIView a fix +/- angle?

I want to use a UISlider to rotate +/- angles from 0 to 180 degrees (pi). My problem is that the rectangle rotates either before 0 or beyond 180.
What I need is to essentially map to relative UISlider button position with the angle.

Here's the code, with the UIView.layer's anchor at one end (as in a dial):

- (IBAction)sliderAction:(UISlider *)sender {
    static float datum = 0;
    if (sender.value > 0 && sender.value < 10) {
        float myValue = 0;
        if (datum < sender.value) {
            myValue = +0.1;
        } else {
            myValue = -0.1;
        }
        _gageStickView.transform = CGAffineTransformRotate(_gageStickView.transform, myValue);
        datum = sender.value;
    }

This rotates it, but I don't have adequate control over it.

Question: How can I map the the UISlider's position with the angle of the UIView?
That is, left-slider at 0 deg., mid-sider at 90deg and right-slider at 180 degs; and in-between.

Upvotes: 1

Views: 961

Answers (1)

fguchelaar
fguchelaar

Reputation: 4899

Like @Larme says, you need to convert degrees to radians.

- (IBAction)sliderValueChanged:(UISlider *)sender {

    CGFloat degrees = (sender.value / sender.maximumValue) * 180;
    CGFloat radians = degrees * M_PI / 180;

    self.label.transform  = CGAffineTransformMakeRotation(radians);    
}

This code isn't hardwired to a value of 10, but just get's the 'percentage', based on the maximum value of the slider.

Upvotes: 2

Related Questions