CABasicAnimation实现的动画效果主要有移动、放大或缩小、旋转(以x轴,或y轴,或z轴为中心)。在实现过程中,主要通过设置终点值进行控制,同时动画效果是添加在UIview的layer层。
/**
* CABasicAnimation动画
*
* @param view 添加动画效果的UIView对象
* @param path 动画类型
* @param duration 动画时间,默认0.3
* @param function 动画函数名称kCAMediaTimingFunctionLinear,
* kCAMediaTimingFunctionEaseIn,
* kCAMediaTimingFunctionEaseOut,
* kCAMediaTimingFunctionEaseInEaseOut,
* kCAMediaTimingFunctionDefault
* @param fromValue 起始值
* @param toValue 终点值
*/
+ (void)basicAnimation:(UIView *)view
animationPath:(NSString *)path
duration:(NSTimeInterval)duration
timingFunction:(NSString *)function
fromValue:(id)fromValue
toValue:(id)toValue
{
// 旋转:x轴-@"transform.rotation.x",y轴-@"transform.rotation.y",z轴-@"transform.rotation.z";值设置xxx.toValue = [NSNumber numberWithFloat:22 * M_PI];
// 移动:@"position";移值设置xxx.toValue = [NSValue valueWithCGPoint:CGPointMake(320, 480)];
// 缩放:@"transform.scale";值设置xxx.toValue = [NSNumber numberWithFloat:2.0];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:path];
if (fromValue)
{
animation.fromValue = fromValue;
}
if (toValue)
{
animation.toValue = toValue;
}
animation.duration = (0.0 >= duration ? 0.3 : duration);
animation.timingFunction = [CAMediaTimingFunction functionWithName:function];
// 动画终了后不返回初始状态
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
[view.layer addAnimation:animation forKey:nil];
}
使用示例
// 旋转:x轴-@"transform.rotation.x",y轴-@"transform.rotation.y",z轴-@"transform.rotation.z";值设置xxx.toValue = [NSNumber numberWithFloat:22 * M_PI];
[self basicAnimation:animationImageView animationPath:@"transform.rotation.z" duration:0.6 timingFunction:kCAMediaTimingFunctionEaseInEaseOut fromValue:nil toValue:[NSNumber numberWithFloat:10 * M_PI]];
// 移动:@"position";移值设置xxx.toValue = [NSValue valueWithCGPoint:CGPointMake(320, 480)];
[self basicAnimation:animationImageView animationPath:@"position" duration:0.6 timingFunction:kCAMediaTimingFunctionEaseInEaseOut fromValue:nil toValue:[NSValue valueWithCGPoint:CGPointMake(320, 480)]];
// 缩放:@"transform.scale";值设置xxx.toValue = [NSNumber numberWithFloat:2.0];
[self basicAnimation:animationImageView animationPath:@"transform.scale" duration:0.6 timingFunction:kCAMediaTimingFunctionEaseInEaseOut fromValue:nil toValue:[NSNumber numberWithFloat:2.0]];