우선 저번 목표였던 Storage에 올린 이미지 삭제하기
storage.reference().child(removePlace).delete { error in
if let error = error {
print("Error removing image: \(error)")
} else {
print("Image successfully removed!")
}
}
이미지를 가리키는 경로에 .delete만 하면 쉽게 해결!
장소에 대한 점수를 주는게 필요하다.
그냥 숫자를 입력하거나 Picker로 해도 되지만 ⭐️ 로 표현하고 싶어서 라이브러리를 쓸까 하다가 만들 수 있을거 같아 시도해봤다.
0점에서 5점 기준으로 별모양으로 버튼 다섯개를 만들었다.
AddRate 클래스를 만들고
var buttonState = [Bool]()
init() {
for _ in 0...4{
buttonState.append(false)
}
}
버튼이 눌렸는지 상태를 저장하는 배열을 만들고 모두 false로 초기화해줬다.
빈 별모양에서 버튼 클릭 시 반개와 꽉 채운 별을 반복하도록 했다.
private func rateFill(buttons: [UIButton], index: Int){
if buttonState[index] == false{
buttons[index].setImage(UIImage(systemName: "star.leadinghalf.fill"), for: .normal)
buttonState[index] = true
}
else{
buttons[index].setImage(UIImage(systemName: "star.fill"), for: .normal)
buttonState[index] = false
}
fillStar(buttons: buttons, index: index)
clearStar(buttons: buttons, index: index)
}
버튼 다섯개가 들어간 배열과 인덱스를 받아 상태에 따라 선택한 버튼의 모양을 결정하고 선택한 이전 별들은 채우고, 뒤에 별들은 비워준다.
private func fillStar(buttons: [UIButton], index: Int){
var i = 0
while i < index {
buttons[i].setImage(UIImage(systemName: "star.fill"), for: .normal)
buttonState[i] = false
i = i + 1
}
}
private func clearStar(buttons: [UIButton], index: Int){
var i = 4
while i > index {
buttons[i].setImage(UIImage(systemName: "star"), for: .normal)
buttonState[i] = true
i = i - 1
}
}
func checkAttr(buttons: [UIButton], button: UIButton) -> Float{
var i = 0
while button != buttons[i] {
i = i + 1
}
rateFill(buttons: buttons, index: i)
if buttonState[i] == true {
return Float(i) + 0.5
}else{
return Float(i) + 1.0
}
}
장소 추가하는 뷰에서 AddRate 함수를 이용하면 별점주기 완성!
let rate = AddRate()
@IBAction func clickStar(_ sender: UIButton){
lblRate.text = String(describing: rate.checkAttr(buttons: rateButtons, button: sender))
}
처음으로 생각한대로 된거 같다 ☺️ 물론 한 번에 원하는 별이 안돼서 아쉽지만 이정도면 만족!
장소 정보 수정하기