views:

933

answers:

1

So there seems to be an issue with animating size transformations for UIButtons. Specifically, if you have a button of type UIButtonTypeCustom, any frame size transformations happen instantly. Movement and other animations happen as normal.

Does anyone have a good fix for this? I'm guessing that it's because the custom buttons contain images, and something is going wrong when UIView calculates its transformations.

This guy seems to have found the same problem, but no workaround.

Here's an example. The image origin will move smoothly from 0.0,0.0 to 100.0,100.0 over two seconds, but the size instantly jumps to 200x200.

UIButton *tButton = [UIButton buttonWithType:UIButtonTypeCustom];
[tButton setBackgroundImage:tImage forState:UIControlStateNormal];
tButton.frame = CGRectMake(0.0, 0.0, 10.0, 10.0);

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:2.0];

tButton.frame = CGRectMake(100.0, 100.0, 200.0, 200.0);

[UIView commitAnimations];
A: 

Credit goes to davbryn for this answer but instead of redefining the frame you use:

button.transform = CGAffineTransformMakeScale(1.5,1.5);

Its not as easy as just using a new frame so you will have to play around with the it but it should get you pointed in the right direction.

Rudiger