본문 바로가기

전체 글59

[iOS/Swift] BottomSheet 구현하기 - 라이브러리 사용 We Want 네이버 지도의 Bottom Sheet 구현 UIPanGestureRecognizer를 사용하여 사용자의 터치에 따른 화면(View or ViewController)의 이동 구현 1) 사용한 라이브러리 - PanModal 구현 아이디어 - 전체 구조 TableView / View + Lable / Composition Layout 사용 각각 storyBoard로 구현후 bottomsheet로 나타나게 구현 맨 위부터 View + Label 가장 일반적인 vc TableViewController를 사용한 vc Compositional 을 이용한 vc (코드베이스 사용) 각각 해당 Button 분기처리 import UIKit import PanModal class ViewController: U.. 2023. 9. 10.
[iOS/Swift] Run Loop ( 2 / 2 ) Run Loop 작동원리 Run Loop는 루프를 수행할 때 2가지 Event Source를 수신합니다. 1. Input Source 다른 thread 나 App으로부터 온 비동기 이벤트를 전달합니다. 2. Timer 예약된 시간이나 간격마다 동기 이벤트를 전달한다. 위 그림에서 Thread에서 노란색 Run loop를 한 바퀴 도는 작업이 한 번의 실행이라고 가정한다면, 루프는 한 바퀴를 돌면서 Event들을 모아놨다가, 한꺼번에 처리하는 방식으로 작동하게 됩니다. 이 Run loop는 한 번 event source를 읽고 전달하는 과정이 끝나면 그대로 대기합니다. 즉, 내부적으로 반복 실행이 되지 않기 때문에 스레드 내에서 프로그래머가 while, for문을 통해 명시적으로 반복 실행시켜줘야 한다. .. 2023. 8. 27.
[iOS/Swift] Run Loop - (1 / 2) 💡레이아웃 이해하기 -1 RunLoop 편 런루프 애플문서 공식문서 런루프란? RunLoop 객체는 소켓, 파일, 키보드 마우스 등의 프로그래밍 입력 소스를 처리하는 이벤트 처리 루프이다. RunLoop 객체는 창 시스템 및 Port 객체와 같은 소스에서 마우스 및 키보드 이벤트를 처리합니다. 또한 RunLoop 객체는 Timer 이벤트도 처리합니다. 애플리케이션은 RunLoop 객체를 생성하거나 명시적으로 관리하지 않습니다. 시스템은 각 Thread 객체에 필요한 경우 RunLoop 객체를 생성하며, 애플리케이션의 메인 스레드도 포함됩니다. 현재 스레드의 run loop에 액세스해야 하는 경우 클래스 메서드 current를 사용하세요. RunLoop의 관점에서 볼 때, Timer 객체는 "입력"이 아닌.. 2023. 8. 20.
[iOS/Swift] UIkit image Resizing ( 크기 / 품질) 이미지 리사이징을 해야할 일이 생겨서 리사이징을 하는 방법을 찾던중 다양한 방법이 있는것을 알게 되었습니다. 하나는 공식적으로 메서드인 UIGraphicsImageRenderer 이고 다른 하나는 jpegData(compressionQuality:) 메서드를 사용하여 UIImage의 JPEG 압축하는 방식입니다. UIGraphicsImageRenderer란? Core Graphics 지원 이미지를 만들기 위한 그래픽 렌더러입니다. UIGraphicsImageRenderer는 iOS 10.0 이후에 사용할 수 있는 API로, 그래픽스 및 이미지 렌더링에 최적화된 컨텍스트를 제공합니다. 이를 사용하면 Core Graphics의 복잡한 API를 사용하지 않고도 스위프트 코드로 간단하게 이미지를 그릴 수 있습니.. 2023. 8. 6.
[iOS/Swift] Dependency Injection, 의존성 주입이란? Dependency. 의존성이란? 객체 지향 프로그래밍에서 Dependency, 의존성은 서로 다른 객체 사이에 의존 관계가 있다는 것을 말한다. 즉, 의존하는 객체가 수정되면, 다른 객체도 영향을 받는다는 것이다 예를들어 아래의 코드의 경우에는 class APart { var name: String = "A부품" class BPart { var name: String = "B부품" } class CGoods { // CGoods APart에 의존한다.(= 의존성이 생긴다.) // APart를 할당한다. (실제로는 네트워크 매니저 같은것들에서 사용됨). var a: A부품 = A부품() func printName() { print(a.name) } 이런식으로 CGoods 는 위의 두개의 part에 의존하.. 2023. 7. 30.
Managing the view hierarchy 에 관하여 - 1 JMT 프로젝트를 진행하면서 view의 layer에 대해서 문제 해결이 된 김에 해당하는 메서드들에 대해서 기록해보겟습니다. UIView의 공식문서중 Managing the view hierarchy 을 보면 UIView | Apple Developer Documentation An object that manages the content for a rectangular area on the screen. developer.apple.com 그중 제가 사용한 몇가지만 중점적으로 살펴본다면 가장 기초가 되는 SuperView - subView 개념입니다 SuperView는 모두가 아시는것처럼 가장 상위에 있는, 모든 View들을 담고있는 속성입니다(물론 상대적임) SubView는 view계층과 연관된 su.. 2023. 7. 2.
[WWDC 2022]Create parametric 3D room scans with RoomPlan 원본 작년에 소개된 Object Capture 현실 세계의 사진을 찍으면, RealityKit의 Photogrammetry API를 사용해서 앱에서 사용할 수 있는 3D모델을 만들어주는 기능 그 전에는 Scene Reconstruction API를 릴리즈 했었다. 공간의 대략적인 구조에 대한 정보를 제공해서, AR에 사용할 수 있도록 한다. 올해는 RoomPlan이라는 프레임워크를 새로 제공한다. LiDAR를 가진 아이폰이나 아이패드로 방을 스캔하면 방 3D 모델을 만들어준다. ARKit에서 제공하는 머신러닝 알고리즘을 이용해서 벽, 창문, 문, 화로, 소파, 탁자, 옷장 등의 물건을 식별한다. RoomCaptureView API를 쓰면 RealityKit의 스캐닝 프로세스를 실시간으로 사용해서 앱에 스.. 2023. 6. 11.
[iOS/Swift] Png 한장으로 애니메이션 효과주기 - CABasicAnimation 공식문서에는 총 4가지가 기술되어 있습니다. 1. Opacity를 설정하거나 2.배경색깔을 변경하거나 3. 위치를 변경하거나(왼쪽에서 오른쪽처럼) 4. 크기를 변경하거나 등의 기능을 지원합니다. 어려운 내용이 아니다보니 실사용 코드로 확인해보겟습니다. 간단하게 스토리보드에 이미지뷰를 올려주고 3xPng 사진을 넣었습니다. 공통 기본사항 //ViewdidLoad shakeAnimation(imageView: PresentImage) viewDidLoad 에 사용될 func를 지정해 줍니다. 투명해지기 //투명해지기 func shakeAnimation(imageView: UIImageView) { let animation = CABasicAnimation(keyPath: "opacity") animation.. 2023. 6. 4.
[iOS/Swift] UISegmentedControl - 스토리보드로 커스텀하기 참고 스토리보드에 segmentcontrol를 추가합니다. 레이아웃 설정이 완료된 상태에서 //... final class UnderlineSegmentedControl: UISegmentedControl { private lazy var underlineView: UIView = { let view = UIView() view.backgroundColor = .black addSubview(view) return view }() required init?(coder: NSCoder) { super.init(coder: coder) self.removeBackgroundAndDivider() self.setTitleTextAttributes([NSAttributedString.Key.foregroundC.. 2023. 5. 28.