👨🏻‍💻iOS 공부

    [iOS] UIImage resizing (feat. UIGraphics)

    UIImage resizing UIImage가 너무 큰 경우 보통은 auto layout을 통해 너비,높이를 잡아주거나 top,leading,trailing,bottom을 주어서 정해진 마진을 지키면서 이미지가 들어가도록 구현한 경험이 있을 것이다. 만약 이미지 자체의 크기를 조절하고 싶다면 위 방법으로는 해결이 되지 않을 것이다. 이에 사용할 수 있는 방식이 이미지 리사이징이다. 이미지 리사이징을 위해 사용되는 방법은 여러가지가 있지만 이번에는 UIGraphicsBeginImageContextWithOptions(_:_:_:)를 사용하는 방식을 알아보자. 간략하게 순서를 먼저 알아보자. UIGraphicsBeginImageContextWithOptions(_:_:_:)로 비트맵 만들기 UIView.dr..

    [iOS] WWDC16: Understanding Swift Performance 1

    WWDC16: Understanding Swift Performance 1 Swift의 여러 타입들 가운데 어떤 타입을 써야할지는 여전히 매번 고민이되는 주제이다. 참조가 필요없으니까 값 타입을 쓰거나, 복사가 필요해서 값 타입을 쓰는 등 보통은 단순한 이유에서 타입을 선택하기도 한다. 이에 본 세션에서는 나름 이유를 가지고 타입을 선택할 수 있도록 도움을 주고 있다. 0. 타입을 선택하는 기준 바로 모델링과 성능을 고려하여 타입을 선택할 것을 이야기하고 있는 것이다. 이번에는 모델링은 제쳐놓고 성능에 대해서만 이야기를 나눠본다. 주로 이야기 할 부분은 총 세 가지로 나뉜다. Allocation 메모리 할당에 관한 부분 Reference Counting 참조 관리에 관한 부분 Method Dispatch..

    [iOS] Modern Collection View - Grid 구현

    Modern Collection View - Grid 구현 앞선 글([iOS] Modern Collection View - List 구현)에서는 collection View를 활용하여 list 형태의 뷰를 구현하는 방식을 봤었다. 이제는 원래 collection View의 목적이라고도 할 수 있는(?) grid(격자)형태의 뷰를 구성해보자. (List 형태를 구현할 때와 코드가 거의 유사하니 이전 글을 참고해도 좋을 것 같다.) 이 또한 iOS 14이후의 버전에 대해 지원해주는 modern한 구현 방식이 있는데, 이를 알아보기 전에 기존 방식으로는 어떻게 구현했는지 살펴보자. 기존 collectionView 구현 방식 우선 그릴 화면을 먼저 보자. 가장 흔히 볼 수 있는 grid 형태의 뷰이다. 이를 구..

    [iOS] Modern Collection View - List 구현

    Modern Collection View 구현 iOS 14 이후부터 지원하는 기능으로 이전의 방법과 아예 다른 방식으로 collection view를 만들어주고 있다. 개괄적인 순서를 먼저 보고 하나 하나 예제 코드를 통해 살펴보자! 이번에는 List 형태의 collection view를 만들어 볼 것이다. 위와 같은 뷰를 보면 "테이블뷰로 만들었네!"라고도 할 수 있지만 collection view로도 동일한 뷰를 만들 수 있다. 이제 modern하게 collection view를 list 형식을 차근차근 살펴보자. (전체 코드는 맨 아래에서 확인 가능하다) 순서 1. CollectionView 만들기 (List) 2. CollectionViewListCell 생성 2-1. UIConfiguration..

    [iOS] URLSession Completion Handler와 Delegate

    URLSession Completion Handler와 Delegate 를 활용하여 데이터 받아오는 방법 URL Session을 통해 data task를 생성하고 메모리에 직접적으로 데이터를 받아보자. 서버와 자그마한 상호작용을 위해서는 URLSessionDataTask 클래스를 사용하여 메모리에 response data를 받을 수 있다. 만약 데이터를 파일 시스템에 다운로드 받아야 한다면, URLSessionDownloadTask를 사용하면 된다. data task는 웹 서비스를 호출할 때 이상적인 방법이다. task를 생성하기 위해 URL session 인스턴스를 사용하게 된다. 만약 간단한 경우라면 URLSession 클래스의 shared 인스턴스를 사용할 수 있다. 만약 delegate의 콜백을 ..

    [iOS] Dynamic Type에 따른 AutoLayout 조정하기 (feat. WWDC 2017)

    WWDC 2017 Building Apps with Dynamic Type를 보다가 마침 현재 프로젝트에도 있는 문제가 있어서 적용 가능해보이는 부분을 발견했다. 바로 UILabel이 나란히 2개 있는 상황에서 기기의 폰트 크기가 커짐에 따라 어떻게 레이아웃을 잡아야하는지에 대한 내용이었다. 당연히 텍스트 일부가 ...등으로 짤리면 안되고, 뭔가 텍스트의 줄바꿈이 이상하게 되어있어도 안된다고 이야기하고 있다. 딱 봐도 이상해보이긴 한다... 그래서 권장하는 방식은 텍스트 크기가 커졌을 때, 우측 UILabel을 좌측 UILabel 아래로 내리는 방법이다! WWDC에서는 아래와 같은 방법으로 구현할 수 있다고 이야기하고 있다. 우측 UILabel의 firstBaseline을 좌측 UILabel lastBa..