Передача изображения (загруженного из Firebase) в коллекцию View Cell на домашней странице - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь передать изображение между двумя контроллерами представления.Это изображение профиля текущего зарегистрированного пользователя, если оно есть.Изображение успешно загружено с Firebase.Он загружается на экране запуска вместе с именем пользователя.Если пользователь не вошел в систему, контроллер представления изменится на экран входа в систему, если вошедший в систему пользователь перейдет на домашний экран.Это экран запуска.И метка имени пользователя, и вид изображения чисты, поэтому пользователь не может видеть.

import UIKit
import Firebase

class LaunchScreen: UIViewController {

@IBOutlet weak var usernameLabel: UILabel!
@IBOutlet weak var userImage: UIImageView!


var ref : DatabaseReference!
var storage: StorageReference!

override func viewDidLoad() {
    super.viewDidLoad()
    ref = Database.database().reference()
    storage = Storage.storage().reference()

    checkUser()

    // Do any additional setup after loading the view.
}


func checkUser() {

    Auth.auth().addStateDidChangeListener { (auth, user) in



        if user != nil {
            let uid = Auth.auth().currentUser?.uid
            self.ref.database.reference().child("users/profile").child(uid!).observe(.value, with: { (snapshot: DataSnapshot) in

                if let dictionary = snapshot.value as? [String: AnyObject] {
                    let currentUser = dictionary["username"] as! String
                    let url = dictionary["photoURL"] as! String

                    let storageRef = self.storage.storage.reference(forURL: url)
                    storageRef.getData(maxSize: 1 * 1024 * 1024, completion: { (data, error) in
                        if let error = error {
                            print(error)
                        } else {
                            self.userImage.image = UIImage(data: data!)
                            self.reloadInputViews()
                        }
                    })


                    guard let image = self.userImage.image else {return}
                    self.usernameLabel.text = currentUser
                    let imageJPG = image.jpegData(compressionQuality: 1)
                    print(imageJPG?.count)

                    let defaults = UserDefaults.standard
                    defaults.set(self.usernameLabel.text, forKey: "user")
                    defaults.synchronize()


                }
            })
            _ = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false, block: { (timer) in
                let vc = self.storyboard?.instantiateViewController(withIdentifier: "homeVC")
                self.present(vc!, animated: true, completion: nil)

            })

            print("loggedIn")

        } else {
            _ = Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false, block: { (timer) in
            let loginvc = self.storyboard?.instantiateViewController(withIdentifier: "loginVC")
            self.present( loginvc!,animated: true, completion: nil)

            })
            print("loggedOut")

        }


    }
}

}

Это моя домашняя страница.где есть боковое меню.боковое меню открывается с левой стороны экрана, и на нем четыре ячейки представления коллекции.верхняя - это ячейка профиля, в которой будет отображаться имя пользователя и изображение профиля пользователя.это изображение, куда я хочу, чтобы загруженный пользовательский образ Firebase в launchScreenVC также передавался.

class home VC:  UIViewController {

  @IBOutlet weak var profileMenuButton: UIButton!


   override func viewDidLoad() {

    super.viewDidLoad()
    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.reloadData()
    }



  let blackView = UIView()
let collectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    let cv = UICollectionView(frame: .zero , collectionViewLayout: layout )
    cv.backgroundColor = UIColor.init(displayP3Red: 50/255, green: 51/255, blue: 51/255, alpha: 1)
    return cv
}()

@IBAction func profileMenu() {

    let width = view.frame.width - 60



    collectionView.frame =  CGRect(x: 0, y: 0, width: width, height: view.frame.height)

    blackView.backgroundColor = UIColor(white: 0, alpha: 0.5)
    blackView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleDismiss)))
    blackView.frame = view.frame
    blackView.alpha = 0
    view.addSubview(blackView)
    view.addSubview(collectionView)
    UIView.animate(withDuration: 1.5, delay: 0, options: .curveEaseOut, animations: {
        self.blackView.alpha = 1
        self.collectionView.frame = CGRect(x: 0 , y: 0, width: width, height: self.view.frame.height)
    }, completion: nil)
        handleSearchDismiss(searchView)


}

@objc func handleDismiss() {
    UIView.animate(withDuration: 0.5){

        if let window = UIApplication.shared.keyWindow {
            self.collectionView.frame = CGRect(x: 0 - (window.frame.width), y: 0, width: window.frame.width, height: self.collectionView.frame.height)
        }

        self.blackView.alpha = 0

    }
}
}

extension homeVC: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, {

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    if indexPath.item == 0 {
        let cell1 = collectionView.dequeueReusableCell(withReuseIdentifier: "ProfileCellID", for: indexPath) as! profileCell
        let defaults = UserDefaults.standard
        cell1.usernameLabel.text = (defaults.object(forKey: "user") as! String)
        cell1.usernameLabel.textColor = UIColor.lightGray
        cell1.usernameLabel.font = UIFont.boldSystemFont(ofSize: 25)
//            print(imageData)
//            cell1.profileImage.image = (defaults.object(forKey: "userImage") as! Data)


        return cell1
    } else if indexPath.item == 1{
        let cell2 = collectionView.dequeueReusableCell(withReuseIdentifier: "Settings", for: indexPath) as! settingsCell

        return cell2
    } else if indexPath.item == 2 {
        let cell3 = collectionView.dequeueReusableCell(withReuseIdentifier: "Favourites", for: indexPath) as! favouritesCell

        return cell3
    } else {
        let cell4 = collectionView.dequeueReusableCell(withReuseIdentifier: "Logout", for: indexPath) as! logoutCell

        return cell4
    }

 }
}

это класс ячейки профиля

class profileCell: UICollectionViewCell {



override init(frame: CGRect) {
    super.init(frame: frame)
    setUpViews()
}

let profileImage: UIImageView = {
    let imageView = UIImageView()
    return imageView
}()

let usernameLabel: UILabel = {
  let label = UILabel()
    return label
}()

func setUpViews() {




    addSubview(profileImage)
    addSubview(usernameLabel)
    profileImage.frame = CGRect(x: (center.x)-60,  y: 30, width: 120, height: 120)
    profileImage.layer.cornerRadius = (profileImage.frame.width/2)
    usernameLabel.frame = CGRect(x: (center.x)-60, y: 125, width: 120, height: 120)
    usernameLabel.textAlignment = NSTextAlignment.center


}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}


}

Любая помощь или советы будут с благодарностью!Спасибо, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...