Swift:在视图中添加波纹效果
当您需要用户注意应用程序的任何部分时,吸引用户注意的最佳方法是什么?
动画是我能想到的…。有多种选择,例如
- 摇动视线
- 比例动画
- 不透明度动画
- 自定义动画(如Ripple)
在本文中,我将讨论在视图周围添加Ripple动画。
我将创建一个占用引用视图的函数,该视图将是UIView或其子类,并且我将使用Coregraphics和CoreAnimation
让我们创建一个函数名称addRippleEffect
func addRippleEffect(to referenceView:UIView){
}
- 在视图周围创建圆形路径
让路径= UIBezierPath(ovalIn:CGRect(x:0,y:0,宽度:referenceView.bounds.size.width,高度:referenceView.bounds.size.height))
2.创建一个ShapeLayer并放置它,并提供我们创建的颜色和椭圆形路径
/ *! 形状层应为* / let的位置shapePosition = CGPoint(x:referenceView.bounds.size.width / 2.0,y:referenceView.bounds.size.height / 2.0)let波纹形状= CAShapeLayer()rippleShape.bounds = CGRect( x:0,y:0,宽度:referenceView.bounds.size.width,高度:referenceView.bounds.size.height)rippleShape.path = path.cgPathrippleShape.fillColor = UIColor.clear.cgColorrippleShape.strokeColor = UIColor.yellow。 cgColorrippleShape.lineWidth = 4rippleShape.position = shapePositionrippleShape.opacity = 0
3.将纹波层添加为参考视图的子层
referenceView.layer.addSublayer(rippleShape)
4.创建涟漪的比例动画
让scaleAnim = CABasicAnimation(keyPath:“ transform.scale”)scaleAnim.fromValue = NSValue(caTransform3D:CATransform3DIdentity)scaleAnim.toValue = NSValue(caTransform3D:CATransform3DMakeScale(2,2,1))
5.创建动画以使波纹不透明
让opacityAnim = CABasicAnimation(keyPath:“ opacity”)opacityAnim.fromValue = 1opacityAnim.toValue = nil
6.对不透明度和比例动画进行分组
让动画= CAAnimationGroup()animation.animations = [scaleAnim,opacityAnim] animation.timingFunction = CAMediaTimingFunction(名称:kCAMediaTimingFunctionEaseOut)animation.duration = CFTimeInterval(0.7)animation.repeatCount = 25animation.isRemovedOnCompletion = true
7.将动画添加到形状中
rippleShape.add(animation,forKey:“ rippleEffect”)
8。 叫它
func animateImage(){addRippleEffect(to:imageView)}
完成的代码可以在这里找到
ObjC:RippleEffectObjC
斯威夫特:RippleEffectSwift