Lecture 5: Drawing

sun·2021년 12월 25일

유튜브 링크


# Any & AnyObject

  • Any 상태에서는 메서드 호출 불가능 "as?" 를 사용해서 타입을 지정해줘야 함

    • "as?" 는 다운캐스팅, 혹은 특정 프로토콜로 지정하는 데도 사용 가능
    • objective-c 와의 연결 목적 외에는 최대한 사용을 자제할 것
    • AnyObject 는 클래스에만 사용 가능
  • "as?" 를 사용해서 타입을 변환할 때는 변환이 불가능할 수도 있으므로 옵셔널을 반환

let unknown: Any = ... 
if let foo = unknown as? MyType {
    // foo is of type MyType so can use methods of MyType
}

segue

  • 한 MVC 에서 다른 MVC 로의 전환, 이동

# Views

  • UIView 의 서브클래스로 직사각형의 영역
    • 좌표계를 지니며
    • 그림을 그릴 수 있고
    • touch event 를 핸들링함
  • 계층적 구조
    • 하나의 view 는 superview 는 1개만을 가지나, subview 는 0 ~ n개
    • 보통 스토리보드를 이용해 계층을 형성하나,
    • addSubView(_:), removeFromSuperView() 메서드를 통해 코드로도 가능
  • UIWindow : 최상단의 UIView 로 iOS 에서는 1개만 존재
  • UIView 를 스토리보드에서 만들었는지, 코드로 만들었는지에 따라 init 이 다름
    • init을 쓰려면 둘 다 구현해야 함(최대한 init 사용을 지양할 것)
func setup() { ... }

override init(frame: CGRect) { // designated init (code case)
    super.init(frame: frame)  
    setup()                  // might have to be b/f super.init
}

required init?(coder aDecoder: NSCoder) {  // a required, failable init(storyboard case)
    super.init(coder: aDecoder)
    setup()
}
  • init 대신 init 직후에 호출되는 awakeFromNib() 메서드를 사용할 수도 있으나, 스토리보드를 통해 만든 UIView(엄밀히 말하면 NSObject 를 상속하는 모든 스토리보드로 만든 객체)에만 적용되며, 순서가 무작위

# bound vs frame

  • bound : view 가 그려지는 직사각형 내부의 위치와 크기로, 독립적인 좌표계를 가짐
  • frame : superview 의 좌표계 상에서 UIView 를 담고 있는 직사각형

bound 는 UIView 의 크기를, frame 은 superview 의 좌표계에서 UIView 의 위치를 지정한다고 생각하면 됨


# Creating Views

  • 보통 스토리보드를 이용해서 뷰를 생성하나 코드를 이용해서도 가능

# Custom Views



# Defining a Path


# UIColor

  • view 에서 opacity 는 디폴트가 1(완전 불투명)로 설정되어 있기 대문에, 투명도를 조정하고 싶다면 UIView 의 opaque 프로퍼티를 opaque = false 와 같이 설정해서 시스템에 알려야 한다.

# Layers

  • UIView 아래에는 CALayer(Core Animation Layer)가 존재
  • 애니메이션 외에도 유용한 메서드들이 있음

# Drawing Text


# Fonts


# Drawing Images



# Redraw on bounds change?


# Layout on bounds change?


☀️ 느낀점

  • 오늘은 거의 이론 수업이고, 후반부에 아주 살짝 새로운 앱의 모델만 만들다가 끝나서 이론 정리하려고 해도 적용을 안해봐서 무슨 내용인지 모르겠다...ㅋㅋㅋㅋ







  • you can't call methods on type Any
  • to use Any, we need to convert it using as?
    - as? could also be used for downcasting, or protocols
let unknown: Any = ... 
if let foo = unknown as? MyType {
    // foo is of type MyType so can use methods of MyType
}
  • segue : move from one MVC to another MVC

# view(i.e. UIView subclass)

슬라이드 정리

# initializing a UIView

profile
☀️

0개의 댓글