动画实战教程系列之一

更新:11-09 名人轶事 我要投稿 纠错 投诉

大家好,如果您还对动画实战教程系列之一不太了解,没有关系,今天就由本站为大家分享动画实战教程系列之一的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

今天我们将为爱奇艺实现一个加载动画效果。总体思路如下:

1、画一个三角形,并在其上播放两次旋转的动画;

2、画一个98%的圆环,先播放正向轨迹动画,然后在其上播放反向轨迹动画。

效果是这样

加载.gif

No code no bibi

SZPlayLoadingView.h文件

#import@interface SZPlayTriangleView : UIView

@结尾

@interface SZPlayLoadingView : UIView

- (void)显示加载中;

@end

SZPlayLoadingView.m文件

#import "SZPlayLoadingView.h"

static NSString * const kCircleAnimationName=@"circleAnimationEnd";

static NSString * const kCircleHideAnimationName=@"circleAnimationStart";

static NSString * const kTrangleAnimationName=@"kTrangleAnimationName";

静态常量CGFloat kAnimationDuration=0.6;

@interface SZPlayTriangleView()

/** 三角形层*/

@property(非原子,强)CAShapeLayer *triangleLayer;

@结尾

@实现SZPlayTriangleView

- (void)layoutSubviews {

[超级布局子视图];

[_triangleLayer removeFromSuperlayer];

_triangleLayer=nil;

[self.layer addSublayer:self.triangleLayer];

}

- (CAShapeLayer *)triangleLayer {

如果(!_triangleLayer){

//1. 创建三角形路径

CGFloat宽度=self.frame.size.width*0.65;

CGFloat width2=宽度/(sqrt(3));

CGFloat centerX=self.frame.size.width/2;

CGFloat centerY=self.frame.size.width/2;

CGPoint PointA=CGPointMake(centerX+(宽度*(2/3.0)), centerY);

CGPoint PointB=CGPointMake(PointA.x-宽度, PointA.y-宽度2);

CGPoint PointC=CGPointMake(PointB.x, PointB.y+2*width2);

UIBezierPath *path=[UIBezierPath bezierPath];

[路径moveToPoint:PointA];

[路径addLineToPoint:PointB];

[路径addLineToPoint:PointC];

[路径关闭路径];

//2. 创建图层

_triangleLayer=[CAShapeLayer 图层];

_triangleLayer.path=路径.CGPath;

_triangleLayer.fillColor=[UIColor colorWithRed:0.52f green:0.76f blue:0.07f alpha:1.00f].CGColor;

}

返回_triangleLayer;

}

@结尾

@interface SZPlayLoadingView()/** 圆形视图*/

@property(非原子,强)CAShapeLayer *circleLayer;

/** 圆形视图动画*/

@property(非原子,强)CABasicAnimation *circleLayerAnimation;

/** 圆形视图隐藏动画*/

@property(非原子,强)CABasicAnimation *circleLayerHideAnimation;

/** 三角形*/

@property(非原子,强)SZPlayTriangleView *triangleView;

/** 三角形动画*/

@property(非原子,强)CABasicAnimation *triangleAnimation;

@结尾

@实现SZPlayLoadingView

#pragma mark - 外部方法

- (void)showLoading {

[自我展示圈];

}

#pragma mark - 内部方法

- (void)showCircle {

[_circleLayer 移除所有动画];

[_triangleView 从Superview 删除];

[自我addSubview:self.triangleView];

[self.layer addSublayer:self.circleLayer];

self.circleLayer.linesStart=0;

self.circleLayer.linesEnd=0.98;

[self.circleLayer addAnimation:self.circleLayerAnimation forKey:kCircleAnimationName];

}

- (void)hideCircle {

self.circleLayer.linesStart=0.98;

[self.circleLayer addAnimation:self.circleLayerHideAnimation forKey:kCircleHideAnimationName];

}

- (void)showTriangleAmimation {

[self.triangleView.layer addAnimation:self.triangleAnimation forKey:kTrangleAnimationName];

}

#pragma mark - 动画委托

- (void)animationDidStop:(CAAnimation *)anim finish:(BOOL)flag {

if ([[anim valueForKey:@"animationName"] isEqualToString:kCircleHideAnimationName]) {

[self.triangleView.layer 移除所有动画];

[自我展示圈];

} else if ([[anim valueForKey:@"animationName"] isEqualToString:kCircleAnimationName]) {

[自我展示TriangleAmimation];

[自我隐藏圆圈];

}

}

#pragma mark - 属性

