Question

I am creating an NSView, which in its drawRect method creates and adds an NSImageView as a subview.

I would like to rotate this NSImageView (circleView), or [self]. So in another method, I am trying to do that:

-(void)startAnimation {
CABasicAnimation* spinAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
spinAnimation.duration = 2;
[circleView.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
}

However, this code doesn't do anything when the method is called. Am I doing something wrong? I tried self.layer and circleView.layer but neither seem to work...

Was it helpful?

Solution

Your're just defining the animation, you're not actually calling the animation block that performs the animation.

You need to call a block defined between:

+ beginAnimations:context:
+ commitAnimations

To actually run the animation.

Edit01: My bad. I didn't pay attention to the tags and added the answer for the iPhone API.

OTHER TIPS

The answer to this issue is that the NSView/NSImageView didn't have a backing layer to do the animation with.

You set this with:

[NSView setWantsLayer:YES];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top