Skip to content

Latest commit

History

187 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Fluff_iOS


Work Flow


Commit Message

🔵 [Update], [Create], [Fix] ➡️ 커밋 메세지 형식 통일

🔵 한글로 변경된 폴더명, 기능 구현 순 ➡️ 커밋 메세지 통일


Code Convention

🔵 ViewController ==> ~~VC 로 파일 통일

🔵 변수명, 함수명 Lower Camel 사용

🔵 Extension 이름 ==> 확장클래스 + Extension

🔵 TableView, CollectionView 의 Delegate, DataSource

classViewController:UIViewController{}extensionViewController:UITableViewDelegate{}extensionViewController:UITableViewDataSource{}

🔵 Optional 변수 guard let 으로 바인딩하기


개발 환경

🔵 Xcode Version 11.3

🔵 Swift 5


라이브러리

✅ Alamofire

✅ KingFisher

✅ CHIPageControl

✅ XLPagerTabStrip

✅ BEMCheckBox

✅ Hero


실행화면

시작 화면


시작화면 애니메이션


회원가입


회원가입 Progress Bar


취향 분석


취향 분석 애니메이션


취향 분석 2


환영 화면


메인 화면


둘러보기


필터 애니메이션


상세 정보


주문하기


장바구니


구매하기


구매하기 애니메이션


경매


경매 애니메이션


매거진


매거진 애니메이션


마이페이지


찜 목록



기능 소개

홈탭

기능개발여부담당
로그인/회원가입O동민
홈탭O태진
둘러보기O동민
경매동민
매거진O태진
마이페이지동민
찜목록X😞
팔로우X😞

세부기능

기능개발여부담당
SNS로그인X🧐
홈탭 세부정보O태진
둘러보기 필터동민
장바구니 담기O동민
장바구니 구매하기O동민
경매 소켓통신동민
매거진 애니메이션O태진
취향 추천O👨‍👨‍👧‍👧
플럽 추천O👨‍👨‍👧‍👧


어려운 것 해결한 것

  1. CollectionView 레이아웃 잡기 (DelegateFlowLayout 안잡힘)

🔵 Interface Builder AutoLayout 옵션에서 None으로 지정하면 코드로 지정한대로 설정

extensionViewController:UICollectionViewDelegateFlowLayout{
// 상, 하, 좌, 우 Inset 지정
func collectionView(_ collectionView:UICollectionView, layout collectionViewLayout:UICollectionViewLayout, insetForSectionAt section:Int)->UIEdgeInsets{returnUIEdgeInsets(top:8, left: spacingWidth, bottom:0, right: spacingWidth)}
// 세로 라인 Spacing 지정
func collectionView(_ collectionView:UICollectionView, layout collectionViewLayout:UICollectionViewLayout, minimumLineSpacingForSectionAt section:Int)->CGFloat{return20}
// 가로 라인 Spacing 지정
func collectionView(_ collectionView:UICollectionView, layout collectionViewLayout:UICollectionViewLayout, minimumInteritemSpacingForSectionAt section:Int)->CGFloat{return0}
// 각 셀 Size 지정
func collectionView(_ collectionView:UICollectionView, layout collectionViewLayout:UICollectionViewLayout, sizeForItemAt indexPath:IndexPath)->CGSize{returnCGSize(width: collectionView.frame.width, height: collectionView.frame.height)}}

  1. Animationable Property가 존재

1️⃣ frame

2️⃣ bounds

3️⃣ center

4️⃣ transform

5️⃣ alpha

6️⃣ backgroundColor

7️⃣ contentStretch


  1. ScrollView Delegate활용 PageControl ( ✅ CHIPageControl 사용 )

페이지 번호 계산

현재 x 위치로 View의 Width을 나누어서 현재 페이지 계산 ➡️ Int 값으로 환산을 하면 페이지 값이 나온다.

func scrollViewWillEndDragging(_ scrollView:UIScrollView, withVelocity velocity:CGPoint, targetContentOffset:UnsafeMutablePointer<CGPoint>){letpage=Int(targetContentOffset.pointee.x /self.view.frame.width)
pageControl.set(progress: page, animated:true)}

  1. UIView Blur 처리
varbackgroundEffectView:UIVisualEffectView! // Visual Effect을 넣을 수 있는 View
func setBlurView(){letblurEffect=UIBlurEffect(style: dark) // Blur Effect 넣을 수 있는 것 생성
backgroundEffectView.effect = blurEffect // UIVisualEffectView에 Blur효과 적용
}

  1. 전체 레이아웃이 제대로 적용 안되는 문제 iPhone 11 Pro Max 에서 작업 후 ==> iPhone 11 Pro에 적용할 경우 레이아웃이 Pro Max로 적용되어 Button의 Radius가 적용이 안됨
// Layout 관련 메소드 공부들 더 필요
// View의 SubView들의 레이아웃 관련해서 다시 잡아줄 필요가 있을 경우
// 이 함수에서 View들의 Layout을 다시 리셋시켜주면서 잡아준다.
// iPhone11 Pro Max를 기준으로 잡혀있던 것을 iPhone 11 Pro을 기준으로 다시 잡을 수 있게 해준다.
overridefunc viewDidLayoutSubviews(){
super.viewDidLayoutSubviews()initColorButtons()}

  1. StackView 이용 Animation 적용 AutoLayout 잡아주기

🔵 필터를 적용했을 때만 선택하는 메뉴에서 StackView을 활용 오토레이아웃을 잡아주었다. isHidden 옵션 활용

detailFilterView.isHidden =false
// setNeedsLayout 필요 isHidden 후 ==> 이 부분도 공부 필요
self.view.setNeedsLayout()UIView.animate(withDuration:1, delay:0, usingSpringWithDamping:0.8, initialSpringVelocity:0, options:.curveEaseInOut, animations:{self.view.layoutIfNeeded()
// 보통 isHidden 후 나타날때, 화면 버벅거리는 문제로 layoutIfNeeded() 필요
// 여기도 공부 필요
}, completion:nil)

  1. 가장 상위 View로 띄우기 (Navigation Bar, Tab Bar 위로 View가 올라옴)
guardlet window =UIApplication.shared.keyWindow else{return}
window.addSubView(UIView())

  1. Tabbar isHidden 을 Bottom에 Spacing이 생기는 문제
// hideBottomBarWhenPushed을 넘어가는 View에 설정
privatefunc setTabbar(){self.hidesBottomBarWhenPushed =true}

  1. 서버 데이터를 처리할 때, 서버에서 Key값 처리하는 경우

🔵 JSON 에서 항상 Key값은 String이니깐 CodingKeys라는 enum은 CodingKey라는 프로토콜을 채택하게 한다.

🔵 JSON 타입에서 name의 키가 있을 경우 ➡️ myName으로 대입

🔵 JSON 타입에서 age의 키가 있을 경우 ➡️ myAge으로 대입

structPerson:Codable{varmyName:StringvarmyAge:Int?enumCodingKeys:String,CodingKey{case myName ="name"case myAge ="age"}init(from decoder:Decoder)throws{letvalues=try decoder.container(keyedBy:CodingKeys.self)
myName =(try? values.decode(String.self, forkey:.myName))??""
myAge =(try? values.decode(String.self, forkey:.myAge))??nil}}

  1. Dictionary 타입 Value값으로 Sorting하기
// key, value 순으로 Sorting ==> value의 값을 기준으로 큰 값이 왼쪽에 오게 바꾸기
letsortedParameter= surveyResult.sorted{ $0.1> $1.1}letsortingKey=[sortedParameter[0].key,sortedParameter[1].key,sortedParameter[2].key]

  1. 키보드가 View 터치 Keyboard Down Event 발생
self.view.endEditting(true)

  1. NavigationBar에 BarButtonItem 코드로 추가하기
privatefunc setNaviBackButton(){self.navigationItem.leftBarButtonItem =UIBarButtonItem(image:UIImage(named:"10"), style:.done, target:self, action: #selector(popView))self.navigationController?.navigationBar.topItem?.title =""}@objcfunc popView(){self.navigationController?.popViewController(animated:true)}

  1. TableView 선택 후, 다음뷰로 넘어갔다 올 때 선택된 영역 해제하기
overridefunc viewDidDisappear(_ animated:Bool){
super.viewDidDisappear(animated)iflet index = myPageButtonTableView.indexPathForSelectedRow {
myPageButtonTableView.deselectRow(at: index, animated:true)}}

  1. TableView 밑줄 라인이 비는 현상 해결 ➡️ 비는 공간 없게
func tableView(_ tableView:UITableView, cellForRowAt indexPath:IndexPath)->UITableViewCell{guardlet cartCell = tableView.dequeueReusableCell(withIdentifier:"cartCell")as?CartTableViewCellelse{returnUITableViewCell()}
// zero로 주면 문제 해결 좌공간 Inset이 0으로 설정된다.
cartCell.separatorInset =UIEdgeInsets.zero
}

  1. 카메라 사용하기 UIImagePicker 사용

✅ Info.plist Camera, Galary 접근 권한 설정 필수, UIImagePickeroControllerDelegate 설정 필수

extensionFluvApplyVC:UIImagePickerControllerDelegate,UINavigationControllerDelegate{func openLibrary(){
imagePicker.sourceType =.photoLibrary
present(imagePicker, animated:false, completion:nil)}func openCamera(){ifUIImagePickerController.isSourceTypeAvailable(.camera){
imagePicker.sourceType =.camera
}else{}present(imagePicker, animated:false, completion:nil)}func imagePickerController(_ picker:UIImagePickerController, didFinishPickingMediaWithInfo info:[UIImagePickerController.InfoKey:Any]){iflet image =info[UIImagePickerController.InfoKey.originalImage]as?UIImage{
profileImage = image
profileButton.setBackgroundImage(profileImage, for:.normal)dismiss(animated:true, completion:nil)}}}

  1. NumberFormatter 사용 숫자 구분
// 3자리부터 단위 사용하게 구분
letnumberFormatter=NumberFormatter()
numberFormatter.style =.decimal
lettext= numberFormatter.string(from:NSNumber(value:styleData[indexPath.row].price))! +""

참가자

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages