iOS
-
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..
-
이미지 포맷 요약 - 비트맵, 벡터 방식 / 손실 압축, 무손실 압축 / JPG, GIF, PNG, SVGiOS 2023. 2. 9. 15:40
비트맵/벡터 방식 손실/무손실 압축 포맷 특징 JPG(JPEG) 비트맵 손실 압축시 용량 줄일 수 있음 GIF 비트맵 무손실 색이 적어 품질 떨어질 수 있음 PNG 비트맵 무손실 투명도 표현 가능, 용량이 큼 SVG 벡터 무손실 확대,축소시 깨짐 없음, 애니메이션 가능 비트맵 방식 작은 픽셀이 모여 이미지를 만드는 형태. 확대하면 깨져보임 ex) JPG, GIF, PNG 벡터 방식 점과 선으로 이미지를 만드는 형태. 확대해도 깨지지 않음 ex) SVG 손실 압축 말 그대로 압축시 이미지 품질이 떨어지는 압축 방식 ex) JPG 무손실 압축 압축시 이미지 품질 손실이 없음 ex) GIF, PNG, SVG JPG(JPEG) 손실 압축 포맷 압축시 용량 줄일 수 있음 비트맵 방식 GIF 무손실 압축 포맷 색상..
-
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..
-
[iOS] 이미지 권한 얻기iOS 2023. 2. 3. 10:35
iOS에서 사용자의 이미지를 가져오려면 권한이 필요합니다. Info.plist 에 아래 권한을 추가해주면 사용자의 사진에 접근하려고 할 때 권한을 요청합니다. (Privacy - Photo Library Additions Usage Description 이 아닙니다. =_= 혹 추가해도 안 되면 잘못 넣은 건 아닌지 확인해보시길..) 아래 방법으로 명시적으로 권한을 확인할 수도 있습니다. 한번 거부했다면 사용자가 설정에 들어가서 바꿔줘야 하므로 권한에 따라 추가 작업을 해줄 수 있습니다. PHPhotoLibrary.requestAuthorization(for: .readWrite) { [weak self] state in switch state { case .authorized: ... } } PH 코드..