CGContext Clear() Method로 일부 지우기

less than 1 minute read

CGContext Clear() Method로 일부 지우기

CGContext 관련 애플 문서를 찾아보면 다음과 같은 Method가 있다. Parameter로 CGRect를 받고 있고 설명도 위와 같이 투명한 사각형을 그리는 것 이라고 간단하게 설명하고 있다. 많은 경우 사용하게 되지는 않을 것 같지만 Layer나 View를 통해 CGContext로 그렸을 때 일부를 사각형으로 지우고 싶은 경우 사용하면 좋을 것 같은 Method이다.

먼저 테스트를 위해 View에 draw 함수에서 다음과 같은 초록색 사각형을 그렸다.

override func draw(_ rect: CGRect) {
    let con = UIGraphicsGetCurrentContext()!
    con.setFillColor(UIColor.systemGreen.cgColor)
    con.fill(rect)
  }

초록색 사각형의 왼쪽 위 50x50 크기 사각형 구멍(?)을 만들기 위해 clear 메소드를 다음과 같이 사용하였다.

 override func draw(_ rect: CGRect) {
    let con = UIGraphicsGetCurrentContext()!
    con.setFillColor(UIColor.systemGreen.cgColor)
    con.fill(rect)
    // clear method 사용하여 일부 지우기
    con.clear(CGRect(x: 0, y: 0, width: 50, height: 50))
  }

다시 실행해보면 다음과 같이 왼쪽 위에 검은색 구멍이 생긴 것을 확인 할 수 있다.

검은색을 원하는 것이 아니라 투명하게 뚫리는 것을 의도했기에 검은색으로 나오는 것과 관련하여 찾아본 결과 isOpaque 값과 연관된 결과라는 것을 알 수 있었다.

다음과 같이 isOpaque 값을 false로 주면

clearView.isOpaque = false

투명하게 사라진 사각형 부분을 확인할 수 있다.

사각형으로만 지워지는 점은 한계로 느껴진다. 또한 사실 mask를 쓰는 방법도 있고 layer로 그려야 하는 경우가 많지 않아서 특별한 경우에만 쓰게 될 것 같다.

관련 애플 문서