- (CAShapeLayer *)circleLayer {

如果(!_circleLayer){

_circleLayer=[CAShapeLayer 图层];

//1.设置路径

UIBezierPath *circlePath=[UIBezierPath bezierPathWithOvalInRect:self.bounds];

_circleLayer.path=circlePath.CGPath;

//2.设置颜色

_circleLayer.fillColor=[UIColorclearColor].CGColor;

_circleLayer.linesColor=[UIColor colorWithRed:0.52 green:0.76 blue:0.07 alpha:1].CGColor;

//3. 设置线宽和线帽

_circleLayer.lineWidth=1;

_circleLayer.lineCap=kCALineCapRound;

//4. 设置翻转

_circleLayer.transform=CATransform3DRotate(_circleLayer.transform, -M_PI_2, 0, 0, 1);

_circleLayer.transform=CATransform3DTranslate(_circleLayer.transform, -self.bounds.size.width, 0, 0);

}

返回_circleLayer;

}

- (CABasicAnimation *)circleLayerAnimation {

if (!_circleLayerAnimation) {

_circleLayerAnimation=[CABasicAnimationanimationWithKeyPath:@"strikeEnd"];

_circleLayerAnimation.fromValue=@(0);

_circleLayerAnimation.duration=kAnimationDuration;

[_circleLayerAnimation setValue:kCircleAnimationName forKey:@"animationName"];

_circleLayerAnimation.delegate=self;

}

返回_circleLayerAnimation;

}

- (CABasicAnimation *)circleLayerHideAnimation {

if (!_circleLayerHideAnimation) {

_circleLayerHideAnimation=[CABasicAnimationanimationWithKeyPath:@"行程开始"];

_circleLayerHideAnimation.fromValue=@(0);

_circleLayerHideAnimation.duration=kAnimationDuration;

[_circleLayerHideAnimation setValue:kCircleHideAnimationName forKey:@"animationName"];

_circleLayerHideAnimation.delegate=self;

}

返回_circleLayerHideAnimation;

}

- (SZPlayTriangleView *)triangleView {

如果(!_triangleView){

_triangleView=[SZPlayTriangleView 新];

_triangleView.frame=CGRectMake(0, 0, self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);

_triangleView.center=CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);

_triangleView.backgroundColor=[UIColor 清除颜色];

}

返回_triangleView;

}

- (CABasicAnimation *)triangleAnimation {

if (!_triangleAnimation) {

_triangleAnimation=[CABasicAnimationanimationWithKeyPath:@"transform.rotation.z"];

_triangleAnimation.toValue=@(M_PI * 2);

_triangleAnimation.duration=kAnimationDuration;

[_triangleAnimation setValue:kTrangleAnimationName forKey:@"animationName"];

}

返回_triangleAnimation;

}

动画实战教程系列之一和的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

用户评论

情字何解ヘ

终于等到动画实战了!

    有14位网友表示赞同!

墨染天下

期待学习实际操作经验~

    有11位网友表示赞同!

鹿叹

要看哪些案例啊?能分享一些吗?

    有15位网友表示赞同!

在哪跌倒こ就在哪躺下

我还没学会基本原理,这集教程适合什么水平?

    有10位网友表示赞同!

纯情小火鸡

希望这次动画设计可以学到真技能!

    有8位网友表示赞同!

喜欢梅西

三部曲第一个呢,后面还有很多精彩?

    有6位网友表示赞同!

爱到伤肺i

这个动画实战课程有难度吗?

    有18位网友表示赞同!

淡抹烟熏妆丶

一定要讲到软件操作技巧吧!

    有9位网友表示赞同!

敬情

我比较想了解动画的原理,这集会不会讲?

    有14位网友表示赞同!

景忧丶枫涩帘淞幕雨

视频教程方便学习,而且很视觉直接...

    有9位网友表示赞同!

灬一抹丶苍白

希望这次实战课程能从头开始讲解!

    有11位网友表示赞同!

十言i

终于可以动手试练一下了~

    有5位网友表示赞同!

情深至命

三部曲的每一系列都有所不同吗?

    有15位网友表示赞同!

哥帅但不是蟋蟀

感觉这个动画实战内容很实用,报名去!

    有8位网友表示赞同!

素婉纤尘

期待课程里能分享制作技巧!

    有20位网友表示赞同!

执念,爱

我准备好好跟着视频学习一遍!

    有5位网友表示赞同!

万象皆为过客

三部分的衔接会比较紧密吗?

    有20位网友表示赞同!

雁過藍天

这集动画实战会不会讲解几种常用风格?

    有19位网友表示赞同!

花花世界总是那么虚伪﹌

学习完这个课程,我能自己制作动画吗?

    有8位网友表示赞同!

一别经年

我要去看看视频内容是什么样的!

    有17位网友表示赞同!

【动画实战教程系列之一】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:揭秘婚姻生活三种模式:携手共度、勉强维持与矛盾重重 下一篇:《光辉岁月》:Beyond 经典之作背后的故事