拋物線動(dòng)畫(huà)

動(dòng)畫(huà)管理類(lèi)Animal

/**

?*? 開(kāi)始動(dòng)畫(huà)

?*

?*? @param?view? ? ? ? 添加動(dòng)畫(huà)的view

? ? ? ? view為button時(shí)? ? _layer.contents = (__bridge id)view.imageView.image.CGImage

?? ? ? ? view 為imageView時(shí)? ? _layer.contents = view.layer.contents

?*? @param?rect? ? ? ? view 的絕對(duì)frame

?*? @param?finishPoint 動(dòng)畫(huà)終點(diǎn)位置

?*? @param?animationFinisnBlock 動(dòng)畫(huà)完成回調(diào)

?*/

-(void)startAnimationandView:(UIButton*)view andRect:(CGRect)rect andFinisnRect:(CGPoint)finishPoint andFinishBlock:(animationFinisnBlock)completion{


?//圖層

? ? _layer= [CALayerlayer];

? ? _layer.contents = view.layer.contents;

? ? _layer.contentsGravity = kCAGravityResizeAspect;


? ? // 改變做動(dòng)畫(huà)圖片的大小

? ? rect.size.width=40;

? ? rect.size.height=40;? //重置圖層尺寸

? ? _layer.bounds= rect;

? ? _layer.cornerRadius = rect.size.width/2;

? ? _layer.masksToBounds=YES;? ? ? ? ? //圓角

? ? AppDelegate*delegate = (AppDelegate*)[UIApplicationsharedApplication].delegate;

? ? [delegate.window.layeraddSublayer:_layer];


? ? _layer.position=CGPointMake(rect.origin.x+view.frame.size.width/2,CGRectGetMidY(rect));//開(kāi)始點(diǎn)

? ? // 路徑

? ? UIBezierPath *path = [UIBezierPath bezierPath];

? ? [pathmoveToPoint:_layer.position];


? ? //確定拋物線的最高點(diǎn)位置? controlPoint

? ? [pathaddQuadCurveToPoint:finishPoint controlPoint:CGPointMake(ScreenWidth/2+100 , rect.origin.y-80)];

? ? //關(guān)鍵幀動(dòng)畫(huà)

? ? CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

? ? pathAnimation.path= path.CGPath;

? ? // pathAnimation.delegate = self;


? ? //往下拋時(shí)旋轉(zhuǎn)小動(dòng)畫(huà)

? ? CABasicAnimation *rotateAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];

? ? rotateAnimation.removedOnCompletion=YES;

? ? rotateAnimation.fromValue= [NSNumbernumberWithFloat:0];

? ? rotateAnimation.toValue= [NSNumbernumberWithFloat:12];


? ? /**

?? ? *? kCAMediaTimingFunctionLinear? 動(dòng)畫(huà)從頭到尾的速度是相同的

?? ? kCAMediaTimingFunctionEaseIn? 動(dòng)畫(huà)以低速開(kāi)始。

?? ? kCAMediaTimingFunctionEaseOut? 動(dòng)畫(huà)以低速結(jié)束。

?? ? kCAMediaTimingFunctionEaseInEaseOut? 動(dòng)畫(huà)以低速開(kāi)始和結(jié)束。

?? ? kCAMediaTimingFunctionDefault

?? ? */


? ? rotateAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

? ? CAAnimationGroup *groups = [CAAnimationGroup animation];

? ? groups.animations=@[pathAnimation,rotateAnimation];

? ? groups.duration=1.2f;


? ? //設(shè)置之后做動(dòng)畫(huà)的layer不會(huì)回到一開(kāi)始的位置

? ? groups.removedOnCompletion=NO;

? ? groups.fillMode=kCAFillModeForwards;


? ? //讓工具類(lèi)成為組動(dòng)畫(huà)的代理

? ? groups.delegate=self;

? ? [_layer addAnimation:groups forKey:@"1"];

? ? if(completion) {

? ? ? ? _animationFinisnBlock= completion;

? ? }

}

//動(dòng)畫(huà)完成后代理

- (void)animationDidStop:(CAAnimation*)anim finished:(BOOL)flag

{

? ? //? ? [anim def];

? ? if(anim == [_layeranimationForKey:@"1"]) {


? ? ? ? [_layer removeFromSuperlayer];

? ? ? ? _layer=nil;

? ? ? ? if (_animationFinisnBlock) {

? ? ? ? ? ? _animationFinisnBlock(YES);

? ? ? ? }

? ? }

}

//上下抖動(dòng)動(dòng)畫(huà)

+(void)shakeAnimation:(UIView*)shakeView

{

? ? CABasicAnimation *shakeAnimation = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];

? ? shakeAnimation.duration=0.25f;

? ? shakeAnimation.fromValue= [NSNumbernumberWithFloat:-5];

? ? shakeAnimation.toValue= [NSNumbernumberWithFloat:5];

? ? shakeAnimation.autoreverses=YES;

? ? [shakeView.layeraddAnimation:shakeAnimationforKey:nil];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容