目次
- 前回
- ユーザページを完成させる
- 感想
- 次回
前回
【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("不一致")
}
})
}
})
}
② 完成品
感想
今回の修正で、前回まで出来ていた画像の追加アップロードができなくなったので、
次回は、アップロードページを作りたいですね。
次回
【iOS】プログラミング素人の俺が、Swift + Firebaseを使って、インスタクローンを作る!【アップロードページ編】