#import " ViewController.h " @interface ViewController () @property (nonatomic,strong)CALayer *imageLayer; @end @implementation ViewController - ( void)viewDidLoad { [super viewDidLoad]; UIImage *image1 = [UIImage imageNamed: @" test1.jpg "]; // 可以显示图片类容,layer是view的载体 // self.view.layer.contents = (__bridge id)(image.CGImage); // 创建出图片layer self.imageLayer = [CALayer layer]; self.imageLayer.frame = self.view.bounds; [self.view.layer addSublayer:self.imageLayer]; self.imageLayer.contents = (__bridge id)(image1.CGImage); [self performSelector:@selector(imageAnimation) withObject:nil afterDelay: 3]; } - ( void)imageAnimation { // 隐式动画 UIImage *image2 = [UIImage imageNamed: @" test2.jpg "]; // self.imageLayer.contents = (__bridge id)(image2.CGImage); CABasicAnimation *contentsAnimation = [CABasicAnimation animationWithKeyPath: @" contens "]; contentsAnimation.fromValue = self.imageLayer.contents; // 原始图片 contentsAnimation.toValue = (__bridge id)(image2.CGImage); // 切换后图片 contentsAnimation.duration = 3.f; CABasicAnimation *boundsAnimation = [CABasicAnimation animationWithKeyPath: @" bounds "]; boundsAnimation.fromValue = [NSValue valueWithCGRect:self.imageLayer.bounds]; boundsAnimation.toValue = [NSValue valueWithCGRect:CGRectMake( 10, 100, 200, 200)]; boundsAnimation.duration = 3.f; CAAnimationGroup *group = [CAAnimationGroup animation]; group.animations = @[contentsAnimation,boundsAnimation]; group.duration = 3.f; // 设置layer动画结束后的值否则会回复东湖钱的状态 self.imageLayer.contents = (__bridge id)(image2.CGImage); self.imageLayer.bounds = CGRectMake( 10, 100, 200, 200); [self.imageLayer addAnimation:group forKey:nil]; }