Swift

    iOS - Image#1: Template Image

    이미지 렌더링 모드와 템플릿 이미지에 대해서 알아보도록 하겠습니다. 우선 버튼, 이미지 뷰, bar 버튼에 이미지를 넣을게요. 넣은 후 실행! 넣은 후 실행 상태입니다. 버튼과 이미지 뷰에는 원본 이미지가 등록되었지만 bar 버튼에는 템플릿 이미지로 등록되었습니다. 그 이유는 bar 버튼에서 이미지를 표시할 때는 템플릿 이미지를 표시하기 때문입니다. 그렇다면 원래 이미지는 사용하지 못하는 걸까요? 아니죠~ Render As에서 Default를 Original Image로 변경하면 사용할 수 있습니다. 이번에는 코드를 통해서 이미지들을 템플릿 이미지로 변경해보도록 하겠습니다.

    iOS - Image View

    안녕하세요:) 오늘은 이미지를 출력하고 간단한 애니메이션 효과를 구현하는 방법에 대해서 알아보도록 하겠습니다. 1. 프로젝트 생성 프로젝트를 생성 후 Image View와 Button 두 개를 추가해 주세요. 2. Image View 이미지는 종횡비가 중요한 요소기 때문에 특별한 이유가 없다면 Aspect Fit을 사용하거나 Aspect Fill을 사용합니다. Aspect Fill로 바꾸면 프레임을 벗어나는 부분이 생기는데 Clips to Bounds가 체크되어 있으면 프레임을 벗어나는 부분이 Clip 되고 체크를 해제하면 프레임을 벗어나는 부분도 다시 표시됩니다. 이미지는 텍스트와 크기를 비교해보면 상당히 큰 데이터입니다. 가능하다면 이미지 뷰의 크기와 같거나 유사한 크기를 가진 이미지를 사용하는 것이..

    Extension - 2

    1. Adding Initializer // 년,월,일을 파라미터로 받아서 날짜를 생성하는 생성자를 익스텐션으로 추가해보겠습니다. extension Date { init?(year: Int, month: Int, day: Int) { let cal = Calendar.current var comp = DateComponents() comp.year = year comp.month = month comp.day = day guard let date = cal.date(from: comp) else { return nil } self = date } } Date(year: 2020, month: 12, day: 14) // UI컬러 클래스에 새로운 생성자를 추가해보곘습니다. // extension으로 클래스..

    Extension - 1

    안녕하세요:) 이번에는 익스텐션으로 형식을 확장하는 방법에 대해서 알아보도록 하겠습니다. 1. Extension 형식을 확장하는데 사용합니다. 속성, 메소드, 생성자 같은 멤버들을 형식에 추가하는 것입니다. 익스텐션으로 확장할 수 있는 대상은 클래스, 구조체, 열거형, 프로토콜입니다. 기존 멤버를 오버라이딩 하는 것은 불가능합니다. 오버라이딩이 필요하다면 상속을 통해 서브클래싱 해야합니다. extension Type { computedProperty computedTypeProperty instanceMethod typeMethod initialzier subscript NestedType } extension Type: Protocol, ... { requirements } struct Size { v..

    Required Initializer & Failable Initializer

    꾸벅:) 모든 서브클래스에서 구현해야 하는 필수 생성자와 초기화 실패를 옵셔널로 처리하는 방법에 대해서 알아보도록 하겠습니다. 1. Required Initializer(필수 생성자) required init(param) { // 문법 } class Figure { var name: String required init(name: String) { // required를 사용하면 서브클래스에서 반드시 동일한 생성자를 직접 구현해야 합니다. self.name = name } func draw() { print("draw \(name)") } } class Rectangle: Figure { var width = 0.0 var height = 0.0 init() { width = 0.0 height = 0...

    Class Initializer

    안녕하세요:) 오늘은 클래스에서 구현하는 특별한 생성자에 대해서 알아보도록 하겠습니다 +..+ 1. Class Initializer Designated Initializer(지정 생성자)와 Convenience Initializer(간편 생성자)로 구분됩니다. Designated Initializer는 메인 생성자입니다. 메인 생성자는 클래스가 가진 모든 속성을 초기화해야 합니다. Designated Initializer의 수에는 제한이 없습니다. Convenience Initializer는 다양한 초기화 방법을 구현하기 위한 유틸리티 성격의 생성자입니다. Convenience Initializer는 반드시 모든 속성을 초기화해야 하는 것은 아닙니다. 보통은 필요한 속성만 초기화 한 다음에 클래스에 있는..

    심심풀이 - 3

    계산 결과 구하기

    iOS - Stepper

    안녕하세요:) 이번에는 Stepper를 활용해서 지정된 범위 내의 값을 증가시키거나 감소시키는 UI를 구현해보도록 하겠습니다. 1. 프로젝트 생성 2. UI 추가 Shift + Command + L Label, Stepper, Switch를 추가해 주도록 하겠습니다. Stepper의 Attributes inspector를 보겠습니다. value는 시작하는 값을 의미합니다. Minimum과 Maximum은 최솟값과 최댓값을 의미합니다. Step은 Stepper를 터치했을 때 증가시키거나 감소시킬 값의 크기입니다. Autorepeat가 선택되어 있으면 Stepper를 터치하는 동안 값이 반복적으로 업데이트됩니다. Continuous는 valueChanged 이벤트..

    iOS - Switch 사용법

    안녕하세요:) 오늘은 Switch를 활용해서 on/off 상태를 구현하는 방법에 대해서 알아보도록 하겠습니다. 1. 프로젝트 생성하기 우선 프로젝트를 하나 만들겠습니다. 2. 이미지 추가 Assets.xcassets를 선택한 후 이미지를 추가하겠습니다. 3. View 추가 Shift + Command + L ! Label, Image View, Switch, Button을 추가해 줍니다. 그다음 Attributes inspector에서 설정을 해주겠습니다. Label을 선택한 후 Attributes inspector에서 Font 크기를 50, Bold Style로 변경, Alignment에서 center! Image View를 선택한 후 image, highlighted에서 이미지를 전구 off, 전구 ..

    Initializer & Memberwise Initializer

    안녕하세요:) 이번에는 생성자와 인스턴스 초기화, 구조체가 제공하는 Memberwise Initializer에 대해서 알아보도록 하겠습니다~ 1. Initializer (생성자) 새로운 인스턴스를 생성하는 것을 초기화라고 합니다. 초기화를 담당하는 것이 생성자입니다. class Position { var x = 0.0 var y: Double var z: Double? // 속성을 옵셔널로 선언, 기본값을 저장하지 않으면 자동으로 nil로 초기화됩니다. // var z: Double? = nil init() { y = 0.0 // Initializer를 추가하고 속성에 기본값을 저장하면 정상적으로 초기화됩니다. } } let p = Position() class..