SWIFT
-
UIScrollView image zoom 구현하기iOS 2023. 2. 15. 12:27
UIScrollView 관련해서 찾아보면 거의 가로, 세로로 스크롤 하는 방식들이 많이 나옵니다. 근데 의외로 줌 하는 방법들은 많지 않더군요.. 그래서 정리해봅니다! 사실 여러 방법들이 있는데 저는 ScrollView 에 새로 추가된 Content Layout Guide, Frame Layout Guide 등을 써서 하고싶어서 한참 삽질을 했던 것 같아요.. 결론부터 말씀드리면 zoom 을 위해선 이 layout guide를 따로 쓸 필요가 없다! 이렇게 받아들이고 나면 방법도 아주 간단합니다. 1. 스크롤뷰 추가 2. 서브뷰 추가 3. 서브뷰의 top, leading trailing, bottom 레이아웃을 스크롤 뷰에 맞춰준다. (content, frame layout 이 아님!) 4. scroll..
-
PHCachingImageManager requestImage 이미지 중복 SWIFT TASK CONTINUATION MISUSEiOS 2023. 2. 7. 19:17
PHCachingImageManager.default().requestImage PHAsset 에서 이미지를 가져올 때 해당 메서드를 사용합니다. 무심코 아래와 같이 option 없이 사용할 수 있는데요 PHCachingImageManager.default().requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: nil) { image, info in if let image = image { continuation.resume(returning: image) } } 이럴 때 주의해야 할 점이 있습니다. 이 함수는 기본적으로 비동기적으로 동작합니다. 비동기적으로 사용했을 때 Photos..
-
[PackageDescription] 재사용 가능한 코드를 쉽고 편리하게 관리하자Swift 2023. 1. 17. 15:38
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. Swift Package 는 메인 디렉토리에 Package.swift 파일이 필수로 필요합니다. 이 파일 안에서 package manifest 의 PackageDescription 라이브러리를 사용해 의존성, 리소스, 여러 옵션을 관리할 수 있습니다. 예로 SlothCreator: Building DocC Documentation in Xcode 프로젝트의 package.swift 파일은 다음과 같이 생겼습니다. 안에 "SlotCreator" 라이브러리를 갖고 있는 패키지를 정의했고 타켓 정보들도 명시할 수 있습니다. import ..
-
decode vs decodeIfPresentiOS 2022. 12. 14. 16:01
Codable 이후 필드명이나 코딩키만으로 직접 디코딩없이 파싱이 가능해졌지만, 그럼에도 별도의 처리가 필요하다면 여전히 디코더를 통한 생성자를 만들어줘야 할 때가 있습니다. 이때 필요한 decode 와 decodeIfPresent 의 차이는 "해당 필드가 존재하냐" 의 여부로 관점으로 생각해볼 수 있습니다. 다음 JSON 을 파싱하려고 할 때, { title: "woongs", subtitle: "decoding" } 다음과 같이 만들어볼 수 있습니다. 아직 딱히 문제는 없습니다. required init(from: decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) self.title = t..
-
Hello CombineCombine 2022. 10. 1. 16:44
공부한 내용을 바탕으로 생각을 정리한 글입니다. 잘못된 내용이나 수정 보완이 필요한 내용은 댓글로 알려주시면 감사하겠습니다. 핵심 요약 👨🏻💻 Combine 은 비동기 이벤트를 처리하기 위해 declarative Swift API 를 제공하는 프레임워크 입니다. Combine 의 3가지 핵심 개념은 Publisher, Operator, Subscriber 입니다. Publisher 가 이벤트를 방출하면, 그걸 Subscriber 가 받아주고, 중간에서 Operator 들을 사용해 원하는 형태로 이벤트를 전달합니다. Operator는 upstream 을 받아, downstream 을 내보내며, 순서를 건너뛰지 않고 다른 Operator 를 바꿀 수 없습니다. Combine Combine은 비동기 이벤트를..
-
Playground using Algorithms PakageSwift 2021. 10. 9. 14:48
오늘은 플레이그라운드에서 원하는 pakage를 import 해서 쓸 수 있는 방법을 알아보도록 하겠습니다! 이번에 새로 나온 내장 메소드들이 너무 좋아서 사용해보려고 했는데 이걸 위해선 import Algorithms 가 필요한데요 플레이 그라운드에서 이게 안되는거죠.... 오늘은 이걸 해볼거에요! 먼저 Playground 자체만 가지고는 패키지를 추가할 수가 없습니다 ㅠㅠ 전체적인 방법을 먼저 간략히 소개해드리면 workspace 생성 -> 여기에 포함되는 playground 생성 -> swift-algorithms 패키지 추가 이게 끝입니다. 간단하죠! 바로 해볼게요! workspace 생성 xcode를 켜서 workspace 만들어줍니다! playground 생성 이제 여기서 플레이그라운드를 생성해..
-
[Programmers] 스티커 모으기(2)Algorithm/Programmers 2021. 10. 9. 13:21
출처: https://programmers.co.kr/learn/courses/30/lessons/12971 분류: dp 접근 배열의 길이도 100,000 으로 크고 이 스티커를 뗄지 안 뗄지, 앞에껄 땠는지 안 땠는지 등등의 경우를 고려해줘야 하니 DP로 문제로 접근을 했어요. 그냥 배열의 첫 번째를 기준으로 잡으면, 이 스티커를 땔 경우 DP vs 떼지 않을 경우 DP 두 번의 DP를 구해서 최대를 구하면 되는 문제였네요 처음에 저도 이렇게 접근은 했는데 첫 번째 인덱스부터 DP, 마지막 인덱스부터 거꾸로 DP 라는 엉뚱한 풀이로 해서.. 꽤나 삽질을 했습니다 😰 풀이 일단 각 케이스의 0, 1번 기저 사례를 구해주고 2번 인덱스부터 점화식으로 적용해주면 됩니다. (사실 n이 3일 때는 하나밖에 땔 ..
-
[BOJ] 2178 미로탐색Algorithm/BOJ 2021. 10. 9. 13:03
출처: https://www.acmicpc.net/problem/2178 분류: BFS 접근 시작점부터 목적지까지 최단 경로를 찾는 전형적인 BFS 문제였습니다. 풀이 방법은 다양하겠으나 저는 거리를 담아두는 distanceMap 이차원 배열을 하나 만들어서 풀었습니다. import Foundation let rc = readLine()!.split(separator: " ").map { Int($0)! } var map = [[Int]]() for _ in 0..= 0, nc >= 0, nr < rc[0], nc < rc[1], distanceMap[nr][nc] == 0, map[nr][nc] == 1 else { continue } distanceMap[nr][nc] = distanceMap[r][..