[iOS] UIView

김개발소발·2022년 3월 6일
0

UIView

  • UIKit 프레임워크에서 제공
  • UIView 뷰 클래스의 최상위 클래스로 뷰 구현에 필요한 공통된 기능을 제공
  • 스크린에 보이는 콘텐츠를 관리하는 역할
  • 이벤트 처리
  • 하위 뷰 관리

1. 콘텐츠 시각화

  1. 프레임 내부에 출력하지만, 필요에 따라 외부에도 출력 가능
  2. 비트맵 캐시를 사용 ⇒ 그릴 때 마다 캐시에 저장 크기나 위치만 바뀐다면 캐시를 사용 ⇒ 온디멘트 드로잉 모델(on-demand drawing model)
  3. 다시 그린다면 setNeedsDisplay 호출 ⇒ 캐시를 삭제하고 다시 그리고 캐시로 저장
  4. contentMode으로 콘텐츠를 어떻게 보여줄지 결정( default: aspectFill)

2. 터치 이벤트 처리

  1. UIView 는 UIResponder의 서브 클래스, 터치, 모선, 리모트 컨트롤, 프레스 등 이벤트 처리를 담당하는 클래스
  2. 프레임 내부에서 발생하는 이벤트를 처리하거나 슈퍼뷰로 전달
  3. UIControl → 이벤트를 처리하는 뷰(Slider, Button, Switch 등 기본적인 이벤트가 있는 뷰)
  4. Label, ImageView 등
    1. 기본적으로 이벤트를 처리하지 않고 보여주는게 목적인 뷰
    2. 이벤트 설정을 UIResponder(UIView의 슈퍼 뷰)에서 제공

3. 하위 뷰 관리

  1. 뷰는 하나 이상의 서브 뷰를 가질 수 있다
  2. 하나의 뷰가 두개의 계층에 존재할 수 없다 ⇒ 뷰의 슈퍼 뷰는 하나
  3. 서브뷰의 순서는 화면에 보여지는 순서 ⇒ 가장 뒷쪽의 서브 뷰가 가장 위에 보인다
  4. 슈퍼 뷰의 프레임이 업데이트 되면, 서브 뷰도 업데이트 된다.
  5. 슈퍼 뷰의 알파(alpha, 0~1.0) 값에 따라 영향을 받는다

좌표 체계

  1. 좌측 상단에서 우측 하단까지 영역
  2. 윈도우와 뷰는 고유한 지역 좌표를 가진다
  3. 뷰의 콘텐츠는 뷰의 지역 좌표, 위치와 크기는 슈퍼뷰의 지역 좌표 사용

CGRect

위치(origin)와 크기(size)를 캡슐화 한 구조체

public struct CGRect {
    public var origin: CGPoint
    public var size: CGSize
		// ...
}
public struct CGPoint {
    public var x: CGFloat
    public var y: CGFloat
		// ...
}
public struct CGSize {
    public var width: CGFloat
    public var height: CGFloat
    // ...
}

frame

  1. frame은 슈퍼 뷰의 기준으로 지역 좌표, 좌표(origine)와 크기(size)
  2. origin은 슈퍼뷰에서 자신의 시작 좌표, size는 origin 부터의 크기

bound

뷰의 크기를 캡슐화 한 구조체 (CGRect)
1. 자신의 지역좌표, 좌표(origine)와 크기(size)
2. origin은 (0, 0), size는 frame.size와 동일한 값

// ..viewDidLoad()

let rect = CGRect(x: 10, y: 10, width: 100, height: 100)
let myView = UIView(frame: rect)

view.addSubview(myView)

print("frame: \(myView.frame)")
print("bounds: \(myView.bounds)")

/*
	origin.x, origin.y, size.width, size.height
	frame: (10.0, 10.0, 100.0, 100.0)
	bounds: (0.0, 0.0, 100.0, 100.0)
*/

UIView의 대표적인 속성

isHidden

뷰를 보여줄지 결정, 설정된 뷰는 유저 인터렉션 이벤트를 처리하지 않는다.

clipToBounds

프레임을 벗어난 콘텐츠를 그릴지 결정

opaque

그리기 성능과 관계가 있는 속성
겹쳐진 뷰와 고려해서 뷰를 그리는 속성
HIU: alpha 1.0 ⇒ false / else ⇒ true

clears graphics context

true ⇒ 새로 그려질 때 기존에 그려진 값을 지우고 다시 그린다.
커스텀뷰 성능이 괜찮다면 그대로 사용

profile
사람들 속에 숨어사는 INTJ 성향을 가진 개발자

0개의 댓글