์๊ฐํ๋ ๊ฒ ๋ณด๋ค ํจ์ฌ ๋ฐฉ๋ํ ๋ด์ฉ์ด๋ผ ์ ๋ฆฌ๊ฐ ํ์ํด ๋ณด์ฌ์ ํฌ์คํ ํด๋ด ๋๋ค.
ํด๋์ค, Privacy, ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ ์์ผ๋ก ์ดํด ๋ณผ ๊น ํฉ๋๋ค.
์ปจํ ์ธ ๋ชฉ๋ก
Privacy ๊ฐค๋ฌ๋ฆฌ ์ ๊ทผ ์ฌ์ฉ์ ๊ถํ (์์ง ์์ฑ์ค)
์ธ๋ค์ผ ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ
ํด๋์ค ์์๋ณด๊ธฐ
PHAsset : PHObject
ํฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ๋์ ์ด๋ฏธ์ง๋ ๋น๋์ค, ๋ผ์ด๋ธ ํฌํ ๋ฅผ ํํํ๋ค. ์์ ์ ์ด๋ฏธ์ง๋ ๋น๋์ค์ ๋ํ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ค.
static ๋ฉ์๋์ธ fecthAssets์ PHFetchResult๋ฅผ ๋ฐํํ๋ค.
๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ด๋ฏธ์ง ์์ฒด๋ฅผ ๋ถ๋ฌ์ค๋ ค๋ฉด ์์ฃผ ๋ง์ ๋ฉ๋ชจ๋ฆฌ์ ์์์ด ํ์ํ๋ค. ๋ฐ๋ผ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ง์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๋ฉด ํฌ๋์ฌ ๋๋ ์ผ์ด ๋ฐ์ ํ ์ ์๋ค.
์ฌ๊ธฐ์๋ ์ค์ ์ด๋ฏธ์ง๋ฅผ ๋ฐํ ๋ฐ์ ์ ์๋ ์ ๋ณด๋ ํฌํจ๋๋ค. ์ด๋ฏธ์ง๋ฅผ ๋ฐํ ๋ฐ์ผ๋ ค ํ ๋ PHImageManager๊ฐ ํ์ํ๋ค.
PHImageManager
๊ตฌ์ฒด์ ์ธ ์ด๋ฏธ์ง์ ๋น๋์ค๋ฅผ PHAsset ์ธ์คํด์ค๋ก๋ถํฐ ์ ๊ทผํ ์ ์๋ค.
PHCachingImageManager๋ ์ด๋ฏธ์ง ์บ์ฑ์ ๋ํ ๋ ๋ฒ๋ฌ์ง๋ฅผ ์ด์ฉํ ์ ์๋ค.
developer.apple.com/documentation/photokit/phimagemanager?language=objc
PHFetchResult
fetch ๋ฆฌํ์คํธ๋ก ๋ถํฐ PHAsses์ ์ฝ๋ ์ ์ผ๋ก ๋ด๊ณ ์๋ค.
PHFetchOptions
์ด๋ค ์์ ์ ์์ฑํ๊ณ ํํฐ๋ง ํ ๊ฒ์ธ์ง์ ๋ํด ์ ํํ๊ฑฐ๋ ๋ฐ๊ฟ ์ ์๋ค.
PHPhotoLibrary
์ ๋ณด๋ฅผ ์์ฒญํ๊ณ ๊ฐค๋ฌ๋ฆฌ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค. ๋ํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๊ฐค๋ฌ๋ฆฌ์ ์ ๊ทผํ ์ ์๋ ์ฌ์ฉ์ ๊ถํ์ ์คฌ๋์ง ํ์ธํ ์ ์๋ค.
requestAuthorization
PHImageRequestOptions
ํฌํ ์์ ์ผ๋ก ํํ๋๋ ์คํธ ์ด๋ฏธ์ง ์ ์ก์ ์ํฅ์ ๋ฏธ์น๋ ์ต์ ์งํฉ๋๋ค. image manager ๋ก ๋ถํฐ ์์ฒญํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฏธ์ง์ ํ๋ฆฌํฐ๋ฅผ deliveryMode๋ก ์ง์ ํ ์ ์๋ค. PHImageRequestOptionsDeliveryMode enum์ ํฌํจํ๊ณ ์๋ค. ์ด๋ฏธ์ง ๋ฐ์ดํฐ ์์ฒญ์ ๋ํ ์ต์ ์ ์ง์ ํ ์ ์๋๋ฐ ์ฌ๊ธฐ์ deliveryMode ํ๋กํผํฐ๊ฐ ์ฌ์ฉ๋๋ค.
.opportunistic
์ฌ๋ฌ์ฅ์ ์ฌ์ง์ด ์๋์ ์ผ๋ก ๋ฐธ๋ฐ์ค์ ํ๋ฆฌํฐ, ๋ฐ์์ฑ ์๋ ํ๊ฐ ์ด์์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค.
.highQualityFormat
์ฌ๋ฌ์ฅ์ ์ฌ์ง์ ์ค์ง ๊ณ ํ์ง์ ์ด๋ฏธ์ง ์ ๊ณต๋ง์ด ๊ฐ๋ฅ. ๋ค๋ง ์ด ๊ธฐ๋ฅ์ ์ผ๋ง๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์๊ด์ฐ์ง ์๋๋ค.
.fastFormat
์ฌ๋ฌ์ฅ์ ์ฌ์ง์ ์ค์ง ๋น ๋ฅธ ์๋์ ๋ก๋ฉ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฏธ์ง์ ํ๋ฆฌํฐ๊ฐ ์ ํ๋ ์ ์๋ค.
--> ์ถ๊ฐ : ๋น๋์ค ๊ด๋ จ
AVAsset
๋น๋์ค๋ฅผ ํ์๋กํ๊ฑฐ๋ ์์ ํ๊ธฐ ์ํด์ ์์ ์ ์ฌ์ฉํ ์ ์๋ค.
AVPlayerItem
ํ๋ ์ด๋ฐฑ(?)์ ์ํ ๊ธฐ๋ฅ ๊ตฌํ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ
developer.apple.com/documentation/avfoundation/avplayeritem
์ฌ์ฉ์ ๊ฐค๋ฌ๋ฆฌ์ ์ ๊ทผํ๊ธฐ ์ํ Privacy
์ด๋ป๊ฒ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ ์ฌ ์ ์์๊น?
PHAsset์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ข ๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋๋์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ ์ค์ง ์๊ณ ์ด๋ฏธ์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ PHFetchResult ์ฝ๋ ์ ์ PHAsset์ผ๋ก ๋ด์ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฏธ์ง ์์ฒด๊ฐ ์๋๋ฏ๋ก ์ด ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ์์ผ ํ๋ค. ์ด๋ PHImageManager๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ฐํ ๋ฐ์ ์ ์๋ค.
requestImage(for:targetSize:contentMode:options:resultHandler:)
asset
PHAsset.fetchAssets(with: nil) ๋ฑ์ ํตํด ๋ฐํ ๋ฐ์ PHFetchResult ์ฝ๋ ์ ์ ์๋ PHAsset ์ค ๋ก๋ํด์ผ ํ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ ํํด ์ค๋๋ค. PHFetchResult<PHAsset> ์์ ํ์๋ก ํ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ํด ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ์ ์์ต๋๋ค.
targetSize
๋ฐํ ๋ฐ์ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ ๋๋ค.
contentMode
๋ฆฌํ์คํธํ ์ด๋ฏธ์ง ์ฌ์ด์ฆ๊ฐ ์ด๋ค ๋ชจ๋๋ก ๋ณด์ฌ์ผ ํ ์ง ์ค์ ํด ์ค๋๋ค. PHImageContentMode์๋ aspectFit, aspectFill์ด ์๊ณ aspectFit์ด default๋ก ์ค์ ๋์ด ์์ต๋๋ค. aspectFit์ ์ด๋ฏธ์ง ์ฌ์ด์ฆ์ ๋ง์ถฐ์ ์๋ฆฌ์ง ์๊ฒ ๋ฐฐ์น๋๊ณ aspectFill์ ์ด๋ฏธ์ง๊ฐ ์๋ฆฌ๋๋ผ๋ ํ๋ฉด์ ๊ฝ ์ฑ์์ง๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ ๋๋ค,,, ๐ง๐ง
์์ํ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ๋ฐ๋๊ฒ ์์ด์ ๋ซ์ด์ ธ๋ผ ๋ดค๋๋ฐ ํ์ง์ด ๋ฌ๋ผ์ง๋๋ค. (์ ํํ ์์๋ ๋ถ์ ์ ๋ณด๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค..์..)
.aspectFit์ ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ ํ๊ฒ์ ์ฌ์ด์ฆ์ ๋ง๋๋ก ์ค์ด๊ฒ ๋๊ณ .aspectFill์ ํ๊ฒ ์ฌ์ด์ฆ์ ์์ ํ๊ฒ ์ฑ์ฐ๋ ๋ฐฉ์์ผ๋ก ์ค์ผ์ผ์ ์ค์ด๊ฒ ๋ฉ๋๋ค.
์์ํ๋ aspectFit์ ์ ์ฌ์ง๊ณผ ๊ฐ์๋ฐ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์๋ํ๋ ๋ด ๋๋ค. ์ฐ์ scaleAspectFit์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ด๋ฏธ์ง ๋ทฐ ์์ฒด์ contentMode๋ก ์ง์ ํด ์ฃผ์๋ฉด ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค;;
resultHandler
func requestImage(for asset: PHAsset,
targetSize: CGSize,
contentMode: PHImageContentMode,
options: PHImageRequestOptions?,
resultHandler: @escaping (UIImage?, [AnyHashable : Any]?) -> Void) -> PHImageRequestID
resultHandler๋ฅผ ํตํด ๋ฐํ๋๋ ์ฒซ๋ฒ์งธ ์ธ์ UIImage์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์ฌ์ด์ฆ์ ์ต์ , ์ปจํ ์ธ ๋ชจ๋๋ฅผ ์ง์ ํ๊ณ ํด๋น ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ด๋ฏธ์ง๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์๋ณธ ์ด๋ฏธ์ง๊ฐ ํ์ํ ๊ฒฝ์ฐ
์ด์ฏค์์ ์๊ธฐ๋ ์๋ฌธ! ์ด๋ฏธ์ง ์ฌ์ด์ฆ๋ฅผ ์ ์ ์ฌ์ด์ฆ ๋๋ก ์ง์ ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ณธ ์ฌ์ด์ฆ ๋ณด๋ค ๋ ์๊ฑฐ๋ ํฐ ์ฌ์ด์ฆ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค (๋๋ถ๋ถ ๋ ์์ ์ฌ์ด์ฆ). ์ด๋ฏธ์ง์ ์ฌ์ด์ฆ๋ ์ค์ผ์ผ ๋๋ก ๋ณ๊ฒฝ๋์ด ์๊ณ ์๋ณธ์ ํ์ง์ด ์๋๊ธฐ ๋๋ฌธ์ ์๋ณธ์ ์ด๋ฏธ์ง๊ฐ ํ์ํ๊ฑฐ๋ ์ ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ targetSize๋ก ์ง์ ํ์ฌ ์ป์ด์จ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์๊ฐ ์์ต๋๋ค.
์์์ PHImageRequestOptions๋ฅผ ๋ด ์๋ค. ์ฌ๊ธฐ์ deliveryMode๋ฅผ ์ง์ ํ์ฌ ๊ณ ํ๋ฆฌํฐ์ ์ฌ์ง์ ๊ฐ์ ธ ์ฌ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ ์๋ฏ์ด ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ํ๋ฆฌํฐ๊ฐ ๋์ ์ฌ์ง์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ๊ณ ๋ ค๋์ง ์์ผ๋ฉฐ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค. ์ฌ์ง ๋ก๋ํ๋ ์๊ฐ์ด ๊ธธ๊ณ ์ฌ์ง์ ๋ก๋ํ๋๋ฐ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์ง์๋ ์์ฐ์ค๋ฝ์ง ์๊ฒ ๋ฉ๋๋ค.
๊ฐค๋ฌ๋ฆฌ ์์ฒด์๋ค๊ฐ ๋ณด์ฌ์ง๋ ์ด๋ฏธ์ง๋ ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ํ์ฉํด์ ๋นจ๋ฆฌ ๋ก๋ํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ฉฐ ์ด๋ฏธ์ง๊ฐ ํ์ํ ๊ฒฝ์ฐ ํด๋น ์์ ์ ์ฌ์ฉํด์ ํ์ํ ์ด๋ฏธ์ง๋ง ๊ณ ํ๋ฆฌํฐ๋ก ๋ฐ๋๊ฒ ์ข์ต๋๋ค.
let requestImageOption = PHImageRequestOptions()
requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat
์๋ณธ ์ฌ์ง์ ๊ณ ํ๋ฆฌํฐ ์ฌ์ง์ ๊ฐ์ ธ์ค๊ธฐ ์ํด deliveryMode๋ฅผ highqualityFormat ์ผ๋ก ์ง์ ํด ์ค๋๋ค.
requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat ๋ ๋ฌผ๋ก
requestImageOption.deliveryMode = .highQualityFormat์ด๋ ๊ฒ ์์ฑํ ์ ์์ต๋๋ค (์ค์ํํธ ์ข๋ค. ๋๋ฌด ๐ค)
let imageManager = PHImageManager()
imageManager.requestImage(for: asset,
targetSize: PHImageManagerMaximumSize,
contentMode: PHImageContentMode.default,
options: requestImageOption) { (image, info) in
}
์ต์ ์ ์์ ๊ฐ์ด ์ง์ ํด ์ค๋๋ค. ์ฌ๊ธฐ์ contentMode ๋ default๋ก ์ง์ ๋์ด ์์ผ๋ ํ์ํ ๋ชจ๋๋ฅผ ์ ํํด ์ค๋๋ค.
PHImageManagerMaximumSize๋ PHImageManager์ ์ ์ญ ๋ณ์๋ก์ ์๋ณธ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ๋ฆฌํ์คํธ๋ ๊ฐ์ฅ ์ต๋๋ก ๋ ๋๋ง ๋ ์ด๋ฏธ์ง๊ฐ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
์ด์ํ๊ฑฐ๋ ์๋ชป๋ ๋ด์ฉ์ด ์์์ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค
'๐ iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift 5 beginDisablingInterfaceAutorotation Ignoring ๋๋ฒ๊น (0) | 2021.07.12 |
---|---|
SF Symbol ๋ค์ด๋ก๋ ๋ฐ๊ธฐ xCode (0) | 2021.05.12 |
[Swift] ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด iOS (0) | 2021.03.24 |
[Swift] UIButton ๋ฒํผ ๋๋ฌ์ ํจ์ ํธ์ถ addTarget (์ฒ์ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ) (1) | 2021.03.23 |
[Swift]UITableViewDataSourcePrefetching ํ ์ด๋ธ ๋ทฐ์ ์ ๋ฐ์ดํฐ ๋ฏธ๋ฆฌ ๋ก๋ ์ํค๊ธฐ (0) | 2021.03.19 |
๋๊ธ