admin
2023-04-21 0b3a4aaf99ea251bc8e27b96115288f0988fcffe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//
//  AnimationTool.m
//  WKMuneController
//
//  Created by macairwkcao on 16/1/25.
//  Copyright © 2016年 CWK. All rights reserved.
//
 
#import "AnimationTool.h"
#import <UIKit/UIKit.h>
 
@implementation AnimationTool
 
#pragma mark 平移动画
/**
 *  按照圆弧曲线平移
 *
 *  @param duration   动画时长
 *  @param fromPoint  起始点
 *  @param startAngle 开始旋转角度
 *  @param endAngle   结束角度
 *  @param center     圆心
 *  @param radius     半径
 *  @param delegate
 *  @param clockwise  顺时针(NO)逆时针(YES)
 *
 *  @return 
 */
+(CAKeyframeAnimation *)moveAccWithDuration:(CFTimeInterval)duration
                                  fromPoint:(CGPoint)fromPoint
                                 startAngle:(CGFloat)startAngle
                                   endAngle:(CGFloat)endAngle
                                     center:(CGPoint)center
                                     radius:(CGFloat)radius
                                   delegate:(id)delegate
                                  clockwise:(BOOL)clockwise{
    CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    keyFrameAnimation.duration = duration;
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, fromPoint.x, fromPoint.y);
    CGPathAddArc(path, nil, center.x, center.y, radius, startAngle, endAngle, clockwise);
    keyFrameAnimation.path = path;
    keyFrameAnimation.fillMode = kCAFillModeForwards;
    keyFrameAnimation.removedOnCompletion = NO;
    keyFrameAnimation.delegate  = delegate;
    keyFrameAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];;
    CGPathRelease(path);
    return keyFrameAnimation;
}
 
+(CAKeyframeAnimation *)moveLineWithDuration:(CFTimeInterval)duration
                                   fromPoint:(CGPoint)fromPoint
                                     toPoint:(CGPoint)toPoint
                                    delegate:(id)delegate{
    CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    keyFrameAnimation.duration = duration;
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, fromPoint.x, fromPoint.y);
    CGPathAddLineToPoint(path, nil, toPoint.x, toPoint.y);
    keyFrameAnimation.path = path;
    keyFrameAnimation.fillMode = kCAFillModeForwards;
    keyFrameAnimation.removedOnCompletion = NO;
    keyFrameAnimation.delegate  = delegate;
    keyFrameAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];;
    CGPathRelease(path);
    return keyFrameAnimation;
}
 
 
 
 
#pragma mark - 缩放动画
+(CABasicAnimation *)scaleAnimationWithDuration:(CFTimeInterval)duration frameValue:(CGFloat)frameValue toValue:(CGFloat)toValue{
    //1.实例化基本动画
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    //2.设置动画属性
    //fromValue & toValue
    [anim setFromValue:@(frameValue)];
    //从当前大小缩小到一半,然后恢复初始大小
    [anim setToValue:@(toValue)];
    
    //自动翻转动画
        [anim setAutoreverses:NO];
    //动画时长
    [anim setDuration:duration];
    
    //3.将动画添加到图层
    //    [self.myView.layer addAnimation:anim forKey:nil];
    return anim;
}
 
/**
 *  动画组
 *
 *  @param animations 动画数组
 *  @param duration   动画时长
 *
 *  @return CAAnimationGroup
 */
+(CAAnimationGroup *)groupAnimationWithAnimations:(NSArray *)animations duration:(CGFloat)duration{
    CAAnimationGroup *animationGroup = [[CAAnimationGroup alloc] init];
    animationGroup.animations = animations;
    animationGroup.duration = duration;
//    animationGroup.fillMode = kCAFillModeForwards;
//    animationGroup.removedOnCompletion = NO;
    return animationGroup;
 
}
 
#pragma mark - 透明度
+(CABasicAnimation *)opacityAnimationWithDuration:(CFTimeInterval)duration frameValue:(CGFloat)frameValue toValue:(CGFloat)toValue{
    //1.实例化基本动画
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    
    //2.设置动画属性
    //fromValue & toValue
    [anim setFromValue:@(frameValue)];
    //从当前大小缩小到一半,然后恢复初始大小
    [anim setToValue:@(toValue)];
    //自动翻转动画
    //    [anim setAutoreverses:YES];
    //动画时长
    [anim setDuration:duration];
    
    //3.将动画添加到图层
    //    [self.myView.layer addAnimation:anim forKey:nil];
    return anim;
}
 
@end