swift 25

UICollectionView Custom Layout

※ 아래 글은 UICollectionView Custom Layout을 참고하여 일부 번역한 글입니다. UICollectionView Custom Layout UICollectionView는 iOS6부터 소개되었고, iOS 개발자 사이에 가장 인기있는 UI요소가 되었다. CollectionView는 레이아웃을 처리하기 위해 별도의 개체에 의존하는 data, presentation layer를 분리한 부분이 매력적으로 적용되었다. 레이아웃은 뷰의 배치 및 시각적 속성을 결정하는 역할을 한다. 보통 default로 FlowLayout을 사용하는 경우가 많다. 그러나 원하는대로 뷰를 정렬하기 위해 커스텀 레이아웃을 구현할 수도 있다. 이를 통해 View가 유연하고 강력하게 작동 할 수 있다. 아래 Pinter..

swift 2022.02.03

Dynamic Cell Size CollectionView

cell안의 Label크기에 따른 Dynamic Cell Resizing systemLayoutSizeFitting사용 systemLayoutSizeFitting이란? 제약조건과 지정된 우선순위에 따라 최적의 View크기를 반환한다. constraint가 설정된 상황에서 사용가능 parameter targetSize 선호하는 크기를 지정한다. 가능한 큰 크기의 View를 얻으려면 layoutFittingExpandedSize사용 가능한 작은크기의 View를 얻으려면 layoutFittingCompressedSize사용 horizontalFittingPriority 수평 constraints를 설정. fittingSizeLevel을 사용하면 targetSize의 width와 비슷한 width로 설정 ver..

swift 2022.01.25

Tabbar Paging With CollectionView

Tabbar Paging With CollectionView View구성은 총 세개로 구성 Tab CollectionView Indicator HighlightView Page CollectionView 적용 방안 tab터치 시 하단 페이지 스크롤 하단 페이지 스크롤 시 상단 탭메뉴 변경 상단 탭변경시 Indicator 변경 collectionView, highlightView 정의 private let tapBarCollectionView: UICollectionView = { let layout = UICollectionViewFlowLayout() layout.itemSize = CGSize(width: 80, height: 30) layout.minimumLineSpacing = 10 layout..

swift 2022.01.25

Carousel Effect

Carousel Effect 회전목마를 뜻하고 슬라이드 형태로 슬라이드되어 보여지는 UI CollectionView를 이용한 Carousel Zoom Paging효과 CollectionView cell에 마진이 있기때문에 scrollViewWillEndDragging Delegate를 사용하여 페이징 처리 (cell의 width와 cell사이 간격을 포함한offset에 collectionView의 Inset을 뺀만큼 스크롤) // CollectionView cell scroll func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity:CGPoint, targetContentOffset: UnsafeMutablePoin..

swift 2022.01.22

Image Optimizing

Image Memory Size 2048x1536 픽셀의 590KB size의 이미지를 앱에서 로딩하면 얼마의 메모리가 필요할까? 약 14MB(2048x1536x4/1000000), 픽셀당 4바이트 가정 매우 많은 메모리 소비 Image Rendring Process 1. Load(iOS는 압축된 이미지를 가져와 590KB를 메모리에 로드) 2. Decode(GPU가 읽고 이해할 수 있도록 decode, 이 과정에서 10MB라는 큰 용량 차지) Data Buffer -> ImageBuffer(Decoding을 통해 Data Buffer에 포함된 이미지 크기와 동일한 Image Buffer할당) 3. Render Image Buffer -> Frame Buffer(ImageView를 실제 화면에 Displ..

swift 2022.01.18

ImageCache

ImageCache 이미지 캐시로 이미지를 받아오는 로직은 총 3가지로 분류된다. 메모리 캐시 디스크 캐시 URL 요청 1. 메모리 캐시 NSCache사용 Key-Value쌍으로 이루어진 Generic Type의 클래스 메모리 영역 일부를 Caching으로 사용 단점: 앱이 종료되면 메모리에서 리소스가 해제되어 memory caching된 리소스 사라짐 캐시가 보유하는 최대 object수를 관리하는 countLimit설정 가능 캐시가 object제거를 시작하기 전에 보유할 수 있는 최대 총 비용을 설정하는 totalCostLimit설정 가능 2. 디스크 캐시 FileManager사용 데이터를 파일형태로 디스크에 저장 .cachesDirectory에 저장(Data Container/Libraray/Cach..

swift 2022.01.18

struct, class, enum

struct 여러개를 한번에 묶어 추상화 하는데 사용 call by value(값에 의한 호출) 복사의 개념(할당할 때 새로운 객체를 생성하고 변경이 일어났을때 복사) 상속 불가 Stack영역에 할당됨 struct B{ var num: Int = 0 } var test3 = B() var test4 = test3 test3.num = 199 print(test4.num) // test4는 test3과는 별도의 메모리에 관리되고 있으므로 test4.num은 0 class call by reference(참조에 의한 호출) 참조의 개념(할당을 할 때 메모리를 새로 할당하는 것이 아닌 메모리를 참조) 상속 가능 Heap영역에 할당됨 class A{ var num: Int = 0 } var test1 = A()..

swift 2021.12.14

URLSession

URLSession Network통신에 사용되는 데이터 전송 작업 그룹을 조정하는 객체 Apple에서 제공하는 네트워크 통신 API NSObject를 상속 URLSession 클래스 및 관련 클래스는 URL로 표시된 엔드포인트에서 데이터를 다운로드하고 엔드포인트로 데이터를 업로드하기 위한 API를 제공합니다. 또한 앱은 이 API를 사용하여 앱이 실행되고 있지 않거나 iOS에서 앱이 일시 중단된 동안 백그라운드 다운로드를 수행할 수 있습니다. 관련 URLSessionDelegate 및 URLSessionTaskDelegate를 사용하여 인증을 지원하고 리디렉션 및 작업 완료와 같은 이벤트를 수신할 수 있습니다. URLSession Task URL session에서 수행되는 특정 리소스 다운로드와 같은 작..

swift 2021.12.10

Method Swizzling

Method Swizzling Method Swizzling이란 원래의 메소드를 runtime때 다른 메소드로 바꿔 실행하는것 원하는 메소드로 바꾸면 메소드를 호출하기 전에 사용자 추적, 특정 기능을 수행할 수 있지만 버그 발생 가능 언제 사용할까? 서브 클래스를 만들어 사용하는것 보다 런타임때 특정 기능을 바꿔 사용할 때 특정 기능을 클래스&서브 클래스 모두 한번에 적용시키고 싶을 때 앱의 분석기능을 통합할 때 해당 메서드 대신 다른 메서드가 실행되도록 바꿀 때 사용 예제 extension UIViewController { class func swizzleMethod() { let originalSelector = #selector(UIViewController.viewDidLoad) let swizz..

swift 2021.12.10

Layout Update Method

View를 구성하고 레이아웃을 업데이트하는 메소드 1. draw() 2. layoutSubViews() 3. setNeedsDisplay() 4. setNeedsLayout() 5. displayIfNeeded() 6. layoutIfNeeded() draw() 전달된 사각형안의 reciever의 이미지를 그린다. CoreGraphics 및 UIKit의 프레임워크에서 뷰를 그리는 하위클래스들은 draw() 오버라이딩하여 구현 배경만 표시하는 View이거나 기본 layer객체를 사용하여 직접 컨텐츠를 구성하는 경우엔 사용 안해도됨 layoutSubView와 다르게 자식 view의 draw까지는 호출하지 않는다. ※ 이 메서드는 뷰가 처음 표시되거나 뷰의 보이는 부분을 무효화하는 이벤트가 발생할 때 호출된다..

swift 2021.12.09