안녕하세요 :) 블로그는 오랜만이네요. ㅇㅖ... 그동안 회사일에 치여 사느라 이제야 돌아왔습니다. 오늘은 스냅샷 테스팅에 대해서 포스팅해보려 합니다. 먼저 스냅샷 테스팅이 뭐냐? 스냅샷 테스팅은 UI 컴포넌트를 렌더링하여 스냅샷을 찍어두고 실제 결과와 저장된 스냅샷 파일과 비교하는 테스트 기법입니다. 현재 UI 스냅샷을 이전에 저장된 UI 스냅샷 이미지와 비교해서 두 이미지가 동일하면 테스트가 통과되고 두 이미지가 다르다면 테스트에 실패하게 됩니다. 스냅샷 테스팅 왜 하는데? 스냅샷 테스팅은 UI가 예기치 않게 변경되는 것을 막을 수 있습니다. 테스트를 위해 프로젝트를 하나 만들어줍니다. Podfile을 열어줄게요. pod 'SnapshotTesting' Podfile에 스냅샷 테스팅을 추가해 줍니다...
CGAffineTransform 아핀 변환에 대해서 살펴보려 합니다. CGAffineTransform 관련된 질문을 받게 되었는데 거의 까먹어서 다시 정리 (아이패드로 공부한 내용 그대로 가져오는 거라 발그림 죄송) 아핀 변환 언제 쓰나? 아핀 변환 행렬은 2D 그래픽을 그리는 데 사용됩니다. rotate, sclae, translate, skew 변환할 때 사용dd CGAffineTransform 여기서 CG는 CoreGraphics를 의미함. 스위프트에서 CGAffineTransform은 구조체로 정의되어 있으며, 아래와 같이 3x3행렬로 표시됩니다. 세 번째 열은 항상 (0,0,1)이므로 CGAffineTransform 데이터 구조에는 처음 두 열에 대한 값만 포함됩니다. 방정식 도출 왼쪽 행렬의..
오늘은 앱에 애드몹 배너 광고를 연결해보겠습니다. 0. 공통적인 부분 (애드몹 생성) 1. Swift 코드에 애드몹 연결하기 (몇 년 전 글 가져옴) 2. SwiftUI 코드에 애드몹 연결하기 0. 공통적인 부분 먼저 구글 애드몹에 들어가셔서 https://apps.admob.com/v2/home 앱 추가를 해줍니다. 그러면 아래와 같은 화면이 나올 거예요. (지금이랑 조금씩 다르면서 비슷함) 본인이 앱 스토어에 등록하셨으면 예 아니면 아니요를 눌러주세요. 저는 이미 등록한 프로젝트에 적용한 거라 예를 눌렀습니다. 앱 이름이나 개발자 이름 또는 앱 ID로 검색하면 프로젝트가 뜹니다. 원하는 프로젝트를 추가해주세요. 앱을 추가해주면 앱 ID가 생성됩니다. 여기서 생성된 앱 ID를 어디에 복사해놔 주세요. ..
이전에 커스텀한 버튼을 만든 적이 있었는데요 저는 제약조건을 수정해서 확장시켰는데 깃을 보다가 Ale Patron이 분의 방식이 좋아 보여서 기록해놓으려 합니다. 기존 코드에서 맘대로 조금 수정을 했습니다. 버튼이 정중앙에 배치되어있는데 오른쪽 하단으로 옮겼고 색상을 변경했습니다. 버튼의 텍스트와 함수명을 변경했습니다. 버튼 사이즈 상수는 ButtonPanelView에서만 사용되고 있어 클래스 내부로 들고 왔습니다. (내부로 들고 오면서 접근 제어자 fileprivate에서 private로 변경했습니다) 프로토콜은 클래스만 사용할 수 있도록 class로 수정했습니다. 버튼에 쉐도우 레이어는 제거했습니다. 그럼 다시 시작. class ButtonPanelView: UIView { private let bu..
Adopting Picture in Picture in a Custom Player 커스텀 플레이어에 PiP 적용하기 개요 커스텀 플레이어 UI에 컨트롤을 추가해 PIP 재생을 호출합니다. 살펴보기 AVKit프레임워크의 AVPictureInPictureController클래스를 사용해 커스텀 플레이어에 PIP 재생을 추가하세요. 이 클래스는 AVPlayerViewController에서의 PiP동작과 동일하게 커스텀 플레이어에서 구현할 수 있도록 해줍니다. 커스텀 플레이어 UI 업데이트하기 커스텀 플레이어에 UI를 추가하여 유저가 PiP를 재생할 수 있게 해야 합니다. 이 UI는 AVPlayerViewController에 의해 뜨는 시스템 기본 UI와 일관되어야 합니다. PiP 재생을 컨트롤하기 위한 표준..
스위프트 파일을 생성하면 기본적으로 임포트 되는 프레임워크가 있는데 바로 Foundation입니다.이는 필수적인 데이터 타입과 컬렉션 및 운영체제 서비스에 접근해 애플리케이션의 기본적인 기능을 정의하고 관리하는 프레임워크입니다. developer.apple.com/documentation/foundation 이러다가 사용자 인터페이스를 구현하고 이벤트를 관리하려면 UIKit를 임포트 시켜야 합니다. developer.apple.com/documentation/uikit 하지만 UIKit내부에는 Foundation프레임워크가 포함되어있습니다. 그렇기 때문에 Foundation 임포트 시키는 줄을 없애도 무방합니다. UIKit는 Foundation을 포함한 많은 다른 프레임워크를 가져오는 umbrella프레..
AVPlayerViewController 클래스 시스템을 지원하는 재생 컨트롤 플레이어 오브젝트의 비디오 콘텐츠를 표시하는 뷰 컨트롤러입니다. // AVPlayerViewController는 iOS 8.0 이상부터 사용 가능합니다. AVPlayerViewController를 사용하면 네이티브 시스템 플레이어와 스타일이 매칭 되는 앱에 미디어 재생 기능을 간단하게 추가할 수 있습니다. AVPlayerViewController는 시스템 프레임워크 클래스이기 때문에 앱에서는 따로 추가해줄 작업할 것 없도록 자동으로 기능을 채택하고 업데이트합니다. (AVPlayerViewController를 서브 클래싱 하거나 메서드를 재정의 하는 것은 지원되지 않습니다.) AirPlay 지원 AirPlay를 사용하면 유저가 ..
- Total
- Today
- Yesterday
- iOS SwiftUI
- swift5
- 독서
- 책 추천
- 애니메이션
- wwdc
- 책
- 스위프트UI
- Xcode
- RX
- 문자열
- string
- Algorithm
- 딥러닝
- swiftUI
- Animation
- 책 후기
- leetcode
- ReactiveX
- 스위프트
- 머신러닝
- ARC
- 알고리즘
- stanford SwiftUI
- Deep learning
- objc
- SWIFT
- rxswift
- ios
- objective-c
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |