2017-09-12 6 views
0

어떻게 UIView의 특정면에만 대시 테두리를 추가 할 수 있습니까? Dashed line border around UIView 링크를 참조했지만 view.ok의 모든 가장자리에 대한 경로를 제공하는 동안 다소 혼란 스럽습니다. 그래서 이것은 추가하기위한 코드입니다. 뷰의 특정 측면에 직선의 경계 :UIView의 특정 가장자리에 대해 파선 테두리를 추가하는 방법은 무엇입니까?

 I want this as my output screen

func addRightBorder(with color: UIColor, andWidth borderWidth: CGFloat,view:UIView) { 

      let border = UIView() 
      border.backgroundColor = color 
      border.autoresizingMask = [.flexibleHeight, .flexibleLeftMargin] 
      border.frame = CGRect(x: view.frame.size.width - borderWidth, y: 0, width: borderWidth, height: view.frame.size.height) 

      //border.addDashedLine(color: UIColor.red) 
      border.addDashedLine(color: UIColor.red) 
      view.addSubview(border) 
     }* 

가 어떻게 같은 일을 달성하지만, 파선/점선을 위해 할 수 있습니까?

답변

1

내 앱 중 하나에서 비슷한 항목이 필요했고 UIView Extension을 만들었습니다.

내 코드를 살펴 보자,

extension UIView { 
func removeDashedLine() { 
    _ = layer.sublayers?.filter({ $0.name == "DashedTopLine" }).map({ $0.removeFromSuperlayer() }) 
} 

func addDashedLine(_ path: UIBezierPath ,pattern : [NSNumber] = [1, 5], color: UIColor = UIColor.red) { 

    self.backgroundColor = UIColor.clear 

    let shapeLayer: CAShapeLayer = CAShapeLayer() 
    let frameSize = self.frame.size 
    let shapeRect = CGRect(x: 0, y: 0, width: frameSize.width, height: frameSize.height) 

    shapeLayer.name = "DashedTopLine" 
    shapeLayer.frame = shapeRect 
    //shapeLayer.position = CGPoint(x: frameSize.width/2, y: frameSize.height/2) 
    shapeLayer.fillColor = UIColor.clear.cgColor 
    shapeLayer.strokeColor = color.cgColor 
    shapeLayer.lineWidth = 1 
    shapeLayer.lineJoin = kCALineJoinRound 
    shapeLayer.lineDashPattern = pattern 

    shapeLayer.path = nil 
    shapeLayer.path = path.cgPath 
    self.layer.insertSublayer(shapeLayer, at: 0) 

} 
} 

그것은 정확히 당신이 원하는하지만 경로를 정의하는 동안 당신에게

+0

도움, 나는의 한 측면에 대해 그려 질 경로를 필요로한다 무엇을 할 수 없습니다 보기 .. –

+0

내 솔루션은 대시 테두리, 당신은 대시를 그려야 할 UIBezierPath을 전달해야합니다 – Abhishek

+0

내 질문을 편집했습니다. 이미지를 추가했습니다. –