본문 바로가기

분류 전체보기

(268)
[iOS] collectionView(_:cellForRowAt:)에서 중복 선언 및 호출되는 로직 간소화 | POP와 OOP, 프로토콜 composition 안녕하세요. 지난 포스트에서는 최근 진행중인 프로젝트에서 재사용 가능한 cell의 UI에서 특정 영역에만 UI가 서로 다른 경우, 하나의 cell에 데이터가 들어올 때마다 데이터에 맞게 레이아웃을 잡는 경우 vs 서로 다른 UI별로 cell을 만드는 경우 중 뭐가 성능상 좋은지 실험(관련 포스트 링크) 후 리빌딩 했었습니다. 이번 포스트에선 지난 포스트에서의 리빌딩 과정 중 collectionView(_:cellForRowAt:) 델리게이트에서 중복 코드가 너무 많이 보여서 프로토콜 지향적 + 객체지향 개념을 활용해 리빌딩한 경험을(리빌딩한 코드 관련 커밋 링크) 소개하려고 합니닷!! 프로젝트 구조 간단 소개 진행중인 프로젝트의 피드 화면입니다. 자세히 보면, 회색 영역은 ui가 같지만 이미지 영역은 서..
[iOS] 컬랙션 뷰cell에서 특정 영역만 다른 ui를 갖는 경우 단일 cell or 여러 개의 cell 중 뭐가 좋을까..? | UI 성능 실험 static vs dynmaic 안녕하세요. 오늘은 한 섹션에서 사용되는 reusable cell이 특정 영역만 다른 ui를 갖을 때, 하나의 cell안에 분기처리를 통해 레이아웃을 구성하는 것 vs 여러개의 cell을 등록하고 재사용 큐에서 꺼내오는 것 중 뭐가 성능이 더 좋을지 분석한 것을 정리하려고 합니다. 이번에 리펙터링한 코드의 PR 링크를 남겨두겠습니다[리펙터링 PR 링크].  현재 개발중인 프로젝트의 피드 화면입니다!!  피드에서는 컬랙션 뷰를 사용하고 있습니다. 위 사진에서 맨 왼쪽은 cell내부에서 사용되는 서브뷰들의 영역입니다. 포스트가 보여지는 하나의 섹션에서, 사용자가 올린 사진에 따라서 총 5개 정도의 사진 배치가 있습니다. 이렇게 회색 영역은 모두 같지만, 포스트 thumbnail 이미지에 개수에 따라 배치가 ..
[iOS] Dynamic TableViewCell in Runtime(with animation) | 테이블뷰 Deep dive #1 사전 지식 안녕하세요. 테이블 뷰를 기반으로 Runtime 때 사용자의 터치에 따라 dynamic한 tableView cell을 만들어 볼 것입니다. 이번 포스트에선 dynamic tableViewCell을 만들기 전에 알아두어야 할 사전 개념을 소개하려고 합니다 +_+ 호호.. 재밌습니다. 이 화면을 구현할 때 중요한 키워드입니다. tableView contentView UIView's intrinsicContentSize view's priority + hugging | compression resistance performBatchUpdates(_:completion:) vs beginUpdates() | endUpdates() NSLayoutConstraint's priority in UILayoutPrio..
[iOS] 알림 아이콘이 보여지는 언더바 세그먼트 | 세그먼트 컨트롤 커스텀 #2 안녕하세요. 세그먼트 개념 탐구 포스트#1에서는 세그먼트를 사용하는 방법을 소개했습니다. 이번 포스트는 세그먼트를 클릭할 때 전환되는 언더바와 UISegmentedControl의 items에 문자열들을 보여주는 label을 segmented control안에서 인스턴스로 찾아 각각의 레이블 안에 둥근 알림 뷰를 추가하도록 segmented control을 커스텀하려고 합니다. 깃허브 프로젝트 코드 링크입니다. 세그먼트를 누르면 빨간 아이콘이 사라지고, 특정한 경우에 특정 세그먼트에 빨간 아이콘을 생성하도록 호출하는 함수를 구현했습니다. final class RedIconBasedUnderbarSegmentedControl: UISegmentedControl { private lazy var underb..
[iOS] UISegmentedControl 탐구하기 | 세그먼트 컨트롤 커스텀 #1 안녕하세요. 이번 포스트는 세그먼트 컨트롤의 사용 방법과 커스텀을 소개하려고 합니다. 세그먼트 컨트롤은 items 개수에 따라 width가 같은 segment들이 있습니다. class ViewController { let segment = UISegmentedControl(items: ["Cherry Page", "Orange Page"]) override func viewDidLoad() { super.viewDidLoad() view.addSubivew(segemnt) NSLayoutConstraint.active([ segment.leadingAnchor.constraint(equalTo: view.leadingAnchor), segment.topAnchor.constraint(equalTo: vi..
[iOS] 뷰 컨트롤러 강한 참조 발생 경험와 해결 방법. Strong reference closure | ARC 진짜 뿌수기 #1 안녕하세요: ] 이번 포스트는 ARC와 RC(retain count), strong reference cycle에 대한 간단한 개념을 정리할 것입니다. 포스트의 후반부에는 제가 실제로 개발하며 때 런타임 때 viewController, coordinator와 navigation controller, closuer의 관계에서 발생된 strong referency cycle! 이슈관련해서 메모리가 증가됬던 경험과 해결 방법을 소개하려고 합니다 +_+ ARC와 RC란?! ARC와 RC를 탐구하기 전에 간단히 값 타입(Value type)과 참조 타입(Reference type)을 비교해보려고 합니다. Value type vs Reference type Swift는 크게 값(value)타입과 참조(refere..
[iOS] xcode pbxproj 충돌. pbxproj merge confilt를 자동으로 할 경우 문제와 해결 방법 파해치기!!! | # 자동 병합?! 안녕하세요. 이번 포스트에선 xcode 프로젝트에서 실행버튼이 막혔을 때, 그리고 pbxproj 자동 병합의 장 단점에 대해 소개하려고 합니다. xcode 실행 버튼이 안열리는 이유 위 사진은 협업하다보면 자주 일어날 수 있습니다. 아니면 서로 다른 브랜치에서 혼자 만들었던 파일을 막 수정하거나 삭제한 후에 서로 다른 브랜치를 합칠 경우에도 발생될 수 있습니다. 이 경우는 pbxproj 파일 내부 코드에서 깃 충돌이 났을 때, 병합 충돌을 표시해주기 위해 추가적으로 삽입되는 코드들 때문에 실행이 안되는 것입니다. 이 충돌을 해결하기 위해선 위와 같은 경로로 들어가서 project.pbxproj 파일의 코드를 수정하면 됩니다. ( 깃허브에서 제시한 충돌 내용을 제거하면 됩니다. ) 이렇게 충돌이 난 이유 ..
[iOS] 컬랙션 뷰 Flow -> Compositional layout으로 리펙터링하기 #1 안녕하세요. 이번 포스트에서 컬랙션 뷰 flow layout으로 구현했던 기존 여행 앱 피드 화면을 compositional layout으로 리빌딩한 경험을 공유하려고 합니다: ] 리빌딩을 하게된 이유 왼쪽 동영상은 기존에 구현했던 화면입니다. 그리고 디자이너분이 새롭게 오른쪽 동영상처럼 더 이쁜 디자인을 만들어 주셨습니다. 피드 홈에서는 사용자의 여행 후기를 보여주는 포스트 cell로 이루어진 컬랙션 뷰로 위 화면이 구성되어있는데 기존 구현은 컬랙션 뷰의 flow layout을 이용했습니다. TableView vs CollectionView 선택 과정.. 피드의 cell 구성입니다. 컬랙션 뷰를 선택한 이유는 cell의 높이가 서로 다르기 때문입니다. (초기에는 thumbnail 영역 뷰 높이 또한 이..