由于直接更改layer的contents显示的隐式动画切换的时候的动画持续时间没办法控制, 切换效果不尽人意,所以这里配合了CABasicAnimation实现淡入淡出的切换效果,

另外还可以使用组合动画对多种动画进行组合, 实现更复杂的动画效果, 这里仅仅只是多添加了缩放效果为示例...

效果图:

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic, weak) CALayer *imageLayer;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad]; // 初始化图层上的图片内容
UIImage *start = [UIImage imageNamed:@"开始图片"];
self.imageLayer = [CALayer layer];
self.imageLayer.frame = CGRectMake(, , / , / );
self.imageLayer.contents = (id)start.CGImage;
[self.view.layer addSublayer:self.imageLayer];
} - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self changeBg];
} - (void)changeBg
{
UIImage *end = [UIImage imageNamed:@"结束图片"];
// 隐式动画
// self.imageLayer.contents = (id)end.CGImage; /* 显式动画 */ // 图片切换动画
CABasicAnimation *imageChangeAniamtion = [CABasicAnimation animationWithKeyPath:@"contents"];
imageChangeAniamtion.fromValue = self.imageLayer.contents;
imageChangeAniamtion.toValue = (id)end.CGImage;
// imageChangeAniamtion.duration = 3.f; // 图片缩放动画
CABasicAnimation *boundsChangeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"];
boundsChangeAnimation.fromValue = [NSValue valueWithCGRect:self.imageLayer.bounds];
boundsChangeAnimation.toValue = [NSValue valueWithCGRect:CGRectMake(, , * 0.5, * 0.5)];
// boundsChangeAnimation.duration = 3.f; // 组合动画
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.animations = @[imageChangeAniamtion, boundsChangeAnimation];
// 设置了组合动画之后, 动画的持续时间在组合动画里设置, 否则将没办法完全显示所有动画
animationGroup.duration = .f; // 注意: 显式动画只是一个过程,并没有真正意义的的修改图层的内容, 需要进行手动修改
// 否则动画完毕之后会恢复到原来的样式
self.imageLayer.contents = (id)end.CGImage;
self.imageLayer.bounds = CGRectMake(, , * 0.5, * 0.5); [self.imageLayer addAnimation:animationGroup forKey:nil];
} @end

github:https://github.com/RinpeChen/changeImageWithAnimationByCALayer

用CALayer实现淡入淡出的切换图片效果的更多相关文章

  1. javascript设计模式实践之职责链--具有百叶窗切换图片效果的JQuery插件(三)

    在上一篇<javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)>里,通过采用模板方法模式完成了切换效果对象的构建编写. 接下来就是完成各效果对象的调 ...

  2. javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)

    在上一篇<javascript设计模式实践之迭代器--具有百叶窗切换图片效果的JQuery插件(一)>里,通过采用迭代器模式完成了各初始化函数的定义和调用. 接下来就要完成各个切换效果的编 ...

  3. javascript设计模式实践之迭代器--具有百叶窗切换图片效果的JQuery插件(一)

    类似于幻灯片的切换效果,有时需要在网页中完成一些图片的自动切换效果,比如广告,宣传,产品介绍之类的,那么单纯的切就没意思了,需要在切换的时候通过一些效果使得切换生动些. 比较常用之一的就是窗帘切换了. ...

  4. ListView的淡入淡出和Activity的淡入淡出补间动画效果Animation

    //=========主页面======================= package com.bw.lianxi7; import android.os.Bundle;import androi ...

  5. javascript---简介的切换图片效果。

    <!--切换图片--> <img src="img/9.gif" alt="" id="img"> <butt ...

  6. jQuery实现图片伦播效果(淡入淡出+左右切换)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. JQuery淡入淡出 banner切换特效

    附件中提供另一种实现方式 基本类似 主要的实现方法如下: var ShowAD=function(i){   showImg.eq(i).animate({opacity:1},settings.sp ...

  8. JS实现动态瀑布流及放大切换图片效果(js案例)

    整理了一下当时学js写的一些案例,再次体验了一把用原生JS实现动态瀑布流效果的乐趣,现在把它整理出来,需要的小伙伴可以参考一下. 该案例主要是用HTML+CSS控制样式,通过JS实现全局瀑布流以及点击 ...

  9. Winform PPT切换图片效果

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

随机推荐

  1. Solr4.8.0源码分析(16)之SolrCloud索引深入(3)

    Solr4.8.0源码分析(16)之SolrCloud索引深入(3) 前面两节学习了SolrCloud索引过程以及索引链的前两步,LogUpdateProcessorFactory和Distribut ...

  2. 【Hybrid App】Hybrid App开发 四大主流移平台分析

    转自http://dev.yesky.com/238/34657738.shtml Hybrid App在过去的两年中已经成为移动界的核心话题,但是作为一名Web开发者来说要如何站在移动互联网的浪潮之 ...

  3. 利用Asio搭建日志系统

    Asio(http://think-async.com)官方示例中给出了一个比较初步的日志服务,主要代码在basic_logger.hpp.logger_service.hpp.logger_serv ...

  4. cursor pin S wait on X

    cursor pin S wait on X: 这是10.2版本提出的mutex(互斥)机制用来解决library cache bin latch争夺问题引入的新事件,是否使用这种机制受到隐含参数_k ...

  5. 【转】HashMap和HashSet的区别

    原文网址:http://www.importnew.com/6931.html HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的 ...

  6. Number of Islands——LeetCode

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  7. Error on SVN checkout:SSL handshake failed

    最近遇到了一个恼火的问题,在Ubuntu上尝试用svn命令checkout一个https的repository时遇到个错误信息: svn: E175002: Unable to connect to ...

  8. 什么是MBS,ABS和CDO

    1. 都是资产证券化产品 华尔街有句名言“如果要增加未来的现金流,就把它做成证券.如果想经营风险,就把它做成证券”.从本质上来讲,MBS,ABS和 CDO都是资产证券化产品.根据美国证券交易委员会(S ...

  9. JS验证手机号码

    对于表单的验证是添加信息的时候必不可少的. 下面是基于EasyUI-validatebox拓展的对手机.座机号的验证方法. PhoneAndMobile: { validator: function ...

  10. springMVC之本地化和国际化

    spring框架的大部分都支持国际化,就像springMVC一样.DispatcherServlet使你能够动态的通过客户端的本地语言进行配置.这是通过LocaleResolver完成的.   当一个 ...