본문 바로가기

iOS/iOS21

Swift 에서 선언된 enum을 Objc 코드에서 사용하기 개발하다보니 Swift 에서 선언된 enum 타입을 objc 코드에서 사용해야할 일이 있었는데요. objc 코드로 된 .m 파일과 .h 파일에서의 사용방법이 조금 다른 것 같아 게시글로 정리해두려 합니다. 무엇보다 objc 헤더 파일에서 swift 로 선언된 enum을 사용하는 방법은 검색해도 안나와서 결국 스스로 해결하지는 못했습니다..ㅎㅎ 그럼 빠르게 본론으로 들어가겠습니다. objc .m 파일에서 Swift 로 선언된 enum 타입 사용하기 일단 아래 코드처럼 Swift 로 enum이 선언되어 있다고 가정합니다. objc 파일에서 사용해야하니 @objc 키워드도 추가합니다. @objc enum FoodType: Int { case none case egg case milk case cake } 그럼.. 2023. 3. 13.
[Apple] userInteractionEnabled 본 게시글은 Apple Developer - userInteractionEnabled 를 해석한 글입니다. userInteractionEnabled "A Boolean value that determines whether user events are ignored and removed from the event queue." userInteractionEnabled는 User Event를 무시할지, 그리고 Event Queue에서 제거할지를 결정하는 Boolean 값입니다. userInteractionEnabled를 NO라고 설정했을 때는 touch, press, keyboard, focus event 가 무시되고, Event Queue에서 제거됩니다. YES라고 설정했을 때는 해당 이벤트들이 정상적으로.. 2023. 2. 24.
UIView의 각 코너마다 서로 다른 radius 적용하기 이전에 view.layer.maskedCorners 를 사용하여 특정 코너에만 radius를 적용해 본 경험은 있었습니다. 하지만 이번에는 각각의 코너에 서로 다른 radius 값을 적용해야 할 일이 생겨서 방법을 찾아보았고, 그 방법을 기록 및 공유해보려 합니다. 그럼 예시로 아래와 같은 뷰를 구현해보겠습니다. 보통 특정 코너에 radius를 적용하기 위해 사용하는 maskedCorners 는 left-top, left-bottom 의 14 px 짜리 코너만 적용하거나, right-top, right-bottom 의 4 px 짜리 코너만 적용하는 등, 특정 코너에 하나의 radius 값만 적용할 수 있었습니다. 하지만 제가 구현해야 하는 뷰는 위에 보이는 뷰처럼 특정 코너에는 14 px 의 radius.. 2022. 4. 19.
[Objective-C] 기본문법 (함수, 변수) 최근 Objective-C를 공부할 일이 생겼습니다. 그래서 기본문법부터 천천히 살펴보려 하는데, 이번에도 블로그에 기록해가며 공부하는게 기억에도 오래 남을 것 같아 게시글을 작성하게 되었습니다. 오늘은 Objective-C에서 아주아주 기본적인 문법들만 간단하게 살펴볼 예정입니다. 함수 선언 Objective-C에서는 .h (헤더파일) 과 .m 파일이 있습니다. 보통 .h 파일에 구현할 메서드와 변수를 선언하고, .m 파일에서 그 내용들을 구현하게 되죠. 그렇기 때문에 함수를 구현하기 위해서는 .h 파일에 어떤 메서드를 구현할건지 선언해주어야 합니다. 함수 구현 - 로 선언된 함수는 인스턴스 메서드, + 로 선언된 함수는 클래스 메서드입니다. 그래서 호출할 때에는 아래처럼 인스턴스 메서드는 self를 .. 2022. 1. 13.
Objective-C 와 Swift 혼용 사용하기 iOS에서는 Objective-C와 Swift를 한 파일에서 혼용하여 사용할 수 있습니다. 따라서 기존 프로젝트가 어떤 언어로 구현되어 있는지는 우리에게 영향을 주지 않습니다. 이번 게시물에서는 Swift에서 Objective-C 코드를 사용하는 방법을, Objective-C에서 Swift 코드를 사용하는 방법을 알아보겠습니다. Swift에서 Objective-C 사용하기 Swift에서 Objective-C를 사용하는 방법은 자동으로 브릿지 파일을 생성하는 방법과 수동으로 생성하는 방법이 있습니다. 자동으로 생성하는 방식은, Swift 파일을 생성할 때 Xcode에서 브릿지파일을 만들거냐고 물어봅니다. 이때 만들어달라고 하면 알아서 만들어주기 때문에 그대로 사용하면 됩니다. 따라서 아래부터는 수동으로 브.. 2022. 1. 13.
Displaying a Bottom Sheet in iOS 15 Using UISheetPresentationController 이번 게시물은 제가 AppCoda라는 메일구독서비스를 통해 매주 알림받고 있는 이슈들 중에서 Displaying a Bottom Sheet in iOS 15 Using UISheetPresentationController라는 게시물을 읽고, 한 번쯤 한글로 정리하면 나중에 도움이 될 것 같아 게시글을 작성하게 되었습니다. 언제나처럼 제가 읽히는대로 번역을 한 것이기 때문에 의역이 많고, 잘못된 언어선택이나 번역이 있을 수 있으니 그런 부분은 댓글로 알려주시면 바로 수정하겠습니다 :) SwiftUI가 릴리즈되면서, 누군가는 UIKit의 시대가 이제 끝난거냐고 묻습니다. 하지만 UIKit의 시대는 아직 끝나지 않았습니다. iOS 15에서 애플이 UIKit와 관련된 새로운 feature를 내놓았기 때문이죠! .. 2021. 7. 11.
이미지 캐시 처리와 NSCache 이미지 캐시 처리를 해봅시다! 최근 iOS 프로젝트를 하다가 이미지 캐싱 작업을 하기 위해 NSCache를사용했습니다! 자세히 모르는 상태에서 이미지 캐싱 부분을 구현하긴 했는데... 그래도 알고 넘어가면 더 좋을 것 같아서 NSCache에 대해 간단히 알아보았습니다! 일단 제가 Image Cache in Swift - 이미지 캐싱 사용해보기 와, NSCache란? 라는 게시글을 참고해서 구현한 부분은 아래와 같습니다. 1. 이미지 캐시 작업을 위한 싱글톤 클래스 ImageCacheManager를 생성합니다. 2. 이미지를 가져오기 전에, 캐싱된 내용에 해당 이미지가 존재하는지 먼저 검사합니다. 만약 캐시된 이미지에 해당 이미지가 존재한다면? 그 이미지를 사용하고 여기서 작업을 마칩니다. 만약 캐시된 이.. 2021. 6. 23.
CATransform3D 애니메이션 (1) 얼마 전에 YAPP 동아리 프로젝트를 진행하다가, 인스타그램 마이프로필 화면처럼 스크롤 했을 때 헤더뷰가 상단에 고정된 상태로 스크롤이 되어야 하는 화면을 구현해야하는 경우가 생겼어요! 아래처럼 말이죠.. 아 솔직히 구현하기 너무 까다로울거같다고 생각했거든요?? 그런데 저희 팀 iOS 개발자 분 중에 노란 기업에 다니시는 분이 계시는데, 그 분이 CATransform3DTranslate 로 간단하게 구현할 수 있다는 것을 샘플 코드로 만들어 보여주셨습니다..... 네.... ㅋㅋㅋㅋ 역시... 잘하심..ㅋㅋㅋㅋ 그래서 그 분이 만들어주신 샘플 코드가 어떻게 돌아가는지 제가 직접 분석해서 서비스 디자인에 맞게 재구현해서 결국 마이페이지 화면을 완성할 수 있었어요!! 어떻게 돌아가는지 대충 감은 잡아서 어찌.. 2021. 5. 15.
What's the difference between a singleton and a shared instance in Swift? 매주 AppCoda Weekly 라는 메일구독 서비스를 통해서 iOS 및 디자인에 대한 이슈와 소식을 접하고 있습니다. 그러던 중 며칠 전 받은 이슈 중에서 What's the difference between a singleton and a shared instance in Swift? 라는 게시물을 접하게 되었고, 이를 한글로 번역해서 게시글로 작성하고자 합니다. 영어로 읽히는 대로? 영어를 보고 한글로 읽히는대로? 네.. 그냥 제가 읽히는 대로 적어놨기 때문에 번역이 잘못되었거나, 제가 잘못 이해한 부분이 있을 수도 있지만 그런 부분은 댓글로 알려주시면 바로 수정해볼게요 😄😄 우리가 iOS에서 접할 수 있는 흔한 패턴은 앱 어디에서나 접근할 수 있는 인스턴스를 정의하는 패턴입니다. 그 예시로는 UR.. 2021. 5. 10.
Local Notification (로컬 푸시) 구현하기 대부분 앱을 사용하시다보면 푸시알림을 무수히 받아보셨을거예요. 저도 잠시 계약한 스타트업에서 진행하고 있는 프로젝트에서도 Push 알림을 구현해야한다고 하셔서 푸시알림에 대해 알아보려 합니다! 기본적으로 iOS의 push는 2가지가 있습니다. 로컬 푸시 (Local Notification) : 앱 자체로부터 push를 앱에 띄우는 것 서버 푸시 (Remote Notification) : 서버로부터 push를 앱에 띄우는 것 사실 제가 필요로 하는건 서버 푸시이지만, 서버 푸시를 하려면 뭐 certification과 provisioning profile을 등록하고... APNs에 연결해야하며... 애플 개발자 계정이 필요하고....어쩌구 저쩌구..... 너무 복잡해서ㅠㅠㅠ 일단 간단하게나마 로컬 푸시를 먼.. 2021. 5. 10.
커뮤니케이션 패턴 (Delegate, Notification, KVO, Target-Action) 보통 Delegate, Notification, KVO, Target-Action 같은 것들을 묶어서 커뮤니케이션 패턴 이라고 합니다. 이들이 커뮤니케이션 패턴으로 불리는 이유는 한 가지 공통점 때문인데요, 바로 특정 이벤트가 일어나면 원하는 객체에 알려주어 적절한 조치를 취하도록 한다는 점입니다. 즉, 객체 간의 소통을 위해 사용되는 것들입니다. 어떠한 객체는 그 자체로 존재하면서 다른 객체와 소통하고 싶을 뿐이지 다른 객체에 종속되어 동작하고 싶지는 않을 수 있습니다. 다른 객체에 종속되어 동작한다면 재사용성과 독립된 기능요소 측면에서 바람직하지 않기 때문이죠. 그래서 우리는 각각의 커뮤니케이션 패턴들을 알아볼 예정입니다 :) Delegation delegate는 보통 protocol을 정의하여 사용.. 2021. 5. 4.
Promises 보통 Swift에서 비동기처리를 구현할 때는 delegate 패턴을 사용하거나 RxSwift를 활용하는 등의 방법을 사용합니다. 저도 지금까지 개인프로젝트를 진행할 때 RxSwift에 익숙해질 겸 RxSwift+MVVM 구조를 적용하려고 노력했는데요, 이번에 동아리 프로젝트에서 RxSwift가 아닌 Promises를 사용해보자는 이야기가 나와서 Promises에 대해 한 번 알아보려 합니다. RxSwift는 주로 사용되는 기능들 외의 다른 수많은 기능들은 잘 사용되지 않을 때가 있는데요, 그래서 간단한 프로젝트에서는 사용되지 않는 기능들까지 pod파일로 가지고 있어야 해서 사용해야하는 메서드에 비해 파일의 양이 방대해집니다. 그래서 이번에 구현하려는 개인 프로젝트에서는 Promises를 연습해볼겸 Pro.. 2021. 4. 29.