이미지 첨부가 안되는 관계로 간단하게  가운데 박스뷰가 있다고 가정하고 박스뷰의 모퉁이에 라인 처럼 그려주는 코드입니다.

⌜                        ⌝

 

⌞                        ⌟

 

enum EdgeState {
    case Active
    case Normal
}

func cameraGuideRectCornerPatternLayer(state: EdgeState) {
        // 기존에 그려진 레이어 라인 삭제
        if let sublayers = boxView.layer.sublayers {
            for layer: CALayer in sublayers {
                if (layer.name == "DashPatternLayer") {
                    layer.removeFromSuperlayer()
                    break
                }
            }
        }
        
        let cWidth = 30.0
        let wSpace = boxView.frame.size.width+20.0-(2.0*cWidth)
        let hSpace = boxView.frame.size.height+20.0-(2.0*cWidth)
        
        let cornerWidth = NSNumber(floatLiteral: cWidth)
        let cornerWSpace = NSNumber(floatLiteral: wSpace)
        let cornerHSpace = NSNumber(floatLiteral: hSpace)
        
        let border = CAShapeLayer.init()
        
        border.name = "DashPatternLayer"
        // 상태값에 따라 Layer 색상 변경
        if state == .Normal {
            border.strokeColor = UIColor.white.cgColor
        } else {
            border.strokeColor = UIColor.blue.cgColor
        }
        
        border.fillColor = nil
        border.lineWidth = 3.0
        
        // 시계 방향으로 그려짐
        border.lineDashPattern = [cornerWidth,cornerWSpace,cornerWidth,0, //상단 좌->우
                                  cornerWidth,cornerHSpace,cornerWidth,0, //우측 위->아래
                                  cornerWidth,cornerWSpace,cornerWidth,0, //하단 우->좌
                                  cornerWidth,cornerHSpace,cornerWidth]   //좌측 아래->위
         
        border.path = UIBezierPath(rect: CGRect(x: -10, y: -10, width: boxView.frame.size.width+20, height: boxView.frame.size.height+20)).cgPath
        
        boxView.layer.addSublayer(border)
    }

 

 

참고사이트

     https://stackoverflow.com/questions/40105826/draw-only-corners-to-imageview-frame/40109048#40109048

+ Recent posts