2017-09-20 5 views
0

私はユーザープロファイルの画像に使用するUIImageViewを持っています。しかし、画像は2〜3秒のように画面の最後に表示されます。ダウンロード方法は次のとおりです。UIImageはviewController swiftに2-3秒遅れて表示されます。

 @IBOutlet weak var ProfilePic: UIImageView! 



    override func awakeFromNib() { 
     FriendSystem.system.USER_REF.child(user.uid).observeSingleEvent(of: .value, with: { (snapshot) in 

      if snapshot.hasChild("imageUrl"){ 

       self.firebaseStorage.child("users").child(FriendSystem.system.CURRENT_USER_ID).getData(maxSize: 10*1024*1024, completion: { (data, error) in 
         let userPhoto = UIImage(data: data!) 
         self.ProfilePic.image = userPhoto 


       }) 
      } 


     }) 

    } 

どうすればこの問題を解決できますか?

答えて

0

私は実際にそれを解決し、私のような新生児が同じ問題に遭遇すれば、ここに投稿します。 FirebaseとSDWebImageを使用しました。こちらは linkです。これはFirebaseの公式サイトのものです。

// Reference to an image file in Firebase Storage 
let reference = storageRef.child("images/stars.jpg") 

// UIImageView in your ViewController 
let imageView: UIImageView = self.imageView 

// Placeholder image 
let placeholderImage = UIImage(named: "placeholder.jpg") 

// Load the image using SDWebImage 
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage) 
0

実行中のコードは別のスレッドで実行され、Appleによれば、すべてのUIアップデートはメインスレッドで実行する必要があります。ここでは、すべてのUIの更新がメインスレッド

上になければならない理由を説明するが、だからあなたのコード内であなただけの別のノートでDispatchQueue

このような
DispatchQueue.main.async { 
    // please don't use implicit unwrapping of variables `data!` cause it may cause crashes, use if let statements instead 
    if let data = data { 
     let userPhoto = UIImage(data: data) 
     self.ProfilePic.image = userPhoto 
    } 
} 

を使用する必要がlinkです:

にお読みくださいSwiftこれのコーディング標準link

+0

これより速くロードされますが、0.5-1secのように遅くロードされます。 –

+0

これは、非同期呼び出しを行っているためです。何が起こるかは、データがサーバからまだダウンロードされているため、実際に遅くロードされる理由です。 –

+0

ありがとうございました。しかし、私はそれについて何ができますか?イメージを即座に読み込むにはどうしたらいいですか? –

関連する問題