LoginSignup
3
2

More than 5 years have passed since last update.

【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る!【ユーザページ完成編②】

Last updated at Posted at 2018-03-08

目次

  • 前回
  • ユーザページを完成させる
  • 感想
  • 次回

前回

【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る!【ユーザページ完成編①】

ユーザページを完成させる

今回は、ユーザページの完成させる。(UI変更の過程で、多少修正する可能性あり。)
今回やる事は、

① Databaseからユーザネームと一言メッセージを取得し、表示させる。
② Databaseのuser/imagesにあるUIDを取得し、それを使って、画像を取得する。

をやる。

① コード

今回は、一部修正した部分だけを抜粋した。
元のコードを見たい方は、こちら

ImageViewController.swift
 //ダウンロードURL取得して、Storageからダウンロードする
        //ログイン情報取得
        let user = Auth.auth().currentUser
        if let user = user {
            //usercountからカウントデータを取得
            let usercount = self.ref.child("usercount/count")
            usercount.observe(DataEventType.value, with: { (snapshot) in
                let usercountStr = snapshot.value as? String
                let usercountInt = Int(usercountStr!)
                for u in 1 ... usercountInt! {
                    //user/imagesにあるUIDを取得
                    let userUID = self.ref.child("user/\(u)/UID")
                    userUID.observe(DataEventType.value, with: { (snapshot) in
                        let UIDstr = snapshot.value as? String
                        //ログインしたUIDとuser/imagesにあるUIDが同じ
                        if user.uid == UIDstr! {
                            //ユーザネームと一言メッセージを取得
                            let usernameData = self.ref.child("user/\(u)/username")
                            let usermsgData = self.ref.child("user/\(u)/msg")
                            usernameData.observe(DataEventType.value, with: { (snapshot) in
                                let username = snapshot.value as? String
                                let usernameStr = username!
                                let usernameLabel = UILabel(frame: CGRect(x: (w2 - 300) / 2, y: 100, width: 300, height: 40))
                                usernameLabel.text = "\(usernameStr)"
                                usernameLabel.textColor = .black
                                usernameLabel.textAlignment = .center
                                self.view.addSubview(usernameLabel)
                            })
                            usermsgData.observe(DataEventType.value, with: { (snapshot) in
                                let usermsg = snapshot.value as? String
                                let usermsgStr = usermsg!
                                let usermsgLabel = UILabel(frame: CGRect(x: (w2 - 300) / 2, y: 130, width: 300, height: 60))
                                usermsgLabel.text = "\(usermsgStr)"
                                usermsgLabel.textColor = .black
                                usermsgLabel.textAlignment = .center
                                self.view.addSubview(usermsgLabel)
                            })

                            //imgcountのカウントデータ値の存在確認
                            let imgCount = self.ref.child("imgcount/\(UIDstr!)/count")
                            imgCount.observe(DataEventType.value, with: { (snapshot) in
                                let Count = snapshot.value
                                var Countstr = Count as? String
                                if Countstr == nil {
                                    //存在しない場合、新規データ作成(countは0にする)
                                    self.ref.child("imgcount").child(self.userID!).setValue(["count": "0"])
                                    Countstr = "0"
                                } else {
                                    //UIScrollView初期設定
                                    let scView = UIScrollView(frame: CGRect(x: 0 , y: h2 - (h2 - 200), width: w2, height: h2 - 200))
                                    scView.isPagingEnabled = false
                                    scView.backgroundColor = .white
                                    //データから呼んだ値を、各変数にセットする
                                    var CountInt = Int(Countstr!) //数値化
                                    var CountValue = CountInt!   //強制アンラップ
                                    var CountUp = CountValue + 1  //カウントアップ
                                    //カウンタの初期設定
                                    let ud = UserDefaults.standard
                                    ud.set(CountUp, forKey: "count")
                                    //カウントダウン値
                                    var CountDown = CountValue
                                    //画像表示用UIImageView
                                    var ImgArray = [UIImageView](repeating: UIImageView(), count: CountValue + 1)

                                    //ダウンロードURLの存在確認
                                    if CountValue != 0 {
                                        for i in 1 ... CountValue {
                                            //ダウンロードURL取得
                                            let imageURL = self.ref.child("images/\(UIDstr!)/\(CountDown)/profile")
                                            ImgArray[i] = UIImageView(frame: CGRect(x: 0, y: CGFloat(newY), width: w2, height: w2))
                                            print(newY)
                                            print(imageURL)
                                            imageURL.observe(DataEventType.value, with: { (snapshot) in
                                                let url = snapshot.value as? String
                                                //ダウンロードURLを取得し、ImageViewに反映
                                                let strURL = URL(string: url!)
                                                //画像を配列に保存
                                                ImgArray[i].sd_setImage(with: strURL)
                                                scView.addSubview(ImgArray[i])
                                            })

                                            //高さを延ばす
                                            newY += Int(w2 + 50)
                                            scView.contentSize = CGSize(width: 0, height: newY)
                                            //カウントダウン
                                            CountDown -= 1
                                        }

                                        //処理後、初期値に戻す
                                        newY = 100
                                    } else {
                                        //アップロードボタン
                                        let add = UIButton(frame: CGRect(x: (w2 - 150) / 2, y: 150, width: 150, height: 30))
                                        //アップロードボタン設定
                                        add.backgroundColor = .red
                                        add.addTarget(self, action: #selector(ImageViewController.Imageadd(_:)), for: .touchUpInside)
                                        add.setTitle("アップロード", for: UIControlState())
                                        scView.addSubview(add)
                                    }

                                    self.view.addSubview(scView)

                                }

                                //imagesのデータの存在確認
                                let newUser = self.ref.child("images/\(UIDstr!)/\(Countstr!)/profile")
                                newUser.observe(DataEventType.value, with: { (snapshot) in
                                    let profile = snapshot.value as? String
                                    if profile == nil  {
                                        //データ値がない場合、新規データを作成
                                        self.ref = Database.database().reference()
                                        self.ref.child("images").updateChildValues(["\(self.userID!)": "userID"])
                                        print("新規ユーザー")

                                    } else {
                                        print("既存")
                                    }

                                })

                            })
                            print("ログインID")
                        } else {
                            print("不一致")
                        }

                    })
                }
            })
        }

② 完成品

・既に写真を投稿している場合
スクリーンショット 2018-03-09 0.20.20.png

・まだ投稿していない場合
スクリーンショット 2018-03-09 0.23.03.png

感想

今回の修正で、前回まで出来ていた画像の追加アップロードができなくなったので、
次回は、アップロードページを作りたいですね。

次回

【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る!【アップロードページ編】

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2