ios (一) :翻轉(zhuǎn)動畫

項(xiàng)目的任務(wù),需要實(shí)現(xiàn)一個類似于下圖的翻轉(zhuǎn)動畫,圖片在翻轉(zhuǎn)的同時,還要進(jìn)行改變。

目標(biāo)動畫

最開始,直接使用UIView的動畫。

代碼很簡單:

- (void)viewAnimation {

[UIView transitionWithView:_imageView duration:2*actionSeconds options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{

if (_imageView.tag == 101) {

_imageView.image = [UIImage imageNamed:@"logo"];

_imageView.tag = 102;

} else {

_imageView.image = [UIImage imageNamed:@"icon"];

_imageView.tag = 101;

}

}completion:^(BOOL finished) {

[self viewAnimation];

}];

}

但是,這樣實(shí)現(xiàn)的動畫,圖片在翻轉(zhuǎn)的時候,背景會變暗。


view動畫

這是因?yàn)椋诜D(zhuǎn)的時候,imageView的alpha值會變化。

為了圖片背景不變暗,所以決定使用layer層的動畫。

代碼如下:

- (void)simpleLyerRotation

{

CABasicAnimation* basicAnimation;

basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];

basicAnimation.toValue = [NSNumber numberWithFloat: M_PI ];

basicAnimation.duration = 1.2*actionSeconds;

basicAnimation.cumulative = NO;

basicAnimation.repeatCount = 1;

basicAnimation.fillMode = kCAFillModeForwards;

basicAnimation.removedOnCompletion = NO;

basicAnimation.delegate = self;

[_imageView.layer addAnimation:basicAnimation forKey:@"rotationAnimation"];

[self performSelector:@selector(changeImg) withObject:nil afterDelay:0.6 * actionSeconds];

}

- (void)changeImg

{

if (_imageView.tag == 101) {

_imageView.image = [UIImage imageNamed:@"logo"];

_imageView.tag = 102;

} else {

_imageView.image = [UIImage imageNamed:@"icon"];

_imageView.tag = 101;

}

}

但是,效果有問題,翻轉(zhuǎn)的時候,會轉(zhuǎn)到反面去。


簡單layer動畫

仔細(xì)分析之后,我發(fā)現(xiàn),需要達(dá)到的功能是:圖片先順著旋轉(zhuǎn)90°,接著再逆著旋轉(zhuǎn)90°。這樣,就不會顯示反著的圖片。

這樣的話,就需要一個連續(xù)的動畫效果。

使用CABasicAnimation,我無法實(shí)現(xiàn)這樣的功能。后來,發(fā)現(xiàn)可以使用CAKeyframeAnimation,來創(chuàng)建這樣的動畫效果。

代碼如下:

- (void)layerRotation ?{

CAKeyframeAnimation *keyAnimation = [CAKeyframeAnimation animation];

// 旋轉(zhuǎn)角度, 其中的value表示圖像旋轉(zhuǎn)的最終位置

keyAnimation.values = [NSArray arrayWithObjects:

[NSValue valueWithCATransform3D:CATransform3DMakeRotation(0, 0,1,0)],

[NSValue valueWithCATransform3D:CATransform3DMakeRotation((M_PI/2), 0,1,0)],

[NSValue valueWithCATransform3D:CATransform3DMakeRotation(0, 0,1,0)],

nil];

keyAnimation.cumulative = NO;

keyAnimation.duration = 1.2 * actionSeconds;

keyAnimation.repeatCount = 1;

keyAnimation.removedOnCompletion = NO;

keyAnimation.delegate = self;

[_imageView.layer addAnimation:keyAnimation forKey:@"transform"];

[self performSelector:@selector(changeImg) withObject:nil afterDelay:0.6 * actionSeconds];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,688評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,261評論 5 13
  • Core Animation Core Animation,中文翻譯為核心動畫,它是一組非常強(qiáng)大的動畫處理API,...
    45b645c5912e閱讀 3,153評論 0 21
  • 顯式動畫 顯式動畫,它能夠?qū)σ恍傩宰鲋付ǖ淖远x動畫,或者創(chuàng)建非線性動畫,比如沿著任意一條曲線移動。 屬性動畫 ...
    清風(fēng)沐沐閱讀 2,091評論 1 5
  • 在iOS實(shí)際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉(zhuǎn)場動畫。 1.UIView...
    請叫我周小帥閱讀 3,313評論 1 23

友情鏈接更多精彩內(nèi)容