Search code examples
iosrotationscalecgaffinetransform

CGAffineTransform scaling and rotating


I have an imageview that I am scaling and rotating via UISliders. Here is how I do so:

- (IBAction)sizeSlider:(UISlider *)sender
{
    int SCALE_MAX = 200;
    int SCALE_MIN = 10;
    CGAffineTransform transform = image.transform;
    float scale = sqrt(transform.a*transform.a + transform.c*transform.c);
    if (scale > SCALE_MAX)
        image.transform = CGAffineTransformScale(transform, SCALE_MAX/scale*sender.value, SCALE_MAX/scale*sender.value);
    else if (scale < SCALE_MIN)
        image.transform = CGAffineTransformScale(transform, SCALE_MIN/scale*sender.value, SCALE_MIN/scale*sender.value);
}

- (IBAction)angleSlider:(UISlider *)sender
{  
    CGAffineTransform t = CGAffineTransformMakeRotation(sender.value);
        image.transform = t;
}

This works, however if the imageview has been scaled from its original size then rotating the image resets it to its original size. How can I prevent this?


Solution

  • Use the similar approach of your scale in your rotation. Meaning, use:

    CGAffineTransformRotate(image.transform, theAngle);