본문 바로가기

IOS - Swift47

[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.
[iOS/Swift] accesstoken 저장이 안될때 애플로그인 구현중 accesstoken 저장이 안되는 문제가 생겻습니다. 제가 진행하려는 상황은 💡 애플로그인 버튼을 눌럿을 때 서버에서 idtoken, refresh , access 토큰을 반환받음 → 반환받은 refresh,access 토큰을 userdefault에 저장하고 저장된 userdefault 를 이후 페이지에서 사용함 그러기 위해서는 userdefault에 코드를 저장하고 저장이 되어있다면 다음 페이지에서accessToken 을 사용하고자 하는 코드를 구현하는 중이엿습니다. 해당 동작중, if문이 동작하게 햇는데 자꾸 else로 탈출을 하는 경우였습니다. 실패 1 AF.request(url, method: .post, parameters: parameters, encoding: JSONEn.. 2023. 5. 21.
[Swift/에러해결] [NSNUll pointsize] Sizunrecognized selector sent to instance 보통 이러한 에러가 발생한 경우에는 셀렉터 인스턴스가 함수에 제대로 전달되지 않았을 때 발생하는 오류입니다. 그러기 때문에 대부분의 경우 스토리 보드에서 @IBoutlet이 연결 이름이 바뀌엇을 경우가 대부분이엿습니다. 위처럼 노란색 경고가 떳을때가 대부분입니다. 하지만 [Nsnull pointsize] 가 앞에 뜬다면 해당 오류는 아닙니다. 애초에 unrecognized~~ 에러가 뜬다는것은 인스턴스가 전달이 제대로 되어있지 않다는것이고 전달이 안되는 이유는 저의 경우에 커스텀 폰트를 인식하지 못했기 때문입니다. 폰트파일+ infp.plist 에만 폰트를 넣었는데 target에서 추가로 해줘야 하는것을 놓쳐서 해당 에러가 낫습니다. target-copy Bundle Resource 에서 폰트를 추가하여.. 2023. 3. 29.