Slide 12
Slide 12 text
struct ImageFile: Identifiable {
let fileURL: URL
static let maxThumbnailHeight: CGFloat = 50
…
// サムネイル画像の生成
func makeThumbnail(displayScale: CGFloat) async -> UIImage? {
guard let image else { return nil }
return await resizeImage(image, maxThumbnailSize: Self.maxThumbnailHeight, displayScale: displayScale)
}
// 画像のリサイズ
private func resizeImage(_ image: UIImage, maxThumbnailSize: CGFloat, displayScale: CGFloat) async -> UIImage? {
let originalSize = image.size
let maxDimension = max(originalSize.width, originalSize.height)
let shrinkFactor = maxThumbnailSize / maxDimension
let newSize = CGSize(
width: originalSize.width * shrinkFactor * displayScale,
height: originalSize.height * shrinkFactor * displayScale
)
return image.preparingThumbnail(of: newSize)
}
}
該当のコードを見てみる(ImageFile)
@MainActorが暗黙的に有効に
どのActorにも隔離されていない
nonisolatedなクラス
バックグラウンド
スレッドでの実行
(nonisolated async)
メインスレッドス
レッドで実行され
るように・・