【Swift 3】NSDataからUIImageに変換するのは重いのでバックグラウンドで処理する

NSDataからUIImageに変換

UIImageをCoreDataに保存したい場合は、一旦NSData(バイナリデータ)に変換してから保存します。この画像を再度利用したい場合は、保存しているNSDataをUIImageに変換すればいいのですが、普通に実行するとこの変換部分で処理が止まったような状態になります

こういう場合はバックグラウンドで処理すればOKです

// imageData(NSData)に画像のバイナリデータが入っている状態です

// 重い処理をバックグラウンドで処理する
DispatchQueue.global().async {
    
    // NSDataをUIImageに変換
    let myImage = UIImage(data: imageData as! Data)
    
    // 画面の更新はメインスレッドで行う
    DispatchQueue.main.async {
        
        // 表示するUIImageViewは非表示にする
        self.myImageView.alpha = 0.0
        
        // 画像をセットする
        self.myImageView.image = myImage
        
        // 画像の準備が完了したらUIImageViewを表示する
        UIView.animate(withDuration: 0.3, delay: 0.0, options: UIViewAnimationOptions.curveEaseOut, animations: {() -> Void in
            self.myImageView.alpha  = 1.0
            }, completion: {(finished: Bool) -> Void in
        })        
    }
}
タイトルとURLをコピーしました