Skip to content

Commit c23f2f2

Browse files
committed
增加动画类型
增加动画类型
1 parent 2fa15bb commit c23f2f2

21 files changed

+422
-28
lines changed

Demo/.DS_Store

6 KB
Binary file not shown.

Demo/SPActivityIndicatorView.xcodeproj/project.pbxproj

+32-2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@
5555
52AF61202195917400232132 /* SPActivityIndicatorBallPulseSyncAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 52AF60F92195917400232132 /* SPActivityIndicatorBallPulseSyncAnimation.m */; };
5656
52AF61212195917400232132 /* SPActivityIndicatorNineDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 52AF60FA2195917400232132 /* SPActivityIndicatorNineDotsAnimation.m */; };
5757
52AF6124219591B400232132 /* SPActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 52AF6123219591B400232132 /* SPActivityIndicatorView.m */; };
58+
52F9551B21A24DA700B2639C /* SPActivityIndicatorThreeDotsFadeAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F9551A21A24DA700B2639C /* SPActivityIndicatorThreeDotsFadeAnimation.m */; };
59+
52F9551E21A27D2600B2639C /* SPActivityIndicatorBallLoopScaleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F9551D21A27D2600B2639C /* SPActivityIndicatorBallLoopScaleAnimation.m */; };
60+
52F9552121A280DF00B2639C /* SPActivityIndicatorLineJumpUpAndDownAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F9552021A280DF00B2639C /* SPActivityIndicatorLineJumpUpAndDownAnimation.m */; };
61+
52F9552421A28A4500B2639C /* SPActivityIndicatorRippleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F9552321A28A4500B2639C /* SPActivityIndicatorRippleAnimation.m */; };
62+
52F9552721A2A46300B2639C /* SPActivityIndicator3DotsFadeAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F9552621A2A46300B2639C /* SPActivityIndicator3DotsFadeAnimation.m */; };
5863
/* End PBXBuildFile section */
5964

6065
/* Begin PBXContainerItemProxy section */
@@ -172,6 +177,16 @@
172177
52AF6122219591B300232132 /* SPActivityIndicatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPActivityIndicatorView.h; sourceTree = "<group>"; };
173178
52AF6123219591B400232132 /* SPActivityIndicatorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPActivityIndicatorView.m; sourceTree = "<group>"; };
174179
52AF6125219592C400232132 /* SPActivityIndicatorAnimationProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPActivityIndicatorAnimationProtocol.h; sourceTree = "<group>"; };
180+
52F9551921A24DA700B2639C /* SPActivityIndicatorThreeDotsFadeAnimation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPActivityIndicatorThreeDotsFadeAnimation.h; sourceTree = "<group>"; };
181+
52F9551A21A24DA700B2639C /* SPActivityIndicatorThreeDotsFadeAnimation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SPActivityIndicatorThreeDotsFadeAnimation.m; sourceTree = "<group>"; };
182+
52F9551C21A27D2600B2639C /* SPActivityIndicatorBallLoopScaleAnimation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPActivityIndicatorBallLoopScaleAnimation.h; sourceTree = "<group>"; };
183+
52F9551D21A27D2600B2639C /* SPActivityIndicatorBallLoopScaleAnimation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SPActivityIndicatorBallLoopScaleAnimation.m; sourceTree = "<group>"; };
184+
52F9551F21A280DF00B2639C /* SPActivityIndicatorLineJumpUpAndDownAnimation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPActivityIndicatorLineJumpUpAndDownAnimation.h; sourceTree = "<group>"; };
185+
52F9552021A280DF00B2639C /* SPActivityIndicatorLineJumpUpAndDownAnimation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SPActivityIndicatorLineJumpUpAndDownAnimation.m; sourceTree = "<group>"; };
186+
52F9552221A28A4500B2639C /* SPActivityIndicatorRippleAnimation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPActivityIndicatorRippleAnimation.h; sourceTree = "<group>"; };
187+
52F9552321A28A4500B2639C /* SPActivityIndicatorRippleAnimation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SPActivityIndicatorRippleAnimation.m; sourceTree = "<group>"; };
188+
52F9552521A2A46300B2639C /* SPActivityIndicator3DotsFadeAnimation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPActivityIndicator3DotsFadeAnimation.h; sourceTree = "<group>"; };
189+
52F9552621A2A46300B2639C /* SPActivityIndicator3DotsFadeAnimation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SPActivityIndicator3DotsFadeAnimation.m; sourceTree = "<group>"; };
175190
/* End PBXFileReference section */
176191

