이미지 첨부가 안되는 관계로 간단하게 가운데 박스뷰가 있다고 가정하고 박스뷰의 모퉁이에 라인 처럼 그려주는 코드입니다.
⌜ ⌝
⌞ ⌟
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
'Swift > 기타' 카테고리의 다른 글
[SWIFT]MVVM Module Class (0) | 2023.06.05 |
---|---|
[SWIFT]XCode 빌드번호 자동 증가 스크립트 (0) | 2023.06.01 |
[SWIFT]설치된 앱 아이콘 변경하기 (0) | 2023.05.17 |
[SWIFT]스토어 앱 업데이트 체크 StoreUpdateCheckWrapper (0) | 2023.05.16 |
[SWIFT]App 애니메이션 효과 강제종료 (1) | 2023.05.09 |