-
[Swift] 특정 코너만 CornerRadius 적용시키기개발/Swift 2022. 8. 22. 16:26
특정 코너만 CornerRadius 적용시키기
흔히 view에서 cornerRadius를 적용시키기 위해 이렇게 사용하고있었다
extension UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } } self.view.cornerRadius = 8
위와같이 사용하면 각각 코너 모두 둥글게 Radius가 적용된다
하지만 만약 특정 코너만 ( 왼쪽위 or 왼쪽아래) 적용시키기 위해서는 다른 방법이 필요하다
extension UIView { func roundCorners(corners: UIRectCorner, radius: CGFloat) { let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) let mask = CAShapeLayer() mask.path = path.cgPath layer.mask = mask } } self.view.roundCorners(corners: [.topLeft, .bottomLeft], radius: 8)
구글링을 통해 답변을 찾아
위와같이 사용했다. 성공적으로 부분적인 radius 를적용시켰지만
문제는 view에 추가적으로 붙인
Border와 shadow가 정상적으로 붙지 않았다.
위의 기능은 Layer를 다시 건들기 떄문에 일어난 문제같았다.
레이어를 다시 만들지 않고 하는 방법도 있었다
self.view.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMinXMinYCorner]
Min X 라는것은 view의 가장 작은 X값 → 왼쪽을 의미하고
Min Y 는 view의 가장 작은 Y값 → 아래쪽을 의미한다.
위의경우는 왼쪽위 왼쪽 아래를 적용시킨 코드이다.
위와같이 적용시키니 border와 shadow모두 정상적으로 붙었다.
'개발 > Swift' 카테고리의 다른 글
[Swift] ViewController Custom Init (parameter 전달) (0) 2022.08.29 [Swift] 라이브러리 내부 이미지 관련 오류 (0) 2022.08.25 [Swift] Superview 의 tap gesture 적용시 sub view에 영향 안주기 (0) 2022.08.19 [Swift] Cell 에 init 을 하고싶을때 (0) 2022.08.16 [Swift] ReloadData 호출시 키보드 사라지는 오류 (0) 2022.08.15