IOS/Swift

[TIL] Swift. Frame and Bounds

1pt는 1포인트 1인치를 72로 나눈값이 1pt = 0.3527입니다

1px는 1픽셀로 이미지를 이루는 가장 작은 단위의 점입니다.

Window & Mac 디스플레이

  • Windows에서 9pt = 12px
  • Mac 에서 9pt = 9px
  • windows는 화면 해상도를 95dpi를 쓰지만, mac에서는 72dpi를 사용합니다.
  • 즉, 1인치당 96개의 점이 있는 윈도우와, 1인치당 72개의 점이있는 맥의 차이입니다.

Retina 디스플레이

  • 레티나가 아닌 디스플레이에서는 1pt = 1px이 되는데, 레티나에서는 iPhoneX, 플러스+ 종류의 Device는 3x렌더링을 하게 되는데 1pt = 9px이라고 생각하고
  • iPhoneX, 플러스+를 제외한 Device는 2x로 렌더링을 하게되서 1pt = 4px라고 됩니다.

UIKit을 사용할때 좌표 시작점은 좌측상단 (0, 0)입니다.

  • Quartz 2D는 좌측하단 (0, 0) 입니다.

CGRect, CGSize, CGPoint

먼저 Frame 을 알려면 CGRect와 CGSize의 차이와, CGPoint에 대해서 알아야 합니다

  1. CGRect
    • 2차원 좌표계의 점을 포함하는 구조체
    • 1은 x, 2는 y
  2. CGsize
    • 너비와 높이 값을 포함하는 구조체.
    • 사각형으로 나타내지곤 하지만 CGSize는 너비와 높이의 값 입니다.
    • 실제로 사각형으로 간주되지 않습니다.
  3. CGPoint
    • 사각형의 위치와 크기를 포함하는 구조체
    • 이것은 CGsize, CGRect와는 다르게 "사각형"으로 간주됩니다.
    • Origin 과 너비, 높이를 포함하고 있습니다
    • 따라서 표현될때는 var rectangle = CGRect(origin: CGpoint(x: 0, y: 0), size: CGSize(width: 50, height: 30)) 이런식으로 표현될수 있습니다.

Frame and Bounds

  1. Frame
    • SuperView(상위뷰)의 좌표시스템 안(기준)에서 View의 위치와 크기를 나타냅니다
    • 상위뷰는 한단계위의 뷰를 의미합니다
      • 프레임의 x, y값은 상위뷰의 위치 안에서의 View의 위치와 크기를 나타냅니다
  2. Bounds
    • View의 위치와 크기를 자신만의 좌표시스템 안에서 나타냅니다.
    • 바운드의 위치를 변경하는 것은 해당위치에서 뷰를 다시그리라는 의미가 된다.
    • 여기서 위치는 뷰의 제한된 크기는 없다고 볼수있다. 무슨 말인가 하면 뷰가 100 x 100일때 이미지가 200 x 200 이면 이미지가 다시그려지는 위치에 따라서 뷰에 이미지가 보이는 그림이 달라진다는 것이다.
    • 만약 큰그림이 있고 뷰가 큰그림의 한지점을 보여준다고 했을때 뷰는 가만히 있는 상태에서 바뀐 위치에 대해 큰그림이 다시그려지면 마치 뷰가 그림을 움직인것 같은 상태가 된다.

Scailing

  • ScaleToFill : 원본 이미지 비율에 상관 없이 ImageView의 영역에 들어가는것.
  • AspectFit : 원본 이미지 비율을 유지하면서 ImageView의 영역에서 이미지를 모두 표시하는것.
  • AspectFill : 원본 이미지 비율을 유지하지만 ImageView의 영역에 가득차게 표시하는데, 전체 이미지가 나오지 않고 비율을 유지하느라 짤릴 수도 있습니다.

https://jinshine.github.io/ 많은 부분을 참고했습니다