Search code examples
iphoneobjective-ccocoa-touchcore-animation

CATransaction Not Animating


I've created a new View-based Application in XCode.

In the ViewController, the only code that I've modified looks like this:

- (void)viewDidLoad {
[super viewDidLoad];

UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
newView.backgroundColor = [UIColor redColor];
[self.view addSubview:newView];


[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:0.5f] forKey:kCATransactionAnimationDuration];

newView.layer.frame = CGRectMake(20,20,220,220);

[CATransaction commit];
}

It should create a red square that animates for half a second as soon as the application loads. The problem is that it does not animate. I can't figure out why. I created this simple project to isolate all variables, and yet it still doesn't work.

Can anyone help out or point me in the right direction of some Core-Animation reading material. I've already gone through all of Apple's stuff.


Solution

  • Your code would animate as expected if you were setting properties on a CALayer (they animate by default). For UIViews to animate, you must change their properties within a block like the following:

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0f];
    
    // Change properties here
    
    [UIView commitAnimations];
    

    CATransactions are used to group animations so that they are coordinated, or manually disable animations for a group of objects.