본문 바로가기

ios34

[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.
[Swift 5.5] Async / Await Swift 개발을 하다보면 Closure나 Completion Handlers를 사용하는 asynchronous(비동기) 프로그래밍을 많이 하게 된다. 이처럼 많은 비동기 작업, 오류 처리, 비동기 호출 간의 제어 흐름이 복잡할 때 문제가 된다. 많은 비동기 작업에는 수많은 tab이 들어간 deeply-nested closures가 필요하게 되고, 콜백은 오류 처리를 매우 어렵고 장황하게 만든다. 비동기 호출 간의 제어 흐름이 복잡할 때는 어떠한 closure가 completion handler에서 사용될 때, capture에 대해 신중하게 생각해야 하는 상황이 발생할 수도 있다. 그래서 나오게 된 것이 async와 await다. async와 await는 Swift 5.5부터 새로운 비동기 프로그래밍 패.. 2021. 12. 20.
if kakao 2021 - UI 테스트 경험기 if kakao 2020을 봤던게 얼마 안된 것 같은데 벌써 1년이 지나버렸어요! 그래서 오늘은 며칠 전 열렸던 if kakao 2021의 UI 테스트 경험기 영상에 대한 정리를 하려고 합니다. 아직까지 테스트 코드에 대해 잘 알지는 못해서 스스로에게 도움이 될 것 같아 영상을 보며 정리했습니다. UI 테스트 경험기 에서는 카카오톡에 UI 테스트를 도입해보며 겪었던 경험을 풀어주셨습니다. 다음 화면을 보면, UI Test에서 어플리케이션을 실행하고 버튼을 눌러 다음화면으로 이동하는 코드가 아주 간결하다는 것을 알 수 있습니다. 이렇게 처음 만난 UI Test는 간단하고 접근하기도 쉬워 보였습니다. UI Test UI Test의 API 동작은 크게 3가지로 묶어볼 수 있습니다. 조회 : 화면의 요소 조회 .. 2021. 11. 18.
이미지 캐시 처리와 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.
Swift 접근 제어자 (Access Control) 접근 제어자를 왜 사용할까 오늘은 iOS 개발을 할 때 다양하게 활용할 수 있는 접근 제어자에 대해 알아보려합니다. 규모 있는 어플리케이션을 개발하다보면 객체를 사용하는 입장에서 객체 내부적으로 사용하는 변수나 메서드에 접근함으로써 개발자가 의도하지 못한 오동작을 일으키게 될 수 있습니다. 이런 문제로부터 객체의 로직을 보호하기 위해서 적절한 접근 제어자를 통해 외부의 접근을 허용하거나 차단할 필요가 있습니다. 즉, 접근 제어자는 코드를 작성하는 module이나 source file에서 다른 파일에 있는 코드에 대한 접근을 명시적으로 작성하여 관리하는 것입니다. 여기서 module이란, 하나의 프레임워크를 말합니다. 우리가 Swift로 코드를 짤 때 필요에 따라 적절한 import 키워드를 추가하죠? 그.. 2021. 5. 7.
커뮤니케이션 패턴 (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.
CGRect, CGPoint, CGSize CGRect, CGPoint, CGSize는 iOS를 개발할 때 스토리보드를 사용하지 않고 코드로 View를 구현하다보면 자주 접할 수 있는 객체들입니다. 사용하다보니 무슨역할을 하는지는 감으로 알겠고, CGPoint랑 CGSize는 이름만으로도 무슨 객체인지 알 수 있겠는데 CGRect는 말로 설명하라그러면 딱 정의하기가 힘들더라구요?? 그래서 간단하게라도 CGRect가 무슨 객체인지 알아봤는데 정말정말 간단한 객체였습니다ㅋㅋ 그래도 머리로 아는 것과 말로 설명하는 건 또 다르니까 블로깅해볼게요! CGPoint와 CGSize 이름 그대로 CGPoint는 2차원 좌표계의 점을 나타내는 구조체이고, CGSize는 너비와 높이를 나타내는 구조체입니다. 사실 정말 이거 그대로예요. CGPoint는 좌표의 x값.. 2021. 4. 16.