首先,需要知道几个类HMGLTransitionManager 动画管理对象
DoorsTransition 动画类型对象
setTransitionType 设置动画的类型
beginTransition 设置动画并开始运动
commitTransition 提交启动动画
开发前的准备工作开发工程前需要导入一个动画库:HMGLTransitionsGithub地址:GitHub - Split82/HMGLTransitions: HMGLTransitions is set of classes which can animate transition between two UIViews
注意需要导入2个系统的依赖库:openGLES.framework QuartzCore.framework
为了之后动画效果的演示可以导入2张图片
写代码首先创建3个对象
文章图片
文章图片
导入头文件
文章图片
创建一个3d的动画效果上代码:注意:需要把动画变幻的对象加入到动画管理器对象中
//创建动画管理器对象
HMGLTransitionManager *manager = [HMGLTransitionManager sharedTransitionManager];
//动画变幻对象
Switch3DTransition *sAnim = [[Switch3DTransition alloc] init];
【高级动画】//设置动画方向的类型
[sAnim setTransitionType:Switch3DTransitionLeft];
//设置动画类型
[manager setTransition:sAnim];
//设置动画视图的容器对象
[manager beginTransition:_parentView];
//提交动画运行效果
[manager commitTransition];
开始动画的时候需要将第一个图像视图消失,第二个图像视图加载到容器中,若是2张图像的格式,大小不同,需要设置2张图片的frame相同
//让第一个图像视图消失
[_imageView01 removeFromSuperview];
//让第二张图片加载到容器中
_imageView02.frame = _imageView01.frame;
[_parentView addSubview:_imageView02];
用一个bool变量对图片进行切换
static BOOL isFirst = YES;
if (isFirst) {
//让第一个图像视图消失
[_imageView01 removeFromSuperview];
_imageView02.frame = _imageView01.frame;
[_parentView addSubview:_imageView02];
}else{
//让第一个图像视图消失
[_imageView02 removeFromSuperview];
_imageView01.frame = _imageView01.frame;
[_parentView addSubview:_imageView01];
}
isFirst = !isFirst;
也可以设置动画的开门动画:上核心代码:
//动画类型:开门动画
DoorsTransition *door = [[DoorsTransition alloc] init];
[door setTransitionType:DoorsTransitionTypeOpen];
//设置动画类型
[manager setTransition:door];
运行效果如下:
动画