/**
* brief 弹跳动画
*
* @param view 执行弹跳动画的view
* @param height 弹跳的高度
* @param duration 弹跳的时间
*/
- (void)bounceWithView:(UIView *)view height:(CGFloat)height duration:(CFTimeInterval)duration;
{
CGPoint center = CGPointMake(view.frame.origin.x + view.frame.size.width * 0.5f, view.frame.origin.y + view.frame.size.height*0.5f);
/*创建一个关键帧动画对象,key值为layer的position属性*/
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
/*创建一个可变数组,用于存储每帧执行后position的位置*/
NSMutableArray *valuesArray = [[NSMutableArray alloc] init];
/*第一帧的位置*/
[valuesArray addObject:[NSValue valueWithCGPoint:center]];
[valuesArray addObject:[NSValue valueWithCGPoint:CGPointMake(center.x, center.y+height)]];
[valuesArray addObject:[NSValue valueWithCGPoint:center]];
/*创建一个数组,用于存储每一帧的时间点*/
NSArray *timesArray = @[@(0), @(0.4),@(1)];
/*再创建一个数组,用于保存每一帧的动画曲线*/
NSArray *timingFunctions = @[[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
/*设置关键帧的值*/
animation.values = valuesArray;
/*设置关键帧时间点的值*/
animation.keyTimes = timesArray;
/*设置动画曲线*/
animation.timingFunctions = timingFunctions;
/*设置动画时间*/
animation.duration = duration;
/*设置代理*/
animation.delegate = self;
/*设置动画完成后是否自动移除,默认是YES,此处改为NO,否则在animationDidStop里就找不到这个动画了*/
animation.removedOnCompletion = NO;
/*重复执行*/
animation.repeatCount = HUGE_VAL;
/*将动画添加近_menuView.layer中*/
[view.layer addAnimation:animation forKey:@"menuAnimation"];
}
等待动画上下跳动加载的原理模型
最新推荐文章于 2020-06-08 16:10:55 发布