iOS
-
pixel 과 points, dp의 관계 그리고 UIImageiOS 2024. 5. 10. 01:05
픽셀이란?픽셀 (Pixel)은 가장 작은 단위의 디스플레이 요소입니다. 흔히 "화소"라고도 불립니다. 픽셀은 RGB 색상을 조합해서 색을 표현합니다. 즉 Red, Green, Blue 에 대한 값을 저장합니다. 각 색을 채널이라고 한다면, 한 채널은 0~255까지의 값을 가질 수 있어서 2^8개의 값을 표현할 수 있습니다. 따라서 한 픽셀은 256 x 256 x 256 = 16,777,216 가지의 색상을 생성할 수 있다는 걸 의미합니다. 이를 트루 컬러 시스템 (True Color system) 으로 부릅니다. 해상도 = 가로 x 세로 픽셀의 총 개수이 픽셀의 가로 x 세로의 총 개수가 해상도가 되며, 당연히 더 높은 해상도는 더 선명한 이미지를 제공합니다. 밀도요즘은 높은 해상도의 사진, 영상 등을 ..
-
SwiftLint SPM으로 설치하기 (using Swift Package Build Tool Plugin)iOS 2024. 3. 22. 14:38
새 프로젝트에 lint를 적용해 보려고 하니, 기존에 cocoapods나 brew에 관련된 설명만 있고 spm만으로 설치하는 것에 대한 내용이 잘 없어서 적어본다. 설치 방법이 다양하듯이 lint를 실제로 사용하는 방법도 몇 가지 있는 것 같은데, 이것저것 설치하기가 싫어서 Swift Package Build Tool Plugins 로 설치했다. Swift Package Build Tool Plugins 3줄 요약 1. Target 'None' 으로 패키지 추가. 2. SwiftLintPlugIn 추가. (using Swift Package Build Tool Plugins) # 1. Add Package 먼저 SPM으로 패키지를 추가한다. 정석 방법 대로. 단! 이때 Target은 None으로 설정해줘..
-
swift concurrency 사용해 이미지 권한 얻기iOS 2023. 11. 29. 19:49
[ 💡 3줄 요약 ] iOS 14 부터는 이미지 권한을 얻는 새로운 api 가 추가됨. (async, closure 모두 지원.) limited status 가 생겼으니 deprecated 된 기존 권한 얻는 방식을 사용할 경우 주의가 필요함. Concurrency 로 구현한 코드. func hasPhotoLibraryAuthorization() async -> Bool { if #available(iOS 14, *) { let status = await PHPhotoLibrary.requestAuthorization(for: .readWrite) return status == .authorized || status == .limited } else { return await withCheckedCont..
-
Xcode 15 Jump to define 단축키 변경iOS 2023. 10. 31. 13:53
https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes The Show Code Actions command has been replaced with Show Quick Actions to quickly access any menu command. By default, Command-clicking a token in the editor now performs Jump to Definition. AS-IS cmd + ctrl + 클릭 TO-BE cmd + 클릭
-
UISlider 커스텀하기 - 1iOS 2023. 4. 12. 14:01
UISlider 만들어진 그대로 사용하긴 쉽지만 커스텀하기 시작하면 생각보다 쉽지 않네요.. 간단할 것 같지만 생각보단? 좀 찾아봐야 하는 것들 위주로 정리하려고 합니다. 이번 글은 1탄으로 thumb 를 교체 하는 방법입니다. 1. thumb 교체하기 교체하는 것 자체는 생각보다 간단하게 할 수 있습니다. setThumbImage 를 사용해주면 됩니다. class WSSlider: UISlider { required init?(coder: NSCoder) { super.init(coder: coder) self.setupThumb() } private func setupThumb() { let thumbImage: UIImage = ... self.setThumbImage(thumbImage, for:..
-
[Metal] MTKView > Drawing Mode (Configuring the Drawing Behavior)iOS/Metal 2023. 4. 5. 19:03
3줄 요약. 3가지 모드가 있음. 아무것도 설정하지 않으면 draw 가 계속 호출되는 Timed updates 임. 주로 게임이나 주기적 업데이트가 필요한 애니메이션에 사용됨. 필요할 때마다 draw 해주기 위해서는 enableSetNeedsDisplay = false 로 설정해서 Draw notifications 로 바꿔줘야함. 이러면 invalidates 가 있을 때만 호출됨. 보통 setNeedsDisplay() 를 호출함. 일반적인 앱에선 이걸 사용 자신만의 새로운 흐름을 만들기 위해서는 isPaused = true 로 설정함. 정확한 예시는 잘 모르겠음 3가지 Drawing Modes MTKView 는 3가지 Drawing Modes 를 지원합니다. 결정 변수 Drawing Mode 를 결정하는..
-
[cocoapods] Multiple commands produce '~~/Assets.car' 에러 해결법iOS 2023. 2. 23. 22:00
cocoapods 로 라이브러리를 배포할 때 리소스를 추가하려면 podspec 에 정의해줘야 합니다. 만약 podspec 에 아래와 같이 경로를 지정해줬는데 s.resources = '~~/**/*.{xcassets}' 아래와 같은 에러를 만났다면 pod 이 assets 를 copy 하면서 Assets.car 를 자동으로 만들어내 번들을 중복으로 되어 문제가 발생합니다. Multiple commands produce '~~/Assets.car' resources 는 deprecated 된 방법으로, 해결법은 resource_bundles 를 사용하면 됩니다. s.resource_bundles = { '새로 만들 리소스 번들명' => ['~~/**/*.{xcassets}'] } 아래에서 여러 방법들을 소개..
-
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..