본문 바로가기

전체 글43

[swift] SF Symbol & UIImage.SymbolConfiguration에 대해서 알아보자 UIImage(SystemName:) 지금까지는 간단하게 UIImage(systemName: "person.3.sequence.fill") 와 같은 방식으로 이미지를 만들어 왔지만, 렌더링 색상과 Configuration을 적용할 생각을 하지 않았는데요. 오늘은 시스템 이미지를 커스터마이징하여 사용하는 방법에 대해 살펴보겠습니다. SFSymbols SFSymbols는 애플에서 기본으로 제공하는 시스템 이미지입니다. XCode에서는 UIImage(systemName:)을 사용하여 호출할 수 있습니다. 이미지를 선택할 때 SFSymbols 내에 다양한 렌더링 종류와 종류에 따른 색상이 제공됩니다. 렌더링 색상으로는 단색(Monochrome), 계층(HierarchicalColor), 팔레트(PaletteCo.. 2023. 9. 3.
[Swift] weak 키워드와 Strong Reference Cycle delegate패턴과 메모리 누수이번 글의 내용은 프로토콜을 사용할 때 weak 키워드를 제대로 사용하지 않아메모리 누수가 발생하는 문제를 해결하는 방법에 대한 내용입니다.델리게이트 패턴 사용델리게이트 패턴을 사용하면 뷰컨트롤러에서 뷰에게 동작을 위임할 수 있습니다. 컬렉션뷰를 뷰컨트롤러가 아닌 뷰에 만들고 컨트롤도 위임할 수 있습니다.이를 위해서는 delegate = self와 같이 델리게이트를 설정해줘야 합니다.HomeViewfinal class HomeView: BaseView { // HomeViewController를 델리게이트로 위임 var delegate: HomeViewProtocol? lazy var collectionView: UICollectionView = {...}() ... } .. 2023. 8. 31.
[Swift] 비동기 호출 CallBack지옥과 DispatchGroup 서버에서 가져온 데이터를 화면에 표시 영화 데이터를 서버에서 요청하여 받아오는 작업을 할 때, 한 화면에서 여러 개의 데이터를 요청해야 하는 경우가 있습니다. 예를 들어, 해리포터와 관련된 영화 목록이나 트랜스포머와 관련된 영화 목록과 같은 영화 목록 데이터를 여러 개 받아오는 경우가 있습니다. 서버에서 받아온 데이터를 화면에 보여줄 때, CollectionView나 TableView를 통해 보여주게 됩니다. 이때, 언제 reloadData() 메서드를 호출해 뷰를 갱신시켜줄지에 대해 고민하게 됩니다. 예시 화면과 코드 var movieInfo1: [MovieResult] = [] var movieInfo2: [MovieResult] = [] var movieInfo3: [MovieResult] = [].. 2023. 8. 19.
[iOS 앱 개발]객체의 프로퍼티 변화를 감지하는 방법 - KVO 패턴 적용 방법 객체의 프로퍼디 변화를 감지하는 방법 UserDefault에 값을 저장하고, 저장된 값을 Label에 표시하는 앱을 만들면서 한 가지 고민이 생겼습니다. 그것은 UserDefault가 현재 ViewController에 정의된 객체가 아닌 외부에 있는 객체라는 것입니다. 그래서 UserDefault의 값을 추적하고 변화된 값을 현재 ViewController에 있는 Label에 반영하는 방법에 대해 고민하게 되었습니다. 앱 개요 우선 어떤 앱을 만들었는지 설명을 해보겠습니다. 앱의 요구사항 5가지의 감정 버튼을 누르면 값이 1씩 추가된다. 버튼을 길게 누르면 PullDownButton이 나오고 다양한 클릭 횟수와 리셋 기능을 추가해준다 추가된 값은 UserDefault에 저장해준다. 통계 탭에 UserDe.. 2023. 7. 26.
[iOS 앱 개발] ImageView에 터치 기능 추가(@IBOutlet Collection) 이미지를 버튼으로 만드는 방법 UI를 만들다 보면 버튼보다는 이미지를 넣어서 버튼처럼 동작하게 만들어야 할 때가 있다. UIImageView는 기본적으로 터치를 인식할 수 없다. @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() let tapGesture = UITapGestureRecognizer( target: self, action: #selector(imageTap(_:)) ) imageView.addGestureRecognizer(tapGesture) imageView.isUserInteractionEnabled = true } @objc func imageTap(_ sender:.. 2023. 7. 23.
[Swift] ReactorKit 기본 개념 👉 ReactorKit 개념 ReactorKit은 RxSwift를 기반으로 한 iOS 애플리케이션 아키텍처 패턴 중 하나로, View, ViewModel, Reactor로 구성됩니다. 이 패턴은 모든 사용자 입력과 시스템 입력에 대한 반응을 제공하며, 뷰와 상태 사이의 강력한 연결을 제공합니다. 이 패턴은 또한 깨끗하고 모듈화 된 코드를 작성할 수 있도록합니다. ReactorKit을 사용하는 이유 ReactorKit은 뷰와 뷰모델 사이의 결합도를 줄이고 코드를 모듈화하여 작성할 수 있도록 함으로써 애플리케이션의 구조를 단순화시킵니다. 또한 리액티브 프로그래밍을 사용하므로 코드의 가독성과 유지 보수성이 향상되며, 비즈니스 로직을 명확하게 분리할 수 있습니다. ReactorKit은 뷰모델과 리액터의 분리로 .. 2023. 7. 19.