動(dòng)畫案例:加入購物車

  • UIView 動(dòng)畫
  • CALay 動(dòng)畫

image.png

UIView 動(dòng)畫:

UIView 動(dòng)畫:UIView的屬性動(dòng)畫 就是在一定時(shí)間內(nèi)改變其屬性值從而達(dá)到動(dòng)畫的效果

[UIView animateWithDuration:0.3 delay:0.3 options:UIViewAnimationOptionCurveEaseOut animations:^{
                [self.progressV setAlpha:0.0f];
            } completion:^(BOOL finished) {
                [self.progressV setProgress:0.0f animated:YES];
            }];

CALay 動(dòng)畫:

相關(guān)類結(jié)構(gòu)圖:
image.png

對一個(gè)view進(jìn)行core animation動(dòng)畫,本質(zhì)上是對該view的.layer進(jìn)行動(dòng)畫操縱

1.CABasicAnimation動(dòng)畫:

  • 通過設(shè)定起始點(diǎn)禀忆,終點(diǎn)塑崖,時(shí)間甜孤,動(dòng)畫會(huì)沿著你這設(shè)定點(diǎn)進(jìn)行移動(dòng)。
  • 可以實(shí)現(xiàn)如:旋轉(zhuǎn),翻轉(zhuǎn),位移,縮放,顏色變化,內(nèi)容變化等動(dòng)畫.

常用KeyPath總結(jié)

KeyPath值    說明  使用形式- swift 3.0
transform.scale 比例縮放    0.8
transform.scale.x   縮放寬的比例  0.8
transform.scale.y   縮放高的比例  0.8
transform.rotation.x    圍繞x軸旋轉(zhuǎn)  2 * M_PI
transform.rotation.y    圍繞y軸旋轉(zhuǎn)  2 * M_PI
transform.rotation.z    圍繞z軸旋轉(zhuǎn)  2 * M_PI
backgroundColor 背景顏色的變化 UIColor.red.cgColor
bounds  大小縮放永品,中心不變   NSValue(cgRect: CGRect(x: 800, y: 500, width: 90, height: 30))
position    位置(中心點(diǎn)的改變)  NSValue(cgPoint: CGPoint(x: 40, y: 240))
contents    內(nèi)容,比如UIImageView的圖片 UIImage(named: "to")?.cgImage
opacity 透明度 0.4
contentsRect.size.width 橫向拉伸縮放  0.6
contentsRect.size.height    縱向拉伸縮放  0.5

2.CAKeyframeAnimation :

關(guān)鍵幀動(dòng)畫其實(shí)通過一組動(dòng)畫類型的值(或者一個(gè)指定的路徑)和這些值對應(yīng)的時(shí)間節(jié)點(diǎn)以及各時(shí)間節(jié)點(diǎn)的過渡方式來控制顯示的動(dòng)畫。關(guān)鍵幀動(dòng)畫可以通過path屬性和values屬性來設(shè)置動(dòng)畫的關(guān)鍵幀悦施。

  • 通過path設(shè)置動(dòng)畫
    path只能控制CGPoint類型的動(dòng)畫屬性。如position去团、anchorPoint抡诞、transform.translation等
  • 通過values設(shè)置動(dòng)畫
    values指定了一組離散的關(guān)鍵幀,這些關(guān)鍵幀之間的需要通過插值來進(jìn)行過渡土陪。這些插值計(jì)算方式calculationMode設(shè)置

例子:

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:_layer.position];    
//確定拋物線的最高點(diǎn)位置  controlPoint
[path addQuadCurveToPoint:finishPoint controlPoint:CGPointMake(ScreenWidth/2 , rect.origin.y-80)];
//關(guān)鍵幀動(dòng)畫
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.path = path.CGPath;
- (void)setValuesAnimation
{
    CGPoint center = self.view.center;
    
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
    animation.keyPath = @"position";
    animation.duration = 4;
    animation.repeatCount = CGFLOAT_MAX;
    animation.delegate = self;
    
    //    計(jì)算方式1: kCAAnimationLinear 直線相連進(jìn)行插值計(jì)算
    animation.calculationMode = kCAAnimationLinear;
    animation.values = @[[NSValue valueWithCGPoint:CGPointMake(center.x-100, center.y-100)],
                         [NSValue valueWithCGPoint:CGPointMake(center.x+100, center.y-100)],
                         [NSValue valueWithCGPoint:CGPointMake(center.x+100, center.y+100)],
                         [NSValue valueWithCGPoint:CGPointMake(center.x-100, center.y+100)],
                         [NSValue valueWithCGPoint:CGPointMake(center.x-100, center.y-100)]];
    animation.keyTimes = @[@(0),@(0.25),@(0.5),@(0.75),@(1)];
    animation.timingFunctions = @[[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear],
                                  [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn],
                                  [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut],
                                  [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];    
    [self.layer addAnimation:animation forKey:@""];
    
    if (!_displayLink) {
        [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    }
}

3.CATrasition(轉(zhuǎn)場動(dòng)畫):

用于做過渡動(dòng)畫或者轉(zhuǎn)場動(dòng)畫昼汗,能夠?yàn)閷犹峁┮瞥銎聊缓鸵迫肫聊坏膭?dòng)畫效果。 其中最主要的就是 type 和 subType 這兩個(gè)屬性鬼雀。

  • 公共Type(官方的SDK其實(shí)只提供了四種過渡效果):
CA_EXTERN NSString * const kCATransitionFade;  淡出效果
CA_EXTERN NSString * const kCATransitionMoveIn; 新視圖移動(dòng)到舊視圖上
CA_EXTERN NSString * const kCATransitionPush; 新視圖推出舊視圖
CA_EXTERN NSString * const kCATransitionReveal; 移開舊視圖顯示新視圖
  • 私有 type:
NSString *const kCATransitionCube = @"cube"; 
NSString *const kCATransitionSuckEffect = @"suckEffect"; 
NSString *const kCATransitionOglFlip = @"oglFlip"; 
NSString *const kCATransitionRippleEffect = @"rippleEffect"; 
NSString *const kCATransitionPageCurl = @"pageCurl"; 
NSString *const kCATransitionPageUnCurl = @"pageUnCurl"; 
NSString *const kCATransitionCameraIrisHollowOpen = @"cameraIrisHollowOpen";
NSString *const kCATransitionCameraIrisHollowClose = @"cameraIrisHollowClose";

  • SubType: 動(dòng)畫類型的方向
CA_EXTERN NSString * const kCATransitionFromRight;
CA_EXTERN NSString * const kCATransitionFromLeft;
CA_EXTERN NSString * const kCATransitionFromTop;
CA_EXTERN NSString * const kCATransitionFromBottom;
  • 例子:
CATransition *animation = [CATransition animation];
animation.type = kCATransitionPush;//設(shè)置動(dòng)畫的類型
animation.subtype = kCATransitionFromRight; //設(shè)置動(dòng)畫的方向
animation.duration = 1.0f;
[testView.layer addAnimation:animation forKey:@"pushAnimation"];

4.CAAnimationGroup (動(dòng)畫組):

Group也就是組合的意思顷窒,就是把對這個(gè)Layer的所有動(dòng)畫都組合起來。

例子:

 CAAnimationGroup *groups = [CAAnimationGroup animation];
    groups.animations = @[animation,rotateAnimation];
    groups.duration = 2.0f;
    groups.removedOnCompletion=NO;
    groups.fillMode=kCAFillModeForwards;
    groups.delegate = self;
    [layer addAnimation:groups forKey:@"group"];

5.CASpringAnimation:
彈簧動(dòng)畫
6.加入購物車動(dòng)畫效果
見 demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末源哩,一起剝皮案震驚了整個(gè)濱河市鞋吉,隨后出現(xiàn)的幾起案子出刷,更是在濱河造成了極大的恐慌,老刑警劉巖坯辩,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馁龟,死亡現(xiàn)場離奇詭異,居然都是意外死亡漆魔,警方通過查閱死者的電腦和手機(jī)坷檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來改抡,“玉大人矢炼,你說我怎么就攤上這事“⑾耍” “怎么了句灌?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欠拾。 經(jīng)常有香客問我胰锌,道長,這世上最難降的妖魔是什么藐窄? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任资昧,我火速辦了婚禮,結(jié)果婚禮上荆忍,老公的妹妹穿的比我還像新娘格带。我一直安慰自己,他們只是感情好刹枉,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布叽唱。 她就那樣靜靜地躺著,像睡著了一般微宝。 火紅的嫁衣襯著肌膚如雪棺亭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天芥吟,我揣著相機(jī)與錄音侦铜,去河邊找鬼。 笑死钟鸵,一個(gè)胖子當(dāng)著我的面吹牛钉稍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棺耍,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼贡未,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俊卤,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤嫩挤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后消恍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岂昭,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年狠怨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了约啊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佣赖,死狀恐怖恰矩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情憎蛤,我是刑警寧澤外傅,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站俩檬,受9級(jí)特大地震影響萎胰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豆胸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一奥洼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晚胡,春花似錦、人聲如沸嚼沿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骡尽。三九已至遣妥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攀细,已是汗流浹背箫踩。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谭贪,地道東北人境钟。 一個(gè)月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像俭识,于是被迫代替她去往敵國和親慨削。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容