怎么在iOS中添加一个购物车动画效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>一、计算动画开始结束点位置强>
方法:
安康;(CGPoint) convertPoint: (CGPoint) point 要查看:(nullable UIView *)视图;
1)动画开始位置fromCenter
代码如下:
CGPoint fromCenter=,[animationView convertPoint: CGPointMake (animationView.frame.size.width * 0.5 f, animationView.frame.size.height * 0.5 f)要查看:keyWindow],
2)动画结束位置endCenter
代码如下:
CGPoint endCenter=[endView convertPoint: CGPointMake (endView.frame.size.width * 0.5 f, endView.frame.size.height * 0.5 f)要查看:keyWindow],
<强>二,计算贝塞尔曲线(抛物线)的两个控制点强>
- <李>
controlPoint1是控制点1
李> <李>controlPoint2是控制点2
李> <李>是controlPoint1和controlPoint2的中点
李> <李>controlPointC是fromCenter和B的中点
李>1)先设置控制点距最高点(fromCenter或endCenter)的水平距离controlPointEY,本篇默认controlPointEY=100,即图1中点controlPointC到点一的距离。
2)计算控制点相对于点一的距离controlPointEX,即controlPoint1到一个距离或controlPoint2到一个距离,本篇设置为fromCenter.x到endCenter。x的1/4,即controlPointEX=(endCenter。x - fromCenter.x) * 0.25 f;
3)计算两个控制点
CGPoint controlPoint1 =, CGPointMake (controlPointCX 安康;controlPointEX, controlPointCY 作用;controlPointEY); CGPoint controlPoint2 =, CGPointMake(时间+ controlPointCX controlPointEX,, controlPointCY 作用;controlPointEY);
<强>三、复制动画的层强>
NSString * str =, ((UIButton *) animationView) .titleLabel.text; 时间=_animationLayer [CATextLayer 层); 时间=_animationLayer.bounds animationView.bounds; 时间=_animationLayer.position fromCenter; 时间=_animationLayer.alignmentMode kCAAlignmentCenter;//文字对齐方式 时间=_animationLayer.wrapped 是的; 时间=_animationLayer.contentsScale [UIScreen mainScreen] .scale; _animationLayer.string =, str; 时间=_animationLayer.backgroundColor [UIColor redColor] .CGColor; [keyWindow.layer addSublayer: _animationLayer];
<强>四、动画组合强>
1)运动轨迹(抛物线)
UIBezierPath * path =, [UIBezierPath bezierPath]; [path moveToPoint fromCenter):; [path addCurveToPoint: endCenter controlPoint1: controlPoint1 controlPoint2: controlPoint2); CAKeyframeAnimation * pathAnimation =, (CAKeyframeAnimation animationWithKeyPath: @" position"); 时间=pathAnimation.path path.CGPath;
2)旋转起来
CABasicAnimation * rotateAnimation =, (CABasicAnimation animationWithKeyPath: @" transform.rotation"); 时间=rotateAnimation.removedOnCompletion 是的; 时间=rotateAnimation.fromValue [NSNumber numberWithFloat: 0]; 时间=rotateAnimation.toValue [NSNumber numberWithFloat: 10, *, M_PI); rotateAnimation.timingFunction=[CAMediaTimingFunction functionWithName kCAMediaTimingFunctionEaseIn):
3)缩放动画
CABasicAnimation * scaleAnimation =, (CABasicAnimation animationWithKeyPath: @" transform.scale"); scaleAnimation.removedOnCompletion =,没有; scaleAnimation.fromValue =, (NSNumber numberWithFloat: 1.0); scaleAnimation.toValue =, (NSNumber numberWithFloat: 0.2);
4)透明度动画
CABasicAnimation * alphaAnimation =, (CABasicAnimation animationWithKeyPath: @" opacity"); alphaAnimation.removedOnCompletion =,没有; alphaAnimation.fromValue =, (NSNumber numberWithFloat: 1.0); alphaAnimation.toValue =, (NSNumber numberWithFloat: 0.1);
5)动画组合
CAAnimationGroup * groups =, (CAAnimationGroup 动画); groups.animations =, @ [pathAnimation、rotateAnimation, scaleAnimation,, alphaAnimation); 时间=groups.duration kShoppingCartDuration; groups.removedOnCompletion=没有; groups.fillMode=kCAFillModeForwards; 时间=groups.delegate 自我; [_animationLayer addAnimation: groups forKey: @" group"];怎么在iOS中添加一个购物车动画效果