CoreAnimation 3

1.实现如下的动画效果:代码地址:https://pan.baidu.com/s/1utCyF-laNS39dOxaHN8y_g

QQ20180731-141227-HD.gif
image.png
image.png
image.png
频率、相位,振幅
image.png
更改振幅(实际应该通过声音)
更改初像

CADisplayLink:类似于timer,但是是通过屏幕的刷新来触发的

image.png
image.png

//初始化方法,没有时间参数因为时间被固定为1/60秒,repeat被固定为YES。
+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;


//把指定的receiver(这里是displayLink来调用)添加到指定的runloop和mode上,在remove之前是不会被移除的。
- (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;



- (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;


//把整一个displayLink从所有的runloop modes中给remove下来,破除循环引用,(retain target),
- (void)invalidate;



@property(readonly, nonatomic) CFTimeInterval timestamp;//当前触发点时间(不是timer从0开始的时间,不能直接拿这个时间来用)
@property(readonly, nonatomic) CFTimeInterval duration;//两次触发之间的时间间隔



@property(readonly, nonatomic) CFTimeInterval targetTimestamp CA_AVAILABLE_IOS_STARTING(10.0, 10.0, 3.0);



@property(getter=isPaused, nonatomic) BOOL paused;//设置Yes可以把displayLink停掉


@property(nonatomic) NSInteger frameInterval
  CA_AVAILABLE_BUT_DEPRECATED_IOS (3.1, 10.0, 9.0, 10.0, 2.0, 3.0, "use preferredFramesPerSecond");//这个displayLink是显示了多少个frame之后才触发,默认是1个(每显示一个frame触发一次,也就是每1/60秒触发一次)


@property(nonatomic) NSInteger preferredFramesPerSecond CA_AVAILABLE_IOS_STARTING(10.0, 10.0, 3.0);
自己不设置setter方法,在calayer中,它会自己帮你设置。
当返回的值为YES的时候,里面的内容会被重绘。
属性发生变化了,display就会调用
默认返回一个对象,这里代码返回一个animation对像,这个在这里会自动触发。
这里解释了UIVIew平时设置属性没有动画,而在动画块中设置就有动画,因为第一个actionForLayer返回nil,在动画块中返回的是动画。

你可能感兴趣的:(CoreAnimation 3)