I'm doing this to learn how to work with Core Animation animatable properties on iPhone (not to learn how to crossfade images, per se).
Reading similar questions on SO leads me to believe it can be done by animating the .contents property of the UIImageView's layer like so:
UIImage *image1 = [UIImage imageNamed:@"someImage1.png"];
UIImage *image2 = [UIImage imageNamed:@"someImage2.png"];
self.imageView.image = image1;
[self.view addSubview:self.imageView];
CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
crossFade.duration = 5.0;
self.imageView.layer.contents = image2;
[self.imageView.layer addAnimation:crossFade forKey:@"animateContents"];
Did I get a detail wrong or is this not possible.
Update: the above code produces a blank UIImageView. When I change this line:
self.imageView.layer.contents = image2.CGImage;
...I can see the image now but it does not fade in, it just appears instantly.
You were almost there.
CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
crossFade.duration = 5.0;
crossFade.fromValue = image1.CGImage;
crossFade.toValue = image2.CGImage;
[self.imageView.layer addAnimation:crossFade forKey:@"animateContents"];
Note that the animation is independent of the actual values/contents of the UIImageView. Therefore you'll need to
self.imageView.image = image2;
... to set the final result for your image.