UIImageView Transform Scale

I have a UIButton that when pressed, will make a UIImageView scale slightly larger and then back to its normal size. It’s working, but I’m running into a problem where the image eventually keeps getting slightly smaller the more you press the button.

How can I change the code so that the image doesn’t get smaller as you press the button? Here’s the code I have to scale the image slightly larger and then back to normal:

  • How to resolve “Missing Info.plist key … NSPhotoLibraryUsageDescription”
  • Portrait mode only-iOS
  • YouTube live on iOS?
  • How to create global functions in Objective-C
  • Attach a PDF file to email - Swift
  • Prevent Core Data From Combining Entities into One Table
  • [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration: 0.2];
    myImage.transform = CGAffineTransformScale(myImage.transform, 1.03, 1.03);
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration: 0.2];             
    myImage.transform = CGAffineTransformScale(myImage.transform, 0.97, 0.97);
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
    

    Thanks for any help.

    3 Solutions Collect From Internet About “UIImageView Transform Scale”

    It’s math. Scaling something by 1.03 * 0.97 results in scaling factor of 0.9991 and not 1.0. Either use 1.0/1.03 as your second scaling factor or just set myImage.transform to the identity transform (assuming you are not applying other transformations to that view).

    Have you tried saving first transform?

    And then instead of using CGAffineTransformScale to shrink your UIImageView you just use your saved transform?

            CGAffineTransform firstTransform = myImage.transform;
    
            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationDuration: 0.2];
            myImage.transform = CGAffineTransformScale(myImage.transform, 1.03, 1.03);
            [UIView setAnimationDelegate:self];
            [UIView commitAnimations];
            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationDuration: 0.2];
            myImage.transform = firstTransform;
            [UIView setAnimationDelegate:self];
            [UIView commitAnimations];
    

    You are suffering from a limitation in floating point arithmetic and cumulative matrix operations. You will never be able to represent 3/100, only approximate it with values like, 0.03, 0.033, and 0.0333.

    For your problem it would be better to set the second transform to the CGAffineTransformIdentity