1.實(shí)現(xiàn)如下的動(dòng)畫效果:代碼地址:https://pan.baidu.com/s/1utCyF-laNS39dOxaHN8y_g
QQ20180731-141227-HD.gif
image.png
image.png
image.png
頻率事秀、相位厢蒜,振幅
image.png
更改振幅(實(shí)際應(yīng)該通過聲音)
更改初像
CADisplayLink:類似于timer,但是是通過屏幕的刷新來觸發(fā)的
image.png
image.png
//初始化方法,沒有時(shí)間參數(shù)因?yàn)闀r(shí)間被固定為1/60秒依疼,repeat被固定為YES。
+ (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;
//把指定的receiver(這里是displayLink來調(diào)用)添加到指定的runloop和mode上棠枉,在remove之前是不會(huì)被移除的晕粪。
- (void)addToRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;
- (void)removeFromRunLoop:(NSRunLoop *)runloop forMode:(NSRunLoopMode)mode;
//把整一個(gè)displayLink從所有的runloop modes中給remove下來,破除循環(huán)引用垦沉,(retain target)煌抒,
- (void)invalidate;
@property(readonly, nonatomic) CFTimeInterval timestamp;//當(dāng)前觸發(fā)點(diǎn)時(shí)間(不是timer從0開始的時(shí)間,不能直接拿這個(gè)時(shí)間來用)
@property(readonly, nonatomic) CFTimeInterval duration;//兩次觸發(fā)之間的時(shí)間間隔
@property(readonly, nonatomic) CFTimeInterval targetTimestamp CA_AVAILABLE_IOS_STARTING(10.0, 10.0, 3.0);
@property(getter=isPaused, nonatomic) BOOL paused;//設(shè)置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");//這個(gè)displayLink是顯示了多少個(gè)frame之后才觸發(fā)厕倍,默認(rèn)是1個(gè)(每顯示一個(gè)frame觸發(fā)一次寡壮,也就是每1/60秒觸發(fā)一次)
@property(nonatomic) NSInteger preferredFramesPerSecond CA_AVAILABLE_IOS_STARTING(10.0, 10.0, 3.0);
自己不設(shè)置setter方法,在calayer中,它會(huì)自己幫你設(shè)置况既。
當(dāng)返回的值為YES的時(shí)候这溅,里面的內(nèi)容會(huì)被重繪。
屬性發(fā)生變化了棒仍,display就會(huì)調(diào)用
默認(rèn)返回一個(gè)對(duì)象悲靴,這里代碼返回一個(gè)animation對(duì)像,這個(gè)在這里會(huì)自動(dòng)觸發(fā)降狠。
這里解釋了UIVIew平時(shí)設(shè)置屬性沒有動(dòng)畫对竣,而在動(dòng)畫塊中設(shè)置就有動(dòng)畫,因?yàn)榈谝粋€(gè)actionForLayer返回nil榜配,在動(dòng)畫塊中返回的是動(dòng)畫否纬。