이전에 커스텀한 버튼을 만든 적이 있었는데요 저는 제약조건을 수정해서 확장시켰는데 깃을 보다가 Ale Patron이 분의 방식이 좋아 보여서 기록해놓으려 합니다. 기존 코드에서 맘대로 조금 수정을 했습니다. 버튼이 정중앙에 배치되어있는데 오른쪽 하단으로 옮겼고 색상을 변경했습니다. 버튼의 텍스트와 함수명을 변경했습니다. 버튼 사이즈 상수는 ButtonPanelView에서만 사용되고 있어 클래스 내부로 들고 왔습니다. (내부로 들고 오면서 접근 제어자 fileprivate에서 private로 변경했습니다) 프로토콜은 클래스만 사용할 수 있도록 class로 수정했습니다. 버튼에 쉐도우 레이어는 제거했습니다. 그럼 다시 시작. class ButtonPanelView: UIView { private let bu..
@State 뷰 안에서 완전히 로컬라이즈 된 것. 얼럿 띄우기, 편집, 애니메이션과 같은 일시적인 상태에만 사용한다. View 구조체는 (read - only) 읽기 전용이다. 예로 SwiftUI가 모든 뷰를 유지하는 데 사용하는 변수는 let! 이다. let이면 immutable 하기 때문에 아무도 변경할 수 없으니까 어지럽힐 수도 없다. 또한 뷰 생성 시 초기화되는 변수 외에는 변수가 있는 것이 소용이 없다. 읽기 전용이거나 계산된 변수만 의미가 있다. 뷰는 대부분 "stateless"이어야 하며 모델을 그리는 역할을 한다. 그래서 대부분 뷰는 어떤 상태가 필요하지 않기 때문에 읽기 전용이다. 영구적인 상태는 모델에 속하고 일시적인 상태를 사용할 때 State를 사용한다. @State private ..
커스텀 로딩 뷰 만들기 간단한 로딩 뷰를 만들어 봅시다. 먼저 새로운 프로젝트를 생성해줍니다. 싱글 뷰 앱을 만들어줍니다. 저는 이름을 간단하게 LoadingView라고 지었어요. 로딩 뷰를 만들기 위해서 View를 생성해줍니다. User Interface섹션에서 View를 생성해줍니다. 이름은 LoadingView로 설정했습니다. 이것도 LoadingView라고 지으니까 프로젝트 명이랑 같아서 헷갈리긴 하네요. 하핫...😹(포스팅할려니 신경 쓰이기 시작한 네이밍) 여하튼 LoadingView를 만들면 xib파일이 생기게 됩니다. 그리고 이 뷰를 컨트롤 할 스위프트 파일을 생성해줍니다. UIView의 서브클래스인 LoadingView를 생성해줍니다. 그럼 LoadingView스위프트 파일이 생성됩니다. ..
UIViewPropertyAnimator UIViewPropertyAnimator는 iOS10에 소개된 클래스입니다. 이는 뷰의 변경 사항에 대해 애니메이션을 적용하고 해당 애니메이션을 동적으로 수정할 수 있는 클래스입니다. 또한 frame, center, alpha, transform를 사용해 인터렉티브 한 애니메이션을 가능하게 해 주며 타이밍을 제어할 수 있습니다. 예를 들어 뷰를 서서히 사라지게 하고 싶다면 애니메이션 블록에서 alpha 값을 1에서 0으로 변경해주면 됩니다. 애니메이션을 추가하고 싶다면 add 메서드를 사용하여 원래 애니메이션이 시작된 후 애니메이션 블록을 추가할 수도 있습니다. UIViewPropertyAnimator를 직접 사용해 봅니다. 아래 프로젝트는 슬라이더의 값에 따라 ..
애니메이션 옵션들 중 자주 사용하는 것들curveLinearcurveEaseIncurveEaseOutcurveEaseInOut // https://developer.apple.com/documentation/uikit/uiview/animationoptions에 살펴보면 더 많은 옵션들이 나와 있습니다. curveLinear 애니메이션 커브는 애니메이션이 지속되는 동안 균등하게 애니메이션을 발생시킵니다. curveEaseIn 애니메이션이 느리게 시작된 다음 애니메이션 진행 속도가 점점 빨라집니다. curveEaseOut 애니메이션이 빠르게 시작되고 완료되면 느려집니다. curveEastInOut 애니메이션을 느리게 시작하고 빠르게 가속화 한 다음 애니메이션이 완료되기 전에 느리게 합니다. 속도 그래프
사용할 CGAffineTransform는 구조체입니다. (https://developer.apple.com/documentation/coregraphics/cgaffinetransform) 가장 큰 특징은 뷰의 프레임을 계산하지 않고 CGAffineTransform을 사용해 2D 그래픽을 그릴 수 있습니다. 간단하게 사용 가능하기 때문에 자주 사용하곤 합니다. CGAffineTransform에서 사용되는 아핀 변환 행렬은 2D 그래픽을 그리는데 사용되는 행렬입니다. 또한 아핀 변환 행렬은 객체를 회전, 크기 조절, 변환 또는 기울기를 위해 사용됩니다. 아핀 변환을 직접 생성할 필요는 없고 구조체에 있는 함수를 호출해 뷰를 이동(translate), 조절(scale), 회전(rotate)합니다. Scale..
UIView는 애니메이트 되는 프로퍼티를 정의해놨습니다.frameboundscentertransformalphabackgroundColor 익숙한 이 프로퍼티들을 애니메이트 가능하게 하려면 애니메이션 클로저에서 value 값을 변경해주면 됩니다. 뷰를 생성해줍니다. default가 흰색이니 잘 보이게 black으로 설정하고 view에 내가 만든 myView를 넣어줍니다. #1 먼저 withDuration과 animations이 있는 메서드를 사용해보겠습니다. 클로저가 축약 가능하니 #1 과 #2가 같은 동작을 합니다. (저는 편하게 축약형으로 #2로만 작성하겠습니다. 편하신 방법으로 사용하시면 될 것 같습니다.) 검은색 뷰가 2초 동안 흰색으로 바뀝니다. 정의된 프로퍼티 중에 원하는 프로퍼티의 값을 변경..
- Total
- Today
- Yesterday
- RX
- 스위프트UI
- string
- ReactiveX
- 머신러닝
- 독서
- ios
- 딥러닝
- stanford SwiftUI
- 스위프트
- SWIFT
- objc
- rxswift
- Animation
- iOS SwiftUI
- swift5
- wwdc
- Deep learning
- 문자열
- 책 후기
- Algorithm
- objective-c
- ARC
- 책 추천
- swiftUI
- leetcode
- 책
- 알고리즘
- 애니메이션
- Xcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |