2017-09-20 11 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.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 
    } 
} 

같은 DispatchQueue을 사용해야하는 이유를 설명하는 link입니다 Swift 이것의 코딩 표준 link

+0

로드 속도가 빠르지 만 0.5-1 초와 같이 늦게로드됩니다. –

+0

이것은 비동기 호출을 수행하기 때문입니다. 서버에서 데이터를 다운로드하는 중 어떤 상황이 발생하여 실제로 서버가 늦게로드됩니다. –

+0

도움 주셔서 감사합니다. 그러나 그것에 대해 무엇을 할 수 있습니까? 이미지를 즉시로드하려면 어떻게해야합니까? –