如何用重复的半圆裁剪UIView?

问题描述:

我要修剪出底部,重复半圈的顶部的UIView这样的形象enter image description here如何用重复的半圆裁剪UIView?

我一直在研究你的问题,这是我的结果,你需要创建一个UIBezierPath并适用于你所需的视图,使用这段代码为

功能来生成所需的BezierPath

func pathSemiCirclesPathForView(givenView: UIView, ciclesRadius:CGFloat = 10, circlesDistance : CGFloat = 2) ->UIBezierPath 
    { 
     let width = givenView.frame.size.width 
     let height = givenView.frame.size.height 

     let semiCircleWidth = CGFloat(ciclesRadius*2) 

     let semiCirclesPath = UIBezierPath() 
     semiCirclesPath.move(to: CGPoint(x:0, y:0)) 

     var x = CGFloat(0) 
     var i = 0 
     while x < width { 
      x = (semiCircleWidth) * CGFloat(i) + (circlesDistance * CGFloat(i)) 
      let pivotPoint = CGPoint(x: x + semiCircleWidth/2, y: height) 
      semiCirclesPath.addArc(withCenter: pivotPoint, radius: ciclesRadius, startAngle: -180 * .pi/180.0, endAngle: 0 * .pi/180.0, clockwise: true) 
      semiCirclesPath.addLine(to: CGPoint(x: semiCirclesPath.currentPoint.x + circlesDistance, y: height)) 
      i += 1 
     } 

     semiCirclesPath.addLine(to: CGPoint(x:width,y: 0)) 

     i = 0 
     while x > 0 { 
      x = width - (semiCircleWidth) * CGFloat(i) - (circlesDistance * CGFloat(i)) 
      let pivotPoint = CGPoint(x: x - semiCircleWidth/2, y: 0) 
      semiCirclesPath.addArc(withCenter: pivotPoint, radius: ciclesRadius, startAngle: 0 * .pi/180.0, endAngle: -180 * .pi/180.0, clockwise: true) 
      semiCirclesPath.addLine(to: CGPoint(x: semiCirclesPath.currentPoint.x - circlesDistance, y: 0)) 
      i += 1 
     } 

     semiCirclesPath.close() 
     return semiCirclesPath 
    } 

功能的BezierPath适用于任何浏览

func applySemiCircleEffect(givenView: UIView){ 
    let shapeLayer = CAShapeLayer(layer: givenView.layer) 
    shapeLayer.path = self.pathSemiCirclesPathForView(givenView: givenView).cgPath 
    shapeLayer.frame = givenView.bounds 
    shapeLayer.masksToBounds = true 
    shapeLayer.shadowOpacity = 1 
    shapeLayer.shadowColor = UIColor.black.cgColor 
    shapeLayer.shadowOffset = CGSize(width: 0, height: 0) 
    shapeLayer.shadowRadius = 3 

    givenView.layer.mask = shapeLayer 
} 

使用它

@IBOutlet weak var customView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    self.applySemiCircleEffect(givenView: customView) 
} 

这是它的外观

enter image description here

希望这可以帮助您,编码快乐

+0

@Ganesh马尼卡姆这个答案有帮助您? –

+0

Meliean谢谢:) –