Skip to content

We-are-Ounce/OUNCE_iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

😸Ounce

We are Ounce‼️

똑똑한 집사들을 위한 기록장 Ounce.

고양이들은 입맛이 까다로워, 집사들은 성공확률이 높은 시도를 위해 먹여본 캣푸드를 따로 기록하고 있습니다. 저희는 이러한 집사들의 고민을 해결하기 위해 직관적인 기록, 서로의 목록 공유, 입맛이 비슷한 고양이 추천 기능을 제공하고 있습니다.

기록부터 선택까지, 온스가 함께합니다.

🍎 목차



📱 개발 환경

  • Xcode 11.5

  • iOS 13.0

  • Swift 5



🛠 Library

라이브러리 목적
Alamofire 서버 통신
Gedatsu 오토레이아웃 에러 디버깅 검출
Kingfisher 이미지 처리
SnapKit 코드 레이아웃 작성
SwiftKeychainWrapper 저장소 암호화를 위해서
Then 컴포넌트 코드 작성의 용이를 위해
YPImagePicker 사진첩 사용
UPCarouselFlowLayout Carousel effect
iOSDropDown DropDown 효과
CHIPageControl 인디케이터
SwiftGifOrigin GIF 이미지 사용


💻 기능 소개

기능 상세 기능 담당 구현 여부
스플래시 스플래시 준현 O
로그인 로그인 준현 O
회원가입 이메일 인증 준현 O
아이디 검증 준현 O
비밀번호 검증 준현 O
회원가입 준현 O
프로필 등록 프로필 등록 준현 O
홈 화면 정렬 주연 O
필터 주연 O
계정 선택 주연 O
계정 추가 주연 O
팔로워 호세 O
팔로잉 호세 O
설정 - O
프로필 수정 - O
설정 설정 메뉴 내부에서 로그아웃 주연 O
기록하기 기록 하기 윤진 O
제품 검색 윤진 O
제품이 없을시 제품 생성과 함께 기록 윤진 O
제품 제품 검색 준현 O
둘러보기 둘러보기 카드 뷰 호세 O
리뷰 추가 리뷰 추가 준현 O


📍 Screenshots

  1. Splash

  2. Login

  3. Signup

  4. Register

  5. Home

  6. Setting

  7. Post

  8. Browse



📚 Project



💡새롭게 알게 된 것

김호세

carousel effect에 대해 알게되었슴당 및 autoLayout를 programmatically로 구현 방법을 알게되었슴당 히힛😝

let labelName = UILabel().then {
     $0.textColor = .black
     $0.backgroundColor = .white
     $0.textAlignment = .center
     $0.font = UIFont.systemFont(ofSize: 13)
     $0.text = "가을이"
 } // Then을 이용해서, 라벨을 생성하고 가독성을 위해서 BrowseCvCell의 extension BrowseCVCell + constranint 을 만들었습니다. 그 후에

func initial() {  // Snapkit을 이용하여 programmatically autolayout을 설정 해주었습니다.
contentView.addSubview(labelName) //contentView 안에 그려주고

labelName.snp.makeConstraints { (make) in
         make.leading.equalTo(contentView.snp.leading).inset(88) // label의 leading을 contentView의 leading에 constraint를 걸었습니다.
                               
         make.trailing.equalTo(contentView.snp.trailing).inset(87) // label의 trailing을 contentView의 trailing에 constraint를 걸었습니다.
                               
         make.top.equalTo(imgCatView.snp.bottom).inset(-10) 
// label의 top을 그 label 위에 있는 컴포넌트 (imgCatView)의 bottom에 걸었습니다. 기준이 bottom 이므로 Inset 값을 음수로 설정하였습니다.                        
     }  
}

박주연

CollectionView보다 TableView가 더 좋다^^ 다 내꺼 호로록🥤

TableView middle cell 헤더에 고정시키기
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        
        if section == 1{
            return 49
        }
        else {
            return 0
        }
    }
    
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        
        if section == 1 {
            
             let headerCell = reviewTV.dequeueReusableCell(withIdentifier: "HeaderCell")
            
            return headerCell
        }
        else{
            let rect = CGRect(x: 0, y: 0, width: 0, height: 0)
            let myView = UIView(frame: rect)
            
            return myView
        }
        
    }

이윤진

NavigationController 연결 및 xib 활용 방법을 내가 정복했다🏋️‍♂️

xib 파일을 활용해서 뷰 재활용하는 걸 처음 시도해봤다,,,신기방기,,,
    let custom = Bundle.main.loadNibNamed("PostSC", owner: self, options: nil)?[0] as! PostSC
        self.addScrollView.addSubview(custom)

오준현

custom TabBar 도전하기 빠샤🥊

디자인파트에서 원하는 커스텀 탭바가 있어 새롭게 커스텀 탭바를 도전해봤습다~!

먼저 커스텀 탭바를 구현해줄 클래스가 필요해 만들어줍니다.

    weak var addDelegate: RootTabBarDelegate?
    
    private lazy var addButton:UIButton = {
        return UIButton()
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        UITabBar.clearShadow()
        addButton.setBackgroundImage(UIImage.init(named: "btnAdd"), for: .normal)
        addButton.addTarget(self,
                            action: #selector(CustomTabBar.addButtonClick),
                            for: .touchUpInside)
        self.addSubview(addButton)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    @objc func addButtonClick(){
        if addDelegate != nil{
            addDelegate?.addClick()
        }
    }
    
    override func layoutSubviews() {
        
        super.layoutSubviews()
        
        let buttonX = self.frame.size.width/3
        var index = 0
        for barButton in self.subviews{
            
            if barButton.isKind(of: NSClassFromString("UITabBarButton")!){
                
                if index == 1{
                    /// Setting the Add Button Position
                    addButton.frame.size = CGSize.init(width: (addButton.currentBackgroundImage?.size.width)!, height: (addButton.currentBackgroundImage?.size.height)!)
                    addButton.center = CGPoint.init(x: self.center.x, y: self.frame.size.height/2 - 18)
                    index += 1
                }
                barButton.frame = CGRect.init(x: buttonX * CGFloat(index), y: 0, width: buttonX, height: self.frame.size.height)
                index += 1
                
            }
        }
        self.bringSubviewToFront(addButton)
    }
    
    /// Rewrite the hitTest method, listen for the button click to make the highlighted tabbar part respond to the click
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        
        /// Determine whether it is the root controller
        if self.isHidden {
            /// tabbar hiding is not handled in the home page system
            return super.hitTest(point, with: event)
            
        }else{
            /// Converting Money Touch Points to Buttons to Generate New Points
            let onButton = self.convert(point, to: self.addButton)
            /// Determine whether the new point is on the button
            if self.addButton.point(inside: onButton, with: event){
                return addButton
            }else{
                /// No System Processing on the Button
                return super.hitTest(point, with: event)
            }
        }
    }

여기서 주입해줄 Delegate 패턴을 만들어줍니다

protocol RootTabBarDelegate:NSObjectProtocol {
    func addClick()
}

그리고 마지막으로 탭바 컨트롤러에서 Delegate를 주입받고

extension TBC : RootTabBarDelegate{
    
}
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let tab = CustomTabBar()
        tab.addDelegate = self
        self.setValue(tab, forKey: "tabBar")
    }

addClick 즉 커스텀 할때 가운데에 들어갈 버튼을 클릭할때 실행될 코드를 작성해주시면 됩니다,

    func addClick() {
        let sb = UIStoryboard(name: "Post", bundle: nil)
        let vc = sb.instantiateViewController(withIdentifier: "PostNavVC") as! PostNavVC
        vc.modalPresentationStyle = .fullScreen
        
        self.present(vc, animated: true)
    }


😻 최강 아요 멤버

김호세 / (사원)

성장

팀원들이 너무 좋아서 행복했다. 어렵지만 성장 할 수 있었던 즐거운 3주였다.

박주연 / (차장. 사실 회장딸)

앱스토어 출시 & 협업 능력 성장

우리 온스 영원하자❤️ 앱스토어 등록 고고~~

이윤진 / (대리)

iOS 실력 성장 & 앱스토어 출시

온스 사랑해요❤️ 다들 3주동안 고생많았어요

오준현 / (부장)

앱스토어 출시

우리 사원들과 함께 즐거운 3주를 보낼 수 있어서 아주 즐거운 시간이었습니다.

About

🍎🍏We-are-🐱unce i🐱S🍏🍎

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •