一. UIViewPropertyAnimator的介紹
UIViewPropertyAnimator 可以稱為屬性動(dòng)畫器,是iOS10中新增的一個(gè)執(zhí)行View動(dòng)畫的類,它主要具有一下的特點(diǎn):
1. 可中斷性
2. 可擦除
3. 可反轉(zhuǎn)性
4. 豐富的動(dòng)畫時(shí)間控制功能
以前我們執(zhí)行view的動(dòng)畫,基本上都是不可以中斷的,這次出了UIViewPropertyAnimator后,我們可以任意中斷動(dòng)畫和反轉(zhuǎn)繼續(xù)動(dòng)畫,提高了動(dòng)畫的可操作性。
UIViewPropertyAnimator是遵循UIViewImplicitlyAnimating協(xié)議
UIViewImplicitlyAnimating遵循UIViewAnimating協(xié)議
二. 代碼實(shí)現(xiàn)
1.我們首先添加要進(jìn)行一些動(dòng)畫操作的view:
self.testView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
self.testView.backgroundColor = [UIColor redColor];
[self.view addSubview:self.testView];
2.接下來我們可以初始化屬性動(dòng)畫器了:
@property (strong, nonatomic) UIViewPropertyAnimator *viewProperty;
//初始化屬性動(dòng)畫器
self.viewProperty = [[UIViewPropertyAnimator alloc] initWithDuration:4.f curve:UIViewAnimationCurveLinear animations:^{
self.testView.frame = CGRectMake(200, 200, 200, 200);
}];
在初始化屬性動(dòng)畫器中,我們讓testview由初始位置CGRectMake(100, 100, 100, 100)移動(dòng)到CGRectMake(200, 200, 200, 200),當(dāng)然這樣只是初始化,testview并不會(huì)真正的移動(dòng),如果想讓view移動(dòng)起來,我們需要:
[self.viewProperty startAnimation];
這段代碼就可以了,同樣,我們可以讓view做一些其他的動(dòng)畫:
暫停view動(dòng)畫:
[self.viewProperty pauseAnimation];
停止view動(dòng)畫:
[self.viewProperty stopAnimation:true];
其中stopAnimation:后跟了一個(gè)BOOL值,它的含義是 是否在動(dòng)畫執(zhí)行結(jié)束后才停止動(dòng)畫。
繼續(xù)動(dòng)畫:
UISpringTimingParameters *param = [[UISpringTimingParameters alloc] initWithDampingRatio:0.1];
[self.viewProperty continueAnimationWithTimingParameters:param durationFactor:1];
其中continueAnimationWithTimingParameters后面需要一個(gè)UITimingCurveProvider的參數(shù),這個(gè)參數(shù)的含義就是接下來的動(dòng)畫,我們想要以什么樣的形式執(zhí)行下去,這里我選擇了spring的形式,也就是彈簧的形式,durationFactor后面的參數(shù)意思是繼續(xù)執(zhí)行下去的動(dòng)畫效果在整個(gè)動(dòng)畫中的時(shí)間,我選擇了1s。