Swift:在视图中添加波纹效果

当您需要用户注意应用程序的任何部分时,吸引用户注意的最佳方法是什么?

动画是我能想到的…。有多种选择,例如

  1. 摇动视线
  2. 比例动画
  3. 不透明度动画
  4. 自定义动画(如Ripple)

在本文中,我将讨论在视图周围添加Ripple动画。

我将创建一个占用引用视图的函数,该视图将是UIView或其子类,并且我将使用Coregraphics和CoreAnimation

让我们创建一个函数名称addRippleEffect

  func addRippleEffect(to referenceView:UIView){ 
}
  1. 在视图周围创建圆形路径
 让路径= 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