首先,需要知道幾個類
HMGLTransitionManager 動畫管理對象
DoorsTransition 動畫類型對象
setTransitionType 設(shè)置動畫的類型
beginTransition 設(shè)置動畫并開始運動
commitTransition 提交啟動動畫
開發(fā)前的準(zhǔn)備工作
開發(fā)工程前需要導(dǎo)入一個動畫庫:HMGLTransitions ?Github地址:GitHub - Split82/HMGLTransitions: HMGLTransitions is set of classes which can animate transition between two UIViews
注意需要導(dǎo)入2個系統(tǒng)的依賴庫:openGLES.framework QuartzCore.framework
為了之后動畫效果的演示可以導(dǎo)入2張圖片
寫代碼
首先創(chuàng)建3個對象
導(dǎo)入頭文件
創(chuàng)建一個3d的動畫效果上代碼:注意:需要把動畫變幻的對象加入到動畫管理器對象中
//創(chuàng)建動畫管理器對象
HMGLTransitionManager *manager = [HMGLTransitionManager sharedTransitionManager];
//動畫變幻對象
Switch3DTransition *sAnim = [[Switch3DTransition alloc] init];
//設(shè)置動畫方向的類型
[sAnim setTransitionType:Switch3DTransitionLeft];
//設(shè)置動畫類型
[manager setTransition:sAnim];
//設(shè)置動畫視圖的容器對象
[manager beginTransition:_parentView];
//提交動畫運行效果
[manager commitTransition];
開始動畫的時候需要將第一個圖像視圖消失,第二個圖像視圖加載到容器中舅世,若是2張圖像的格式孝赫,大小不同竖独,需要設(shè)置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;
也可以設(shè)置動畫的開門動畫:上核心代碼:
//動畫類型:開門動畫
DoorsTransition *door = [[DoorsTransition alloc] init];
[door setTransitionType:DoorsTransitionTypeOpen];
//設(shè)置動畫類型
[manager setTransition:door];
運行效果如下: