CAAnimation相关类翻译

文章目录

    • CAAnimation.h
    • CALayer.h
    • CAMediaTiming.h
    • CAMediaTimingFunction.h
    • CATransaction.h
    • CATransform3D.h
    • CAValueFunction.h

CAAnimation相关类翻译_第1张图片

CAAnimation.h


#import 
#import 

typedef NSString * CAAnimationCalculationMode;
CAAnimationCalculationMode const kCAAnimationLinear;
CAAnimationCalculationMode const kCAAnimationDiscrete;
CAAnimationCalculationMode const kCAAnimationPaced;
CAAnimationCalculationMode const kCAAnimationCubic;
CAAnimationCalculationMode const kCAAnimationCubicPaced;

typedef NSString * CAAnimationRotationMode;
CAAnimationRotationMode const kCAAnimationRotateAuto;
CAAnimationRotationMode const kCAAnimationRotateAutoReverse;

typedef NSString * CATransitionType;
CATransitionType const kCATransitionFade;
CATransitionType const kCATransitionMoveIn;
CATransitionType const kCATransitionPush;
CATransitionType const kCATransitionReveal;

typedef NSString * CATransitionSubtype;
CATransitionSubtype const kCATransitionFromRight;
CATransitionSubtype const kCATransitionFromLeft;
CATransitionSubtype const kCATransitionFromTop;
CATransitionSubtype const kCATransitionFromBottom;

@interface CAAnimation : NSObject <NSSecureCoding, NSCopying, CAMediaTiming, CAAction>

// 创建新的动画对象
+ (instancetype)animation;
// 动画的标识符
+ (nullable id)defaultValueForKey:(NSString *)key;
- (BOOL)shouldArchiveValueForKey:(NSString *)key;
// 动画函数, 用来控制k动画时间段的
@property(nullable, strong) CAMediaTimingFunction *timingFunction;
// 动画代理回调
@property(nullable, strong) id <CAAnimationDelegate> delegate;
// 动画结束后是否从渲染树删除
@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion;

@end

@protocol CAAnimationDelegate <NSObject>
@optional
// 动画开始时
- (void)animationDidStart:(CAAnimation *)anim;
// 动画结束或者从父layer上删除时调用, 动画正常结束时flag为true
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

@end

@interface CAPropertyAnimation : CAAnimation

// 动画路径的标识符
+ (instancetype)animationWithKeyPath:(nullable NSString *)path;
@property(nullable, copy) NSString *keyPath;
// 如何处理多个动画在同一时间段执行的结果,若为true,同一时间段的动画合成为一个动画,默认为false。
// 使用 CAKeyframeAnimation 时必须将该属性指定为 true ,否则不会出现期待的结果.
@property(getter=isAdditive) BOOL additive;
// 下一次动画执行是否接着刚才的动画,默认为false
@property(getter=isCumulative) BOOL cumulative;
// 动画函数
@property(nullable, strong) CAValueFunction *valueFunction;

@end

// 主要用来操作缩放、平移和旋转等简单动画。
// value的值可以设置为CATransform3D的对象,实现3D动画效果!
@interface CABasicAnimation : CAPropertyAnimation
// fromValue和toValue不为nil,keyPath属性值在fromValue与toValue之间渐变
// fromValue和byValue不为nil,keyPath属性值在fromValue与(fromValue+byValue)之间渐变
// byValue和toValue不为nil,keyPath属性值在(toValue-byValue)与toValue之间渐变
// fromValue不为nil,keyPath属性值在fromValue与图层对应当前值之间渐变
// toValue不为nil,keyPath属性值在图层对应当前值与toValue之间渐变
// byValue不为nil,keyPath属性值在图层对应当前值与(图层对应当前值+toValue)之间渐变

// keyPath相应属性的初始值
@property(nullable, strong) id fromValue;
// keyPaht相应属性的相对插值
@property(nullable, strong) id toValue;
// keyPath相应属性的结束值
@property(nullable, strong) id byValue;

@end

@interface CAKeyframeAnimation : CAPropertyAnimation
// 关键帧动画值的数组,当path为nil时设置有效
@property(nullable, copy) NSArray *values;
// 动画执行的点路径(通过Core Graphics提供的API来绘制路径),设置了path,values将被忽略
@property(nullable) CGPathRef path;
// 关键帧动画每帧动画开始执行时间点的数组(时间段比例0~1), 设置的时候与calculationMode有关
@property(nullable, copy) NSArray<NSNumber *> *keyTimes;

// 动画执行效果数组: kCAMediaTimingFunctionLinear / EaseIn / EaseOut / EaseInEaseOut / Default
@property(nullable, copy) NSArray<CAMediaTimingFunction *> *timingFunctions;
 // 关键帧时间计算方法,每帧动画之间如何过渡: `discrete', `linear', `paced', `cubic' and `cubicPaced'. Defaults to `linear'.
@property(copy) CAAnimationCalculationMode calculationMode;
// cubic calculation modes下的设置
@property(nullable, copy) NSArray<NSNumber *> *tensionValues;
@property(nullable, copy) NSArray<NSNumber *> *continuityValues;
@property(nullable, copy) NSArray<NSNumber *> *biasValues;
// 设置路径旋转,当设置path有不同角度时,会自动旋转layer角度与path相切
@property(nullable, copy) CAAnimationRotationMode rotationMode;

@end

// iOS新增的弹性动画
@interface CASpringAnimation : CABasicAnimation
// 质量,影响图层运动时的弹簧惯性,质量越大,弹簧拉伸和压缩的幅度越大, 默认为1 (0~1)
@property CGFloat mass;
// 刚度系数(劲度系数/弹性系数),刚度系数越大,形变产生的力就越大,运动越快, 默认为100 (0~100)
@property CGFloat stiffness;
//阻尼系数,阻止弹簧伸缩的系数,阻尼系数越大,停止越快, 默认为10 (0~10)
@property CGFloat damping;
// 初始速率,动画视图的初始速度大小 Defaults to zero
// 速率为正数时,速度方向与运动方向一致,速率为负数时,速度方向与运动方向相反
@property CGFloat initialVelocity;
// 估算时间 返回弹簧动画到停止时的估算时间,根据当前的动画参数估算
@property(readonly) CFTimeInterval settlingDuration;

@end

// 转场动画: 为图层提供移入/移出屏幕的动画效果
@interface CATransition : CAAnimation

/**
fade: 淡入淡出效果,交叉淡化过渡, 不支持过渡方向
push:推送效果,新视图把旧视图推出去
reveal:揭开效果,将旧视图移开显示下边的新视图
movein:移动效果,新视图移到旧视图上面
pageCurl: 向上翻页效果,
pageUnCurl: 向下翻页效果,
cube: 立体翻转效果,立方体反转效果
oglFlip: 翻转效果,上下左右反转效果
suckEffect: 收缩效果,如一块布被抽走, 不支持过渡方向
rippleEffect: 水滴波纹效果,不支持过渡方向
cameraIrisHollowOpen: 相机打开效果,不支持过渡方向
cameraIrisHollowClose: 相机关闭效果,不支持过渡方向
 */
// 动画的过渡方式
@property(copy) CATransitionType type;
// 动画的过渡方向: `fromLeft', `fromRight', `fromTop', `fromBottom'
@property(nullable, copy) CATransitionSubtype subtype;
// 动画起点,取值范围为0~1,表示在整个动画中的比例
@property float startProgress;
// endProgress(float)动画终点,取值范围为0~1,表示在整个动画中的比例
@property float endProgress;

@end

@interface CAAnimationGroup : CAAnimation
// 一组动画组合
@property(nullable, copy) NSArray<CAAnimation *> *animations;

@end

// 旋转
transform.rotation.x 围绕x轴翻转 参数:角度
transform.rotation.y 围绕y轴翻转 参数:同上
transform.rotation.z 围绕z轴翻转 参数:同上
transform.rotation 默认围绕z轴

// 缩放
transform.scale.x x方向缩放 参数:缩放比例 1.5
transform.scale.y y方向缩放 参数:同上
transform.scale.z z方向缩放 参数:同上
transform.scale 所有方向缩放 参数:同上

// 平移
transform.translation.x x方向移动 参数:x轴上的坐标 100
transform.translation.y x方向移动 参数:y轴上的坐标
transform.translation.z x方向移动 参数:z轴上的坐标
transform.translation 移动 参数:移动到的点 (100100// 移动
position layer位置
position.x
position.y 

transform CATransform3D 4*4矩阵
bounds layer大小
frame 不支持 frme 属性 computed from the bounds and position and is NOT animatable
anchorPoint 锚点位置
cornerRadius  圆角大小
zPosition  z轴位置

CALayer.h


#import 
#import 

CAEmitterLayer 是一个粒子发射器系统,负责粒子的创建和发射源属性。
CAEAGLLayer 可以通过OpenGL ES来进行界面的绘制。
CAGradientLayer 可以创建出色彩渐变的图层效果
CAScrollLayer 可以支持其上管理的多个子层进行滑动,但是只能通过代码进行管理,不能进行用户点按触发
CAShapeLayer 可以让我们在layer层是直接绘制出自定义的形状。
CATextLayer 可以通过字符串进行文字的绘制
CATiledLayer 类似瓦片视图,可以将绘制分区域进行,常用于一张大的图片的分不分绘制。
CATransformLayer 用于构建一些3D效果的图层。
CAReplicatorLayer 用于对图层进行复制,包括图层的动画也能复制

typedef NSString * CALayerContentsGravity;
CALayerContentsGravity const kCAGravityCenter;
CALayerContentsGravity const kCAGravityTop;
CALayerContentsGravity const kCAGravityBottom;
CALayerContentsGravity const kCAGravityLeft;
CALayerContentsGravity const kCAGravityRight;
CALayerContentsGravity const kCAGravityTopLeft;
CALayerContentsGravity const kCAGravityTopRight;
CALayerContentsGravity const kCAGravityBottomLeft;
CALayerContentsGravity const kCAGravityBottomRight;
CALayerContentsGravity const kCAGravityResize;
CALayerContentsGravity const kCAGravityResizeAspect;
CALayerContentsGravity const kCAGravityResizeAspectFill;

typedef NSString * CALayerContentsFormat;
typedef NSString * CALayerContentsFilter;
CALayerContentsFilter const kCAFilterNearest;
CALayerContentsFilter const kCAFilterLinear;
 CALayerContentsFilter const kCAFilterTrilinear;

typedef NSString * CALayerCornerCurve;
CALayerCornerCurve const kCACornerCurveCircular;
CALayerCornerCurve const kCACornerCurveContinuous;

/** Layer event names. **/
 NSString * const kCAOnOrderIn;
 NSString * const kCAOnOrderOut;
/** The animation key used for transitions. **/
 NSString * const kCATransition

// 位图的抗锯齿设置, 默认全部抗锯齿
typedef NS_OPTIONS (unsigned int, CAEdgeAntialiasingMask) {
  kCALayerLeftEdge      = 1U << 0,
  kCALayerRightEdge     = 1U << 1,
  kCALayerBottomEdge    = 1U << 2,
  kCALayerTopEdge       = 1U << 3,
};

/* Bit definitions for `maskedCorners' property. */
typedef NS_OPTIONS (NSUInteger, CACornerMask) {
  kCALayerMinXMinYCorner = 1U << 0,
  kCALayerMaxXMinYCorner = 1U << 1,
  kCALayerMinXMaxYCorner = 1U << 2,
  kCALayerMaxXMaxYCorner = 1U << 3,
};

@interface CALayer : NSObject <NSSecureCoding, CAMediaTiming>

+ (instancetype)layer;
- (instancetype)init;
// 通过一个layer创建一个副本
- (instancetype)initWithLayer:(id)layer;
// 是Layer的显示层(呈现层),需要动画提交之后才会有值。
- (nullable instancetype)presentationLayer;
// 模型层,在呈现图层上调用–modelLayer将会返回它正在呈现所依赖的CALayer。通常在一个图层上调用-modelLayer会返回–self
- (instancetype)modelLayer;
/*
 CALayer的类或者其子类的所有ObjectiveC属性都遵循了NSKeyValueCoding协议,对于子类声明的属性,它会动态的实现缺省的存取器方法。当使用KVC时,它的属性不是一个对象类型,这时我们需要进行类型的转换,这里列举了NSValue类的扩展,它支持下面的类型的转换。基础类型可以用NSNumber进行转
*/
// *      C Type                  Class
// *      ------                  -----
// *      CGPoint                 NSValue
// *      CGSize                  NSValue
// *      CGRect                  NSValue
// *      CGAffineTransform       NSAffineTransform
// *      CATransform3D           NSValue  */
// 返回这个属性名所对应的属性值的默认值,如果默认值是未知的,则返回nil,子类可以重载这个方法,来设定一些默认值。
+ (nullable id)defaultValueForKey:(NSString *)key;
// 子类重载方法,当属性改变(也包括通过动画造成的layer的改变)需要重绘layer的内容时,返回YES。
// 这个方法默认返回NO,不要通过CALayer返回YES,这样会出现不定的错误
+ (BOOL)needsDisplayForKey:(NSString *)key;
// 在调用-encodeWithCode方法时使用,表示某一属性值是否可以归档。默认YES,可以归档。子类中需要对自定义的属性归档的话,可以调用这个方法
- (BOOL)shouldArchiveValueForKey:(NSString *)key;

// 层的边界,默认为CGRectZero。支持动画
@property CGRect bounds;
// 层的界定,用于界定在父层中的位置,默认值零点zero point,支持动画
@property CGPoint position;
// 层在父层上的位置的Z轴的分量,默认值零zero,支持动画
@property CGFloat zPosition;
//限定层边界的锚点,就像在归一化的层的点坐标.
@property CGPoint anchorPoint;
// 层的锚点的Z分量(参考点位置和变换),默认为零。支持动画
@property CGFloat anchorPointZ;
// 3D变换,用于层边界相对于锚点的变换。默认为恒等变换。支持动画
@property CATransform3D transform;
// 用来访问'变换'属性:仿射变换的存取器方法
- (CGAffineTransform)affineTransform;
- (void)setAffineTransform:(CGAffineTransform)m;
// 与View的frame属性不同,在层次结构中每一层都有一个隐含的帧长方形,
// `position', `bounds', `anchorPoint',and `transform'属性改变时,它也会发生相应的变化
@property CGRect frame;
// 当为YES时不显示层与其子层,默认是NO,支持动画
@property(getter=isHidden) BOOL hidden;
//当时false时,层远离观察者的那一面隐藏(图层有双面,是否都显示,设置NO意思背面看不到,当为NO时,然后旋转180度,则看不到layer层),默认是YES,支持动画
@property(getter=isDoubleSided) BOOL doubleSided;
// 表示层(及其子层)的几何是否被垂直旋转,默认NO。该属性可以改变默认图层y坐标的方向。
// 当翻转变换被调用时,使用该属性来调整图层的方向有的时候是必需的。
// 如果父视图使用了翻转变换,它的子视图内容(以及它对应的图层)将经常被颠倒。
// 在这种情况下,设置子图层的geometryFlipped属性为YES是一种修正该问题最简单的方法。
// 对于iOS app,不推荐使用geometryFlipped属性。
// 是否进行y轴的方向翻转
@property(getter=isGeometryFlipped) BOOL geometryFlipped;
// 获取当前layer内容y轴方向是否被翻转了
- (BOOL)contentsAreFlipped;

@property(nullable, readonly) CALayer *superlayer;
- (void)removeFromSuperlayer;
@property(nullable, copy) NSArray<__kindof CALayer *> *sublayers;
- (void)addSublayer:(CALayer *)layer;
- (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx;
- (void)insertSublayer:(CALayer *)layer below:(nullable CALayer *)sibling;
- (void)insertSublayer:(CALayer *)layer above:(nullable CALayer *)sibling;
- (void)replaceSublayer:(CALayer *)oldLayer with:(CALayer *)newLayer;
// 对其子layer进行3D变换
@property CATransform3D sublayerTransform;
// 遮罩层layer
@property(nullable, strong) __kindof CALayer *mask;
// 是否进行bounds的切割,在设置圆角属性时会设置为YES
@property BOOL masksToBounds;

// 下面这些方法用于坐标转换
// 把点从指定的layer坐标系统转换到接收者的坐标系统中
- (CGPoint)convertPoint:(CGPoint)p fromLayer:(nullable CALayer *)l;
// 把点从指定的layer坐标系统转换到接收者的坐标系统中
- (CGPoint)convertPoint:(CGPoint)p toLayer:(nullable CALayer *)l;
// 把矩形从指定的layer坐标系统中转换到接收者坐标系统中
- (CGRect)convertRect:(CGRect)r fromLayer:(nullable CALayer *)l;
// 把矩形从指定的layer坐标系统中转换到接收者坐标系统中
- (CGRect)convertRect:(CGRect)r toLayer:(nullable CALayer *)l;

- (CFTimeInterval)convertTime:(CFTimeInterval)t fromLayer:(nullable CALayer *)l;
- (CFTimeInterval)convertTime:(CFTimeInterval)t toLayer:(nullable CALayer *)l;
// 返回包含某一点的最上层的子layer
- (nullable __kindof CALayer *)hitTest:(CGPoint)p;
// 返回layer的bounds内是否包含某一点
- (BOOL)containsPoint:(CGPoint)p;

// 设置layer的内容,一般会设置为CGImage的对象
@property(nullable, strong) id contents;
// 获取内容的rect尺寸
@property CGRect contentsRect;
// 类似于UIImageView的图片填充模式
@property(copy) CALayerContentsGravity contentsGravity;
// 设置内容的缩放
@property CGFloat contentsScale;
// 这个属性确定一个矩形区域,当内容进行拉伸或者缩放的时候,这一部分的区域是会被形变的,
// 例如默认设置为(0,0,1,1),则整个内容区域都会参与形变。如果我们设置为(0.25,0.25,0.5,0.5),那么只有中间0.5*0.5比例宽高的区域会被拉伸,四周都不会
@property CGRect contentsCenter;

/* A hint for the desired storage format of the layer contents provided by
 * -drawLayerInContext. Defaults to kCAContentsFormatRGBA8Uint. Note that this
 * does not affect the interpretation of the `contents' property directly. */

@property(copy) CALayerContentsFormat contentsFormat
  API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0));

// 设置缩小的模式
@property(copy) CALayerContentsFilter minificationFilter;
// 设置放大的模式
@property(copy) CALayerContentsFilter magnificationFilter;
// 缩放因子
@property float minificationFilterBias;
// 设置内容是否完全不透明。默认是NO
@property(getter=isOpaque) BOOL opaque;
// 重新加载绘制内容
- (void)display;
// 设置内容为需要重新绘制
- (void)setNeedsDisplay;
- (void)setNeedsDisplayInRect:(CGRect)r;
// 获取是否需要重新绘制
- (BOOL)needsDisplay;
// 如果需要,进行内容重绘
- (void)displayIfNeeded;
// 这个属性设置为YES,当内容改变时会自动调用- (void)setNeedsDisplay函数.默认是NO
@property BOOL needsDisplayOnBoundsChange;
// 默认是NO
@property BOOL drawsAsynchronously;
// 绘制与读取内容
- (void)drawInContext:(CGContextRef)ctx;
- (void)renderInContext:(CGContextRef)ctx;

// 这个属性值用于限定层的边缘是如何栅格化。
// 通常,该属性用于关闭抗锯齿用于边沿的其他紧靠层的边缘,以消除否则会发生的接缝。
// 默认值时所有值都抗锯齿。
@property CAEdgeAntialiasingMask edgeAntialiasingMask;
// 当为真时,则层对由edgeAntialiasingMask属性的值要求的边抗锯齿。
// 默认值是从主束的Info.plist布尔UIViewEdgeAntialiasing属性读取。如果Info.plist中没有找到值则,默认值是NO
@property BOOL allowsEdgeAntialiasing;
@property(nullable) CGColorRef backgroundColor;
@property CGFloat cornerRadius;
@property CGFloat borderWidth;
@property(nullable) CGColorRef borderColor;
@property float opacity;

@property BOOL allowsGroupOpacity;

@property(nullable, strong) id compositingFilter;
@property(nullable, copy) NSArray *filters;
@property(nullable, copy) NSArray *backgroundFilters;
// 是否栅格化
@property BOOL shouldRasterize;
// 栅格化的比例
@property CGFloat rasterizationScale;

// MARK: 阴影
// 设置阴影透颜色
@property(nullable) CGColorRef shadowColor;
// 设置阴影透明度,默认0,值在[0,1]之间,支持动画
@property float shadowOpacity;
// 设置阴影偏移量. 默认(0, -3),支持动画.
@property CGSize shadowOffset;
// 阴影圆角默认3, 支持动画
@property CGFloat shadowRadius;
// 阴影路径
@property(nullable) CGPathRef shadowPath;

// MARK: j布局
- (CGSize)preferredFrameSize;
- (void)setNeedsLayout;
- (BOOL)needsLayout;
- (void)layoutIfNeeded;
- (void)layoutSublayers;

// MARK: 行为动画
+ (nullable id<CAAction>)defaultActionForKey:(NSString *)event;
- (nullable id<CAAction>)actionForKey:(NSString *)event;
@property(nullable, copy) NSDictionary<NSString *, id<CAAction>> *actions;
// 添加一个动画对象 key值起到id的作用,通过key值,可以取到这个动画对象
- (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key;
- (void)removeAllAnimations;
- (void)removeAnimationForKey:(NSString *)key;
- (nullable NSArray<NSString *> *)animationKeys;
- (nullable __kindof CAAnimation *)animationForKey:(NSString *)key;

// layer的名字,用于层的管理,默认nil
@property(nullable, copy) NSString *name;
@property(nullable, weak) id <CALayerDelegate> delegate;
// 风格属性字典
@property(nullable, copy) NSDictionary *style;

@end

@protocol CAAction
/*
CAAction协议定义了行为对象如何被调用。实现CAAction协议的类包含一个方法runActionForKey:object:arguments:。
 当行为对象收到一个runActionForKey:object:arguments:的消息时,行为标识符、行为发生所在的图层、额外的参数字典会被作为参数传递给方法。
 通常行为对象是CAAnimation的子类实例,它实现了CAAction协议。
 然而你也可以返回任何实现了CAAction协议的类对象。当实例收到runActionForKey:object:arguments:的消息时,它需要执行相应的行为。
*/
- (void)runActionForKey:(NSString *)event object:(id)anObject
    arguments:(nullable NSDictionary *)dict;

@end

@protocol CALayerDelegate <NSObject>
@optional

- (void)displayLayer:(CALayer *)layer;
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
- (void)layoutSublayersOfLayer:(CALayer *)layer;
- (nullable id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event;

@end

CAMediaTiming.h


#import 
#import 
#import 

typedef NSString * CAMediaTimingFillMode;
CAMediaTimingFillMode const kCAFillModeForwards;
CAMediaTimingFillMode const kCAFillModeBackwards;
CAMediaTimingFillMode const kCAFillModeBoth;
CAMediaTimingFillMode const kCAFillModeRemoved;

@protocol CAMediaTiming

// 开始a时间默认是0, 相对于父对象的开始时间
@property CFTimeInterval beginTime;
// 持续时间
@property CFTimeInterval duration;
// 速度, 默认是1, 图层或动画模型相对于父图层CALayer的时间流逝速度
@property float speed;
// 时间偏移: 从哪个时间段先开始
@property CFTimeInterval timeOffset;
// 重复次数, 默认是0, 设置为HUGE_VALF,表示无限重复
@property float repeatCount;
// 重复时间, 默认是0
@property CFTimeInterval repeatDuration;
// 反向效果
@property BOOL autoreverses;
// 有效期结束后,动画对象的呈现效果是冻结还是移除
@property(copy) CAMediaTimingFillMode fillMode;

@end

CAMediaTimingFunction.h


#import 
#import 

// 动画效果
typedef NSString * CAMediaTimingFunctionName;
CAMediaTimingFunctionName const kCAMediaTimingFunctionLinear;
CAMediaTimingFunctionName const kCAMediaTimingFunctionEaseIn;
CAMediaTimingFunctionName const kCAMediaTimingFunctionEaseOut;
CAMediaTimingFunctionName const kCAMediaTimingFunctionEaseInEaseOut;
CAMediaTimingFunctionName const kCAMediaTimingFunctionDefault;

@interface CAMediaTimingFunction : NSObject <NSSecureCoding>

+ (instancetype)functionWithName:(CAMediaTimingFunctionName)name;
// 创建一个基于三次贝塞尔曲线的定时函数。
// 曲线的端点在(0,0)和(1,1)处,类实例定义的两个点“c1”和“c2”是控制点。
// 因此,定义Bezier曲线的点是:'[(0,0),c1, c2, (1,1)]'
+ (instancetype)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;
- (instancetype)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y;
- (void)getControlPointAtIndex:(size_t)idx values:(float[_Nonnull 2])ptr;

@end

CATransaction.h


#import 
#import 

// 可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务.
// 区分隐式动画和隐式事务:隐式动画通过隐式事务实现动画 。
// 区分显式动画和显式事务:显式动画有多种实现方式,显式事务是一种实现显式动画的方式
@interface CATransaction : NSObject

// 当前线程开始新的事务
+ (void)begin;
// 在当前的事务中提交所有更改, 如果不存在当前事务,则引发异常
+ (void)commit;
// 提交任何现存的隐式事务。 将延迟实际的commituntil任何嵌套的显式事务已经完成
+ (void)flush;
// 全局的锁, 实现s多线程的安全, 是个递归自旋锁
+ (void)lock;
+ (void)unlock;
// 定义添加到图层的动画的默认持续时间。 默认为1 / 4s
+ (CFTimeInterval)animationDuration;
+ (void)setAnimationDuration:(CFTimeInterval)dur;
// 动画控制函数
+ (nullable CAMediaTimingFunction *)animationTimingFunction;
+ (void)setAnimationTimingFunction:(nullable CAMediaTimingFunction *)function;
// 默认为NO,即启用了隐式动画。
+ (BOOL)disableActions;
+ (void)setDisableActions:(BOOL)flag;
// 当所有提交的事务完成或者被删除时, 确保在主线程回调, 没有添加事务会立即回调
+ (nullable void (^)(void))completionBlock;
+ (void)setCompletionBlock:(nullable void (^)(void))block;
// KVC设置“animationDuration”,“animationTimingFunction”,“completionBlock”,“disableActions”。
+ (nullable id)valueForKey:(NSString *)key;
+ (void)setValue:(nullable id)anObject forKey:(NSString *)key;

@end

NSString * const kCATransactionAnimationDuration;
NSString * const kCATransactionDisableActions;
NSString * const kCATransactionAnimationTimingFunction;
NSString * const kCATransactionCompletionBlock;

CATransform3D.h

/**
从m11到m44定义的含义如下:
m11:x轴方向进行缩放
m12:和m21一起决定z轴的旋转
m13:和m31一起决定y轴的旋转
m14:
m21:和m12一起决定z轴的旋转
m22:y轴方向进行缩放
m23:和m32一起决定x轴的旋转
m24:
m31:和m13一起决定y轴的旋转
m32:和m23一起决定x轴的旋转
m33:z轴方向进行缩放
m34:透视效果m34= -1/D,D越小,透视效果越明显,必须在有旋转效果的前提下,才会看到透视效果
m41:x轴方向进行平移
m42:y轴方向进行平移
m43:z轴方向进行平移
m44:初始为1
 */

struct CATransform3D
{
  CGFloat m11, m12, m13, m14;
  CGFloat m21, m22, m23, m24;
  CGFloat m31, m32, m33, m34;
  CGFloat m41, m42, m43, m44;
};

typedef struct CA_BOXABLE CATransform3D CATransform3D;

/* The identity transform: [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]. */
// 初始化一个transform3D对象,不做任何变换
 const CATransform3D CATransform3DIdentity;
// 判断一个transform3D对象是否是初始化的对象
 bool CATransform3DIsIdentity (CATransform3D t);
// 比较两个transform3D对象是否相同
 bool CATransform3DEqualToTransform (CATransform3D a, CATransform3D b);

// MARK: 平移
// 返回一个平移变换的transform3D对象 tx,ty,tz对应x,y,z轴的平移
 CATransform3D CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz);
// 在某个transform3D变换的基础上进行平移变换,t是上一个transform3D,其他参数同上
 CATransform3D CATransform3DTranslate (CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz);

// MARK: 缩放
// x,y,z分别对应x轴,y轴,z轴的缩放比例
 CATransform3D CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);
// 在一个transform3D变换的基础上进行缩放变换,其他参数同上
 CATransform3D CATransform3DScale (CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz);

// MARK: 旋转
// 当我们有垂直于z轴的旋转分量时,设置m34的值可以增加透视效果,也可以理解为景深效果
// x,y,z决定了旋转围绕的中轴
 CATransform3D CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat y, CGFloat z);
// 在一个transform3D的基础上进行旋转变换,其他参数如上
 CATransform3D CATransform3DRotate (CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z);

// 将两个 transform3D对象变换属性进行叠加,返回一个新的transform3D对象
 CATransform3D CATransform3DConcat (CATransform3D a, CATransform3D b);

// 将一个旋转的效果进行翻转
 CATransform3D CATransform3DInvert (CATransform3D t);

// MARK: 转换CGAffineTransform
// CGAffineTransform是UIKit框架中一个用于变换的矩阵,其作用与CATransform类似,只是其可以直接作用于View,而不用作用于layer,这两个矩阵也可以进行转换
// 将一个CGAffinrTransform转化为CATransform3D
 CATransform3D CATransform3DMakeAffineTransform (CGAffineTransform m);
// 判断一个CATransform3D是否可以转换为CAAffineTransform
 bool CATransform3DIsAffine (CATransform3D t);
// 将CATransform3D转换为CGAffineTransform
 CGAffineTransform CATransform3DGetAffineTransform (CATransform3D t);

@interface NSValue (CATransform3DAdditions)
// 将CATransform3D结构体, 转换成对象
+ (NSValue *)valueWithCATransform3D:(CATransform3D)t;

@property(readonly) CATransform3D CATransform3DValue;

@end

CAValueFunction.h

CAPropertyAnimation的属性, 插值计算方式
typedef NSString * CAValueFunctionName ;

@interface CAValueFunction : NSObject <NSSecureCoding>
+ (nullable instancetype)functionWithName:(CAValueFunctionName)name;
@property(readonly) CAValueFunctionName name;
@end

// “rotateX”、“rotateY”、“rotateZ”函数接受一个以弧度为单位的输入值,构造一个4x4矩阵表示相应的旋转矩阵
 CAValueFunctionName const kCAValueFunctionRotateX;
 CAValueFunctionName const kCAValueFunctionRotateY;
 CAValueFunctionName const kCAValueFunctionRotateZ;

 CAValueFunctionName const kCAValueFunctionScale;
 CAValueFunctionName const kCAValueFunctionScaleX;
 CAValueFunctionName const kCAValueFunctionScaleY;
 CAValueFunctionName const kCAValueFunctionScaleZ;

 CAValueFunctionName const kCAValueFunctionTranslate;
 CAValueFunctionName const kCAValueFunctionTranslateX;
 CAValueFunctionName const kCAValueFunctionTranslateY;
 CAValueFunctionName const kCAValueFunctionTranslateZ;


CAAnimation相关类翻译_第2张图片

你可能感兴趣的:(核心动画)