177192
/* Begin PBXFrameworksBuildPhase section */
@@ -260,10 +275,12 @@
260275
52AF60AC2195917300232132 /* Animations */ = {
261276
isa = PBXGroup;
262277
children = (
263-
52AF60D52195917300232132 /* SPActivityIndicator3DotsExchangePositionAnimation.h */,
264-
52AF60B62195917300232132 /* SPActivityIndicator3DotsExchangePositionAnimation.m */,
265278
52AF60F12195917400232132 /* SPActivityIndicatorAnimation.h */,
266279
52AF60D22195917300232132 /* SPActivityIndicatorAnimation.m */,
280+
52AF60D52195917300232132 /* SPActivityIndicator3DotsExchangePositionAnimation.h */,
281+
52AF60B62195917300232132 /* SPActivityIndicator3DotsExchangePositionAnimation.m */,
282+
52F9552521A2A46300B2639C /* SPActivityIndicator3DotsFadeAnimation.h */,
283+
52F9552621A2A46300B2639C /* SPActivityIndicator3DotsFadeAnimation.m */,
267284
52AF60B42195917300232132 /* SPActivityIndicatorBallBeatAnimation.h */,
268285
52AF60D72195917300232132 /* SPActivityIndicatorBallBeatAnimation.m */,
269286
52AF60DB2195917300232132 /* SPActivityIndicatorBallClipRotateAnimation.h */,
@@ -294,6 +311,8 @@
294311
52AF60ED2195917400232132 /* SPActivityIndicatorBallScaleRippleMultipleAnimation.m */,
295312
52AF60F62195917400232132 /* SPActivityIndicatorBallSpinFadeLoader.h */,
296313
52AF60CD2195917300232132 /* SPActivityIndicatorBallSpinFadeLoader.m */,
314+
52F9551C21A27D2600B2639C /* SPActivityIndicatorBallLoopScaleAnimation.h */,
315+
52F9551D21A27D2600B2639C /* SPActivityIndicatorBallLoopScaleAnimation.m */,
297316
52AF60BE2195917300232132 /* SPActivityIndicatorBallTrianglePathAnimation.h */,
298317
52AF60DF2195917300232132 /* SPActivityIndicatorBallTrianglePathAnimation.m */,
299318
52AF60D02195917300232132 /* SPActivityIndicatorBallZigZagAnimation.h */,
@@ -304,6 +323,8 @@
304323
52AF60CF2195917300232132 /* SPActivityIndicatorCookieTerminatorAnimation.m */,
305324
52AF60BD2195917300232132 /* SPActivityIndicatorDoubleBounceAnimation.h */,
306325
52AF60E12195917300232132 /* SPActivityIndicatorDoubleBounceAnimation.m */,
326+
52F9552221A28A4500B2639C /* SPActivityIndicatorRippleAnimation.h */,
327+
52F9552321A28A4500B2639C /* SPActivityIndicatorRippleAnimation.m */,
307328
52AF60CA2195917300232132 /* SPActivityIndicatorFiveDotsAnimation.h */,
308329
52AF60F82195917400232132 /* SPActivityIndicatorFiveDotsAnimation.m */,
309330
52AF60DE2195917300232132 /* SPActivityIndicatorLineScaleAnimation.h */,
@@ -314,6 +335,8 @@
314335
52AF60AD2195917300232132 /* SPActivityIndicatorLineScalePulseOutAnimation.m */,
315336
52AF60B82195917300232132 /* SPActivityIndicatorLineScalePulseOutRapidAnimation.h */,
316337
52AF60E42195917400232132 /* SPActivityIndicatorLineScalePulseOutRapidAnimation.m */,
338+
52F9551F21A280DF00B2639C /* SPActivityIndicatorLineJumpUpAndDownAnimation.h */,
339+
52F9552021A280DF00B2639C /* SPActivityIndicatorLineJumpUpAndDownAnimation.m */,
317340
52AF60F72195917400232132 /* SPActivityIndicatorLoadingFailAnimation.h */,
318341
52AF60CC2195917300232132 /* SPActivityIndicatorLoadingFailAnimation.m */,
319342
52AF60BC2195917300232132 /* SPActivityIndicatorLoadingSuccessAnimation.h */,
@@ -338,6 +361,8 @@
338361
52AF60D12195917300232132 /* SPActivityIndicatorTripleRingsAnimation.m */,
339362
52AF60AE2195917300232132 /* SPActivityIndicatorTwoDotsAnimation.h */,
340363
52AF60DC2195917300232132 /* SPActivityIndicatorTwoDotsAnimation.m */,
364+
52F9551921A24DA700B2639C /* SPActivityIndicatorThreeDotsFadeAnimation.h */,
365+
52F9551A21A24DA700B2639C /* SPActivityIndicatorThreeDotsFadeAnimation.m */,
341366
);
342367
path = Animations;
343368
sourceTree = "<group>";
@@ -480,12 +505,16 @@
480505
52AF610E2195917400232132 /* SPActivityIndicatorRotaingCurveEaseOutAnimation.m in Sources */,
481506
52AF61012195917400232132 /* SPActivityIndicator3DotsExchangePositionAnimation.m in Sources */,
482507
52AF610D2195917400232132 /* SPActivityIndicatorAnimation.m in Sources */,
508+
52F9552421A28A4500B2639C /* SPActivityIndicatorRippleAnimation.m in Sources */,
483509
52AF61202195917400232132 /* SPActivityIndicatorBallPulseSyncAnimation.m in Sources */,
484510
52AF61032195917400232132 /* SPActivityIndicatorLineScaleAnimation.m in Sources */,
485511
52AF61042195917400232132 /* SPActivityIndicatorTriplePulseAnimation.m in Sources */,
512+
52F9552721A2A46300B2639C /* SPActivityIndicator3DotsFadeAnimation.m in Sources */,
486513
52AF611F2195917400232132 /* SPActivityIndicatorFiveDotsAnimation.m in Sources */,
514+
52F9551E21A27D2600B2639C /* SPActivityIndicatorBallLoopScaleAnimation.m in Sources */,
487515
52AF61182195917400232132 /* SPActivityIndicatorBallZigZagDeflectAnimation.m in Sources */,
488516
52AF60FF2195917400232132 /* SPActivityIndicatorBallScaleAnimation.m in Sources */,
517+
52F9552121A280DF00B2639C /* SPActivityIndicatorLineJumpUpAndDownAnimation.m in Sources */,
489518
52AF61002195917400232132 /* SPActivityIndicatorBallPulseAnimation.m in Sources */,
490519
52AF60FB2195917400232132 /* SPActivityIndicatorLineScalePulseOutAnimation.m in Sources */,
491520
52AF610B2195917400232132 /* SPActivityIndicatorCookieTerminatorAnimation.m in Sources */,
@@ -501,6 +530,7 @@
501530
52AF61142195917400232132 /* SPActivityIndicatorDoubleBounceAnimation.m in Sources */,
502531
52AF61052195917400232132 /* SPActivityIndicatorBallScaleRippleAnimation.m in Sources */,
503532
52AF607C2195911A00232132 /* AppDelegate.m in Sources */,
533+
52F9551B21A24DA700B2639C /* SPActivityIndicatorThreeDotsFadeAnimation.m in Sources */,
504534
52AF610A2195917400232132 /* SPActivityIndicatorBallGridPulseAnimation.m in Sources */,
505535
52AF61212195917400232132 /* SPActivityIndicatorNineDotsAnimation.m in Sources */,
506536
52AF6124219591B400232132 /* SPActivityIndicatorView.m in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Bucket
3+
type = "1"
4+
version = "2.0">
5+
</Bucket>

Demo/SPActivityIndicatorView/Animations/SPActivityIndicator3DotsExchangePositionAnimation.m

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ - (void)setupAnimationInLayer:(CALayer *)layer withSize:(CGSize)size tintColor:(
3333
CALayer *circle2 = [layer.sublayers objectAtIndex:1];
3434
CALayer *circle3 = [layer.sublayers objectAtIndex:2];
3535
UIColor *circle1Color = [tintColor colorWithAlphaComponent:1];
36-
UIColor *circle2Color = [tintColor colorWithAlphaComponent:2.0/3.0];
37-
UIColor *circle3Color = [tintColor colorWithAlphaComponent:1.0/3.0];
36+
UIColor *circle2Color = [tintColor colorWithAlphaComponent:0.6];
37+
UIColor *circle3Color = [tintColor colorWithAlphaComponent:0.3];
3838

39-
CGPoint otherRoundCenter1 = CGPointMake(oX + circleSize + circlePadding*0.5, layer.bounds.size.height*0.5);
39+
CGPoint otherRoundCenter1 = CGPointMake(oX+circleSize+circlePadding*0.5, layer.bounds.size.height*0.5);
4040
CGPoint otherRoundCenter2 = CGPointMake(oX+circleSize*2+circlePadding+circlePadding*0.5, layer.bounds.size.height*0.5);
4141

4242
//圆1的路径
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//
2+
// SPActivityIndicator3DotsFadeAnimation.h
3+
// SPActivityIndicatorView
4+
//
5+
// Created by 乐升平 on 2018/11/19.
6+
// Copyright © 2018 乐升平. All rights reserved.
7+
// 这个动画类似于微信王者荣耀中网络卡顿时的加载动画
8+
9+
#import "SPActivityIndicatorAnimation.h"
10+
11+
NS_ASSUME_NONNULL_BEGIN
12+
13+
@interface SPActivityIndicator3DotsFadeAnimation : SPActivityIndicatorAnimation
14+
15+
@end
16+
17+
NS_ASSUME_NONNULL_END
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//
2+
// SPActivityIndicator3DotsFadeAnimation.m
3+
// SPActivityIndicatorView
4+
//
5+
// Created by 乐升平 on 2018/11/19.
6+
// Copyright © 2018 乐升平. All rights reserved.
7+
//
8+
9+
#import "SPActivityIndicator3DotsFadeAnimation.h"
10+
11+
@implementation SPActivityIndicator3DotsFadeAnimation
12+
- (void)setupAnimationInLayer:(CALayer *)layer withSize:(CGSize)size tintColor:(UIColor *)tintColor {
13+
CGFloat duration = 0.5f;
14+
CGFloat firstBeginTime = CACurrentMediaTime(); // 不能写0,写0每次跑程序都会有些许的误差
15+
NSArray *beginTimes = @[@(firstBeginTime), @(firstBeginTime+0.25), @(firstBeginTime+0.5)];
16+
CGFloat circleSpacing = 5.0f;
17+
CGFloat circleSize = (size.width - circleSpacing * 2) / 3;
18+
CGFloat x = (layer.bounds.size.width - size.width) / 2;
19+
CGFloat y = (layer.bounds.size.height - circleSize) / 2;
20+
21+
// Opacity animation
22+
CAKeyframeAnimation *opacityAnimation = [self createKeyframeAnimationWithKeyPath:@"opacity"];
23+
opacityAnimation.duration = duration;
24+
opacityAnimation.values = @[@1.0f,@0.0f];
25+
opacityAnimation.repeatCount = HUGE_VALF;
26+
opacityAnimation.autoreverses = YES;
27+
opacityAnimation.removedOnCompletion = NO;
28+
opacityAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
29+
30+
// Draw circles
31+
for (int i = 0; i < 3; i++) {
32+
CAShapeLayer *circle = [CAShapeLayer layer];
33+
UIBezierPath *circlePath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, circleSize, circleSize) cornerRadius:circleSize / 2];
34+
opacityAnimation.beginTime = [beginTimes[i] floatValue];
35+
circle.fillColor = tintColor.CGColor;
36+
circle.path = circlePath.CGPath;
37+
[circle addAnimation:opacityAnimation forKey:@"animation"];
38+
circle.frame = CGRectMake(x + circleSize * i + circleSpacing * i, y, circleSize, circleSize);
39+
[layer addSublayer:circle];
40+
}
41+
}
42+
@end

Demo/SPActivityIndicatorView/Animations/SPActivityIndicatorBallBeatAnimation.m

+8-8
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,34 @@ - (void)setupAnimationInLayer:(CALayer *)layer withSize:(CGSize)size tintColor:(
1717
CGFloat circleSize = (size.width - circleSpacing * 2) / 3;
1818
CGFloat x = (layer.bounds.size.width - size.width) / 2;
1919
CGFloat y = (layer.bounds.size.height - circleSize) / 2;
20-
20+
2121
// Scale animation
2222
CAKeyframeAnimation *scaleAnimation = [self createKeyframeAnimationWithKeyPath:@"transform.scale"];
23-
23+
2424
scaleAnimation.duration = duration;
2525
scaleAnimation.keyTimes = @[@0.0f, @0.5f, @1.0f];
2626
scaleAnimation.values = @[@1.0f, @0.75f, @1.0f];
27-
27+
2828
// Opacity animation
2929
CAKeyframeAnimation *opacityAnimation = [self createKeyframeAnimationWithKeyPath:@"opacity"];
30-
30+
3131
opacityAnimation.duration = duration;
3232
opacityAnimation.keyTimes = @[@0.0f, @0.5f, @1.0f];
3333
opacityAnimation.values = @[@1.0f, @0.2f, @1.0f];
34-
34+
3535
// Aniamtion
3636
CAAnimationGroup *animation = [self createAnimationGroup];;
37-
37+
3838
animation.duration = duration;
3939
animation.animations = @[scaleAnimation, opacityAnimation];
4040
animation.repeatCount = HUGE_VALF;
4141
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
42-
42+
4343
// Draw circles
4444
for (int i = 0; i < 3; i++) {
4545
CAShapeLayer *circle = [CAShapeLayer layer];
4646
UIBezierPath *circlePath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, circleSize, circleSize) cornerRadius:circleSize / 2];
47-
47+
4848
animation.beginTime = [beginTimes[i] floatValue];
4949
circle.fillColor = tintColor.CGColor;
5050
circle.path = circlePath.CGPath;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//
2+
// SPActivityIndicatorBallLoopScaleAnimation.h
3+
// SPActivityIndicatorView
4+
//
5+
// Created by 乐升平 on 2018/11/19.
6+
// Copyright © 2018 乐升平. All rights reserved.
7+
//
8+
9+
#import "SPActivityIndicatorAnimation.h"
10+
11+
NS_ASSUME_NONNULL_BEGIN
12+
13+
@interface SPActivityIndicatorBallLoopScaleAnimation : SPActivityIndicatorAnimation
14+
15+
@end
16+
17+
NS_ASSUME_NONNULL_END
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
//
2+
// SPActivityIndicatorBallLoopScaleAnimation.m
3+
// SPActivityIndicatorView
4+
//
5+
// Created by 乐升平 on 2018/11/19.
6+
// Copyright © 2018 乐升平. All rights reserved.
7+
//
8+
9+
#import "SPActivityIndicatorBallLoopScaleAnimation.h"
10+
11+
@implementation SPActivityIndicatorBallLoopScaleAnimation
12+
- (void)setupAnimationInLayer:(CALayer *)layer withSize:(CGSize)size tintColor:(UIColor *)tintColor {
13+
14+
CGFloat circleSpacing = -2;
15+
CGFloat circleSize = (size.width - 4 * circleSpacing) / 5;
16+
17+
CAReplicatorLayer *replicatorLayer = [CAReplicatorLayer layer];
18+
replicatorLayer.frame = layer.bounds;
19+
[layer addSublayer:replicatorLayer];
20+
21+
22+
CALayer *dot = [CALayer layer];
23+
dot.bounds = CGRectMake(0, 0, circleSize, circleSize);
24+
dot.position = CGPointMake(50, 20);
25+
dot.backgroundColor = tintColor.CGColor;
26+
dot.cornerRadius = circleSize/2.0;
27+
dot.masksToBounds = YES;
28+
29+
[replicatorLayer addSublayer:dot];
30+
31+
32+
CGFloat count = 10.0;
33+
replicatorLayer.instanceCount = count;
34+
CGFloat angel = 2* M_PI/count;
35+
replicatorLayer.instanceTransform = CATransform3DMakeRotation(angel, 0, 0, 1);
36+
37+
38+
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
39+
animation.duration = 1.0;
40+
animation.fromValue = @1;
41+
animation.toValue = @0.1;
42+
animation.repeatCount = MAXFLOAT;
43+
animation.removedOnCompletion = NO;
44+
[dot addAnimation:animation forKey:nil];
45+
46+
47+
replicatorLayer.instanceDelay = 1.0/ count;
48+
49+
dot.transform = CATransform3DMakeScale(0.01, 0.01, 0.01);
50+
}
51+
52+
@end

Demo/SPActivityIndicatorView/Animations/SPActivityIndicatorBallRotaingAroundBallAnimation.m

+3-8
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,10 @@ - (void)configureAnimation {
7676
// 第1个圆的第二段轨迹,轨迹呈大圆
7777
UIBezierPath *ball1_path2 = [UIBezierPath bezierPath];
7878
[ball1_path2 addArcWithCenter:CGPointMake(_areaX+2*_circleSize, _layer.frame.size.height/2) radius:R startAngle:M_PI endAngle:2*M_PI clockwise:NO];
79-
8079
// 第1个圆的第三段轨迹,轨迹呈小圆
8180
UIBezierPath *ball1_path3 = [UIBezierPath bezierPath];
8281
[ball1_path3 addArcWithCenter:centerBall2 radius:r startAngle:0 endAngle:M_PI clockwise:NO];
8382
[ball1_path2 appendPath:ball1_path3];
84-
8583
[ball1_path1 appendPath:ball1_path2];
8684

8785
// 第1个圆的动画
@@ -92,24 +90,21 @@ - (void)configureAnimation {
9290
keyAnimation1.calculationMode = kCAAnimationCubic;
9391
keyAnimation1.repeatCount = 1;
9492
keyAnimation1.duration = 1.4;
95-
keyAnimation1.autoreverses = NO;
93+
keyAnimation1.autoreverses = YES;
9694
keyAnimation1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
9795
[_circle1 addAnimation:keyAnimation1 forKey:@"rotation1"];
9896

9997
// 第3个圆的第一段轨迹,轨迹呈直线
10098
UIBezierPath *ball3_path1 = [UIBezierPath bezierPath];
10199
[ball3_path1 moveToPoint:centerBall3];
102100
[ball3_path1 addLineToPoint:CGPointMake(_areaX+_areaSize.width-_circleRadius, _layer.frame.size.height/2)];
103-
104101
// 第3个圆的第二段轨迹,轨迹呈大圆
105102
UIBezierPath *ball3_path2 = [UIBezierPath bezierPath];
106103
[ball3_path2 addArcWithCenter:CGPointMake(_areaX+3*_circleSize, _layer.frame.size.height/2) radius:R startAngle:0 endAngle:M_PI clockwise:NO];
107-
108104
// 第3个圆的第三段轨迹,轨迹呈小圆
109105
UIBezierPath *ball3_path3 = [UIBezierPath bezierPath];
110106
[ball3_path3 addArcWithCenter:centerBall2 radius:r startAngle:M_PI endAngle:2*M_PI clockwise:NO];
111107
[ball3_path2 appendPath:ball3_path3];
112-
113108
[ball3_path1 appendPath:ball3_path2];
114109

115110
// 第3个圆的动画
@@ -120,7 +115,7 @@ - (void)configureAnimation {
120115
keyAnimation3.calculationMode = kCAAnimationCubic;
121116
keyAnimation3.repeatCount = 1;
122117
keyAnimation3.duration = 1.4;
123-
keyAnimation3.autoreverses = NO;
118+
keyAnimation3.autoreverses = YES;
124119
keyAnimation3.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
125120
[_circle3 addAnimation:keyAnimation3 forKey:@"rotation3"];
126121

@@ -161,7 +156,7 @@ - (CABasicAnimation *)setupShrinkScaleAnimation {
161156
animation.toValue = @0.7;
162157
animation.repeatCount = 1;
163158
animation.duration = 0.3;
164-
animation.autoreverses = NO;
159+
animation.autoreverses = YES;
165160
animation.removedOnCompletion = NO;
166161
animation.fillMode = kCAFillModeForwards;
167162
return animation;

0 commit comments

Comments
 (0)