2017-07-15 41 views

回答

2

我一直在研究你的問題,這是我的結果,你需要創建一個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謝謝:) –