Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ import Foundation

enum APIConstants {
// Base url
static let baseURL = "https://asia-northeast3-sopt-hackathon.cloudfunctions.net/api"
static let baseURL = "https://asia-northeast3-meew-server.cloudfunctions.net/api"

static let todoURL = baseURL + "/user/1"

//MARK: - SelectURL
static let readCharacterURL = baseURL + "/personality/list"
static let readCharacterURL = baseURL + "/personality"


}
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,23 @@
//

import Foundation
import Metal

// MARK: - CharacterData
struct CharacterRequestData: Codable {
let status: Int
let success: Bool
let message: String
let data: [CharacterRequestResultData]?
let data: PersonalityData?
}
struct PersonalityData : Codable {
let personalities: [CharacterRequestResultData]?
}

// MARK: - CharacterResultData
struct CharacterRequestResultData: Codable {
let id: Int
let name, description, imageUrl: String
let name, description, createdAt, updatedAt, mainImg: String
let imgUrl : [String]

enum CodingKeys: String, CodingKey {
case id, name, description
case imageUrl
}
}

156 changes: 84 additions & 72 deletions MEEW-Client/MEEW-Client/Screens/Select/Cell/SelectCharacterCVC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,76 +9,88 @@ import UIKit
import Kingfisher

class SelectCharacterCVC: UICollectionViewCell {

static let identifier = "SelectCharacterCVC"
var checkIconColor = ImageLiterals.checkIcon.redCheckIcon

@IBOutlet weak var characterImageView: UIImageView!
@IBOutlet weak var characterName: UILabel!
@IBOutlet weak var characterInfo: UILabel!
@IBOutlet weak var checkImageView: UIImageView!

override var isSelected: Bool {
didSet{
if isSelected {
self.layer.backgroundColor = UIColor.grey600.cgColor
self.layer.borderColor = UIColor.grey300.cgColor
self.checkImageView.image = checkIconColor
}
else {
self.layer.backgroundColor = .none
self.layer.borderColor = UIColor.grey500.cgColor
self.checkImageView.image = UIImage(named: "icn_roundcheck")
}
}
}

override func awakeFromNib() {
super.awakeFromNib()
setUI()
}

private func setUI() {
self.layer.cornerRadius = 8
characterImageView.layer.cornerRadius = 8
self.layer.borderWidth = 1.5
self.layer.borderColor = UIColor.grey500.cgColor
}

func setData(appData: SelectCharacterDataModel){
//✅ 서버연결 시 사용할 원래 코드
// let url = URL(string: appData.image)
// characterImageView.kf.setImage(with: url)
// characterName.text = appData.name
// characterInfo.text = appData.info

//❌ UI 점검용으로 사용할 코드
characterImageView.image = appData.makeItemImage()
characterName.text = appData.name
characterInfo.text = appData.description

switch(characterName.text) {
case "태양이" :
return checkIconColor = ImageLiterals.checkIcon.redCheckIcon
case "마음이" :
return checkIconColor = ImageLiterals.checkIcon.yellowCheckIcon
case "정직이" :
return checkIconColor = ImageLiterals.checkIcon.purpleCheckIcon
case "하늘이" :
return checkIconColor = ImageLiterals.checkIcon.blueCheckIcon
case "구름이" :
return checkIconColor = ImageLiterals.checkIcon.lightpinkCheckIcon
case "바람이" :
return checkIconColor = ImageLiterals.checkIcon.purpleCheckIcon
case "방향이" :
return checkIconColor = ImageLiterals.checkIcon.greenCheckIcon
case "꽃님이" :
return checkIconColor = ImageLiterals.checkIcon.orangeCheckIcon
case .none:
return checkIconColor = ImageLiterals.checkIcon.redCheckIcon
case .some(_):
return checkIconColor = ImageLiterals.checkIcon.redCheckIcon
}
}


static let identifier = "SelectCharacterCVC"
var checkIconColor = ImageLiterals.checkIcon.redCheckIcon
lazy var active: (() -> Void) = {}


@IBOutlet weak var characterImageView: UIImageView!
@IBOutlet weak var characterName: UILabel!
@IBOutlet weak var characterInfo: UILabel!
@IBOutlet weak var checkImageView: UIImageView!

override var isSelected: Bool {
didSet{
if isSelected {
self.layer.backgroundColor = UIColor.grey600.cgColor
self.layer.borderColor = UIColor.grey300.cgColor
self.checkImageView.image = checkIconColor
active()

if let text = characterName.text {
let count: Int = text.count

let startIndex = text.index(text.startIndex, offsetBy: count-3)// 사용자지정 시작인덱스
let endIndex = text.index(text.startIndex, offsetBy: count)// 사용자지정 끝인덱스
let sliced_str: String = String(text[startIndex ..< endIndex])
setNotification(name: sliced_str)
}
}
else {
self.layer.backgroundColor = .none
self.layer.borderColor = UIColor.grey500.cgColor
self.checkImageView.image = UIImage(named: "icn_roundcheck")
}
}
}

override func awakeFromNib() {
super.awakeFromNib()
setUI()
}

private func setUI() {
self.layer.cornerRadius = 8
characterImageView.layer.cornerRadius = 8
self.layer.borderWidth = 1.5
self.layer.borderColor = UIColor.grey500.cgColor
}


func setData(appData: SelectCharacterDataModel){
let url = URL(string: appData.image)
characterImageView.kf.setImage(with: url)


characterName.text = appData.name
characterInfo.text = appData.description

switch(appData.id) {
case 2 :
return checkIconColor = ImageLiterals.checkIcon.redCheckIcon
case 8 :
return checkIconColor = ImageLiterals.checkIcon.yellowCheckIcon
case 4 :
return checkIconColor = ImageLiterals.checkIcon.purpleCheckIcon
case 3 :
return checkIconColor = ImageLiterals.checkIcon.blueCheckIcon
case 6 :
return checkIconColor = ImageLiterals.checkIcon.lightpinkCheckIcon
case 1 :
return checkIconColor = ImageLiterals.checkIcon.purpleCheckIcon
case 7 :
return checkIconColor = ImageLiterals.checkIcon.greenCheckIcon
case 5 :
return checkIconColor = ImageLiterals.checkIcon.orangeCheckIcon
default :
return checkIconColor = ImageLiterals.checkIcon.redCheckIcon
}
}

func setNotification(name : String) {
NotificationCenter.default.post(name:NSNotification.Name(rawValue: "characterName"),
object: name)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import UIKit

struct SelectCharacterDataModel {

var id: Int
var image : String
var name : String
var description : String
Expand Down
75 changes: 42 additions & 33 deletions MEEW-Client/MEEW-Client/Screens/Select/Controller/SelectVC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import UIKit
class SelectVC: BaseVC {

var characterList:[SelectCharacterDataModel] = []
var characterName: String = "마음이"

@IBOutlet weak var selectCV: UICollectionView!
@IBOutlet weak var backgroundView: UIView!{
Expand All @@ -21,7 +22,11 @@ class SelectVC: BaseVC {
@IBOutlet weak var nextBtn: UIButton!{
didSet {
nextBtn.isEnabled = false
nextBtn.titleLabel?.textColor = .grey400
if nextBtn.isEnabled == false {
nextBtn.titleLabel?.textColor = .grey400
} else {
nextBtn.titleLabel?.textColor = .grey700
}
}
}
@IBOutlet weak var SelectCVCHeightConstraint: NSLayoutConstraint!{
Expand All @@ -34,17 +39,15 @@ class SelectVC: BaseVC {

override func viewDidLoad() {
super.viewDidLoad()
//✅ 서버연결 시 사용할 원래 코드
// getCharacterData()
registerCVC()
//❌ UI 점검용으로 사용할 코드
initEventDataList()
setUI()
getCharacterData()
setPager()
addNotiObserver()
}

private func setPager() {
pager.numberOfPages = characterList.count
pager.numberOfPages = 8
pager.currentPage = 0
pager.pageIndicatorTintColor = UIColor.grey500
pager.currentPageIndicatorTintColor = UIColor.white
Expand Down Expand Up @@ -86,24 +89,17 @@ class SelectVC: BaseVC {
selectCV.register(xib, forCellWithReuseIdentifier: SelectCharacterCVC.identifier)
}

//❌ UI 점검용으로 사용할 코드
private func initEventDataList(){
characterList.append(contentsOf: [
SelectCharacterDataModel(image: "img_taeyang_select", name: "태양이", description: "태양이는 이름 그대로 늘 맑고 긍정적이에요. 덕분에 모든 일에 적극적으로 참여하고 도전하죠."),
SelectCharacterDataModel(image: "img_maeum_select", name: "마음이", description: "마음이는 기여웡!"),
SelectCharacterDataModel(image: "img_jungjik_select", name: "정직이", description: "정직이도 기여웡!"),
SelectCharacterDataModel(image: "img_haneul_select", name: "하늘이", description: "하늘이는 넓은 마음씨를 가지고 있어요. 그래서 대부분의 상황에서 참을성있게 행동할 줄 알아요."),
SelectCharacterDataModel(image: "img_gureum_select", name: "구름이", description: "구름이도 기여웡!"),
SelectCharacterDataModel(image: "img_baram_select", name: "바람이", description: "바람이는 어디로 불지 모르는 성격이에요. \n그래서 계획적이기보다는 마음가는 대로 즐겁게 살아가고 있죠."),
SelectCharacterDataModel(image: "img_banghyang_select", name: "방향이", description: "방향이도 기여웡!"),
SelectCharacterDataModel(image: "img_kotnim_select", name: "꽃님이", description: "꽃님이도 기여웡!")
])
private func addNotiObserver() {
print("11")
NotificationCenter.default.addObserver(self, selector: #selector(alertCharacterName(_:)), name: NSNotification.Name(rawValue: "characterName"), object: nil)
print("22")
}

@IBAction func touchUpToGoToDoView(_ sender: Any) {
//싹 다 닉네임뷰로 이동하는걸로 변경해야함

CompletePopUp.loadFromXib()
.setDescription("나의 캐릭터가 마음이로 선택되었어요!")
.setDescription("나의 캐릭터가 \(String(describing: characterName))로 선택되었어요!")
.present()

DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { [weak self] in
Expand All @@ -122,6 +118,13 @@ class SelectVC: BaseVC {
selectCV.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
}

@objc func alertCharacterName(_ notification: NSNotification) {
print("33")
if let text = notification.object as? String{
characterName = text
}
}


}

Expand All @@ -130,7 +133,6 @@ extension SelectVC: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// self.selectedIndexPath = indexPath


}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
Expand All @@ -141,12 +143,16 @@ extension SelectVC: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: SelectCharacterCVC.identifier, for: indexPath) as? SelectCharacterCVC else {return UICollectionViewCell()}

// if indexPath.item == 0 {
// cell.isSelected = true
// }

cell.active = { [weak self] in
guard let self = self else {return}
self.nextBtn.titleLabel?.textColor = .grey700
self.nextBtn.isEnabled = true
self.nextBtn.layer.cornerRadius = 8
self.nextBtn.backgroundColor = .white
}

cell.setData(appData: characterList[indexPath.row])
//https://velog.io/@cooo002/ios-특정-collectionViewCell를-선택한-상태로-cell-생성하기

return cell
}
Expand All @@ -173,17 +179,13 @@ extension SelectVC : UIScrollViewDelegate {
// self.pageControl.currentPage = Int(roundedIndex)
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
//페이저 관련..!
let width = scrollView.bounds.size.width
let screenWidth = UIScreen.main.bounds.width

// 좌표보정을 위해 절반의 너비를 더해줌
let x = scrollView.contentOffset.x + (width/2)
print("x값. : ", x)
print("round값 : ", round(x/width))
let newPage = Int(round(x / width))

print("newpage값 : ", newPage)
if pager.currentPage != newPage {
pager.currentPage = newPage
}
Expand All @@ -202,15 +204,22 @@ extension SelectVC {
guard let response = successResponse as? CharacterRequestData else { return }
self.characterList = []
//설정해주는 부분



if let userData = response.data {
for charactor in userData{
let charData = SelectCharacterDataModel(image: charactor.imageUrl,
if let useData = userData.personalities {
for charactor in useData{
let charData = SelectCharacterDataModel(id: charactor.id, image: charactor.mainImg,
name: charactor.name,
description: charactor.description)
self.characterList.append(charData)
self.characterList.append(charData)
}
self.selectCV.reloadData()
// DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
// self.setPager()
// }
}

self.selectCV.reloadData()
}
case .requestErr(let msg):
print("requestERR \(msg)")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
<fontDescription key="fontDescription" name="SpoqaHanSansNeo-Bold" family="Spoqa Han Sans Neo" pointSize="18"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" title="다음">
<color key="titleColor" red="0.59607843137254901" green="0.59607843137254901" blue="0.59607843137254901" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color key="titleColor" red="0.13333333333333333" green="0.13333333333333333" blue="0.13333333333333333" alpha="1" colorSpace="calibratedRGB"/>
</state>
<connections>
<action selector="touchUpToGoToDoView:" destination="Y6W-OH-hqX" eventType="touchUpInside" id="IbD-NH-zha"/>
Expand Down