Swift UIView의 일부를 각환으로 만들고 싶어요.

4593 단어 Swift

UIView의 일부를 둥글게 만들고 싶어요.


이 글은 TECOTEC Advent Calendar 2018 11일째 되는 글이다.

소스 코드


개발 환경: Xcode:10.1
개발 언어: Swift 4.2
[UIView.layer.maskedCorners로 설정할 수 있는 값(iOS 11 이후)]
.layer MinXMiny Corner 왼쪽 위
.layer MaxMiny Corner 오른쪽 위
.layer MinXMaxYCorner 왼쪽 아래
.layer MaxXMaxYCorner 오른쪽 아래
[UIBezierPath로 설정할 수 있는byRounding Corners의 값(iOS 11보다 작음)]
왼쪽 위
오른쪽 위
.bottomLeft 왼쪽 아래
.bottomRight 오른쪽 아래
.all Corners 전체
※ autoLayout 사용 시 iOS 11 미만의 각환 처리가viewDidLoad()일 경우 원활하게 진행되지 않을 수 있으므로viewDidApper() 이후 안전 기입
sample1.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var yellowView: UIView!
    @IBOutlet weak var blueView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        /// iOS11以降の角丸処理
        blueView.layer.cornerRadius = 20
        blueView.layer.maskedCorners = [.layerMaxXMaxYCorner, .layerMaxXMinYCorner]
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        /// iOS11未満の角丸処理
        let path = UIBezierPath(roundedRect:yellowView.bounds,
                                byRoundingCorners:[.topRight, .bottomRight],
                                cornerRadii: CGSize(width: 20, height: 20))
        let maskLayer = CAShapeLayer()
        maskLayer.path = path.cgPath
        yellowView.layer.mask = maskLayer
    }
}
상기 원본 파일을 실행하면 이런 느낌이 들 수 있습니다

감상
iOS11 이후에 각환 처리가 쉬워졌네요.

좋은 웹페이지 즐겨찾기