Git Product home page Git Product logo

posepicker / posepicker-ios Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 0.0 34.18 MB

포토부스에서 고민하는 당신을 위한 포즈추천 서비스

Home Page: https://apps.apple.com/kr/app/%ED%8F%AC%EC%A6%88%ED%94%BC%EC%BB%A4-%EB%84%A4%EC%BB%B7%EC%82%AC%EC%A7%84-%ED%8F%AC%EC%A6%88%EC%B6%94%EC%B2%9C/id6474260471

Swift 99.52% Shell 0.48%
kingfisher mvvm-architecture rxdatasources rxswift rxtest unit-test

posepicker-ios's Introduction

 

포토부스에서 고민하는 당신을 위한 포즈추천 서비스

AppStore | Website | Instagram | Github | Feedback


🪄 Introduce

네컷사진 찍을 때면 늘 포즈가 고민되지 않나요?
포즈피커가 포즈 고민을 해결해 드릴게요!
미리 포즈 고민할 필요 없이, 찍기 직전에 빠르고 재밌게 포즈를 추천해 주는 포즈피커를 이용해 보세요!



“빨리 빨리! 우리 무슨 포즈로 찍을래?”
시간 없을 땐 포즈픽으로 빠르게 랜덤 포즈를 추천받아보세요.


🃏
“이미 있는 포즈는 시시해, 우리만의 특별한 포즈가 필요해!”
포즈톡에서 뽑은 랜덤 제시어로 나만의 개성있는 포즈를 완성해보세요.


🎞
“또 어떤 포즈가 있을까? 우리 이 포즈로 찍어볼까?”
포즈피드에서 특정한 상황을 빛내줄 포즈를 찾고, 친구한테 공유해보세요.


📱 Feature

iOS MVP 개발 기간: 2023.10.19 - 2023.12.14

1. 포즈픽

인원수를 선택하고 무작위 포즈를 포즈피커에게 추천받아 보세요!

92f16d87-2f5d-4230-aeb0-9ce6689c848b.mp4

2. 포즈톡

제시어를 뽑아 재미있는 포즈를 함께 취해보세요!

530ce055-4424-4b16-8134-343beef02462.mp4

3. 포즈피드

요즘에는 어떤 포즈가 유행이지 🤔 포즈피드에서 찾아보세요!

626e2f99-5155-40fb-97d4-7555b3775aa4.mp4
a2f53fdd-2dbc-4c86-bab0-d4202bf4acab.mp4

포즈피드에서는 여러 기능들을 추가로 제공해요 👀

  1. 필터를 설정하여 원하는 테마의 포즈들을 추천받아보세요!
  2. 포즈별 추천 태그를 탭하여 비슷한 포즈들을 쉽게 검색해보세요!
  3. 클립보드와 카카오톡을 통해 친구에게 포즈를 공유해보세요!

4. 북마크

원하는 포즈를 찾으셨나요? 북마크에 등록해두고 포즈들을 모아보세요!

eb2eed48-3815-4483-bb3e-41d68e386beb.mp4


📚 Tech Stack

스크린샷 2021-11-19 오후 3 52 02 스크린샷 2021-11-19 오후 3 52 02

🎁 Library

라이브러리 Version
Then 3.0.0 SPM
SnapKit 5.6.0 SPM
RxSwift 6.6.0 SPM
RxCocoa 6.6.0 SPM
RxDataSources 5.0.2 SPM
RxKakaoOpenSDK 2.19.0 SPM
Kingfisher 7.10.0 SPM
Alamofire 5.8.0 SPM
Lottie 4.3.3 SPM

🤔 Development Issues

개발 과정에서 있었던 이슈들입니다. 개발 블로그에 정리해두었어요!

  1. RxSwift - MVVM 뷰모델 Input & Output 디자인
  2. RxSwift - 유닛 테스트 환경 구축
  3. 핀터레스트 레이아웃 구현하기
  4. RxDataSources 컬렉션뷰 헤더 SupplementaryView 적용기
  5. RxSwift와 loadViewIfNeeded의 활용
  6. RxBlocking & RxTest에 대한 정리
  7. 유닛 테스트 네트워크 목업
  8. 킹피셔 라이브러리 유닛 테스트 환경 구축

🙌 Team

Design Web & iOS BackEnd
이지영 seondal olive-su
김수빈 Parkjju leejw-lu

posepicker-ios's People

Contributors

parkjju avatar

Stargazers

 avatar  avatar

posepicker-ios's Issues

[Feature] UISegmentControl UI 제작 및 로직구현

2023-10-22.12.45.57.mov

해결과정

  1. UISegmentControl 클래스를 상속받는 커스텀 UnderlineSegmentControl 정의
  2. didMoveToSuperView 라이프사이클에서 기본적인 언더라인 세그먼트 구현을 위한 기본설정 (setBackgroundImage & 서브뷰 추가)
  3. 언더라인 뷰의 초기 너비값은 segmentControl 너비값을 전체 아이템 갯수로 나눈 값

1. 세그먼트 탭 이후

  1. titleTextAttributes 함수를 통해 텍스트의 intrinsicSize 너비값을 구한다
  2. 세그먼트 컨트롤 너비는 상위 뷰의 오토레이아웃 설정 과정에서 고정되므로 아이템 갯수만큼 나눈 이후의 너비값도 고정된다
  3. 공평하게 나뉜 너비값에서 아이템별 텍스트 고유 사이즈를 빼주고 이를 2로 나누면 언더라인 뷰의 origin x값의 위치가 결정된다
  4. UIView animate 클로저에서 위치를 지정
 func moveUnderlineView() {
    let fontAttributes = titleTextAttributes(for: .normal)
    guard let title = titleForSegment(at: self.selectedSegmentIndex) else { return }
    let size = title.size(withAttributes: fontAttributes)
    
    let perSegmentWidth = self.bounds.width / CGFloat(self.numberOfSegments) // 세그먼트 별 길이
    let underlineFinalXPosition = (perSegmentWidth * CGFloat(self.selectedSegmentIndex)) + (perSegmentWidth - size.width) / 2
    
    self.underlineView.frame.origin.x = previousXPosition
    
    UIView.animate(
        withDuration: 0.1,
        animations: {
            self.previousXPosition = underlineFinalXPosition
            self.underlineView.frame.origin.x = underlineFinalXPosition
        }
    )
}

세그먼트 탭은 상위 뷰에서 rx 컨트롤 이벤트를 통해 drive하여 함수 호출

2. 언더라인 너비 업데이트

  1. 초기 언더라인 너비값은 고정이지만 텍스트 고유 사이즈에 따라 너비를 업데이트 해줘야 함
  2. 예컨대 포즈피드는 네글자, 포즈톡&북마크&포즈픽은 세 글자이므로 고유 사이즈가 다름
  3. 심지어 자음별 크기에 따라 너비값이 다르게 산정되는 경우도 있을 수 있다
  4. moveUnderlineView 함수에서 사용한 것과 동일하게 텍스트 고유 사이즈를 얻고 UIView.animate 클로저에서 너비를 업데이트해준다
  5. 언더라인뷰는 UnderlineSegmentControl 클래스의 서브 뷰이므로, self.layoutIfNeeded()를 클로저에서 호출해주면 레이아웃이 자동으로 업데이트된다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.