Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 재생화면 VIP 싸이클 적용 #146

Closed
wants to merge 37 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
8dc9499
:sparkles: Toast class 구현
chopmozzi Nov 28, 2023
30e14f4
:recycle: 필요없는 코드 지우기
chopmozzi Nov 28, 2023
4a83716
:recycle: final 붙이기
chopmozzi Nov 28, 2023
adc5036
:sparkles: Playback Configurator 생성 및 적용
chopmozzi Nov 28, 2023
4a4f19d
:sparkles: VideoDTO 생성
chopmozzi Nov 28, 2023
82c1110
:recycle: video dto 수정
chopmozzi Nov 28, 2023
ac3b778
:sparkles: Playback ViewModel 생성
chopmozzi Nov 28, 2023
c4c49a7
:recycle: 재생화면 VIP Cycle 적용(홈에서)
chopmozzi Nov 28, 2023
057b567
:bug: 설정 탭 푸시 시 투명 배경 현상 수정
loinsir Nov 29, 2023
381fde8
:bug: 네비게이션 컨트롤러 중첩 버그 수정
loinsir Nov 29, 2023
4365dec
:sparkles: 초기 재생화면 재생 설정
chopmozzi Nov 29, 2023
bbe94b0
:sparkles: 재생화면 홈화면 VIP 연결
chopmozzi Nov 29, 2023
f422902
:bug: 실 기기에서 소리가 나지 않던 문제 수정
chopmozzi Nov 29, 2023
4989047
:sparkles: 재생화면 초기화면 세팅(홈에서 연결됐을 때)
chopmozzi Nov 29, 2023
1848ec7
:sparkles: 지도와 재생화면 연결
chopmozzi Nov 29, 2023
e3c2ac3
:sparkles: 무한 스크롤 VIP 연결
chopmozzi Nov 29, 2023
8475dbd
:recycle: 코드 정리
chopmozzi Nov 29, 2023
212f3c6
:sparkles: 다른 뷰로 이동 시 재생 바 사라지게 구현
chopmozzi Nov 29, 2023
3296d74
Merge remote-tracking branch 'refs/remotes/origin/iOS/dev'
chopmozzi Nov 29, 2023
109abbf
:sparkles: TagPlayList Scene UI 구현
loinsir Nov 29, 2023
9dbcdea
:recycle: Toast 수정
chopmozzi Nov 29, 2023
310fff5
:wrench: 테스트 코드 삭제
chopmozzi Nov 29, 2023
ce2a20d
:heavy_plus_sign: 태그 검색 더미 데이터 추가
loinsir Nov 29, 2023
980f5f5
:wrench: mock json 필드 수정
loinsir Nov 29, 2023
8316494
Merge pull request #143 from boostcampwm2023/iOS/bug#142
anyukyung Nov 29, 2023
50d6ce7
:heavy_plus_sign: 게시글 DTO 추가
loinsir Nov 29, 2023
cad4185
:sparkles: 태그 검색 뷰 VIP 사이클 구현
loinsir Nov 29, 2023
4001422
:sparkles: Sequence 비동기 extension 메서드 추가
loinsir Nov 30, 2023
e549eb8
:bug: provider data 리턴 타입 디코드 수정
loinsir Nov 30, 2023
3690025
:bento: 샘플 이미지 애셋 변경
loinsir Nov 30, 2023
ac24604
:recycle: 리뷰사항 반영
chopmozzi Nov 30, 2023
2aee1b7
:wrench: 데이터 전달 설정
loinsir Nov 30, 2023
f270691
Merge pull request #130 from boostcampwm2023/iOS/feat#129
anyukyung Nov 30, 2023
5bc5e8e
:wrench: 리뷰 반영 navigation title 표시 로직 수정
loinsir Nov 30, 2023
8ad694e
Merge pull request #149 from boostcampwm2023/iOS/feat#145
loinsir Nov 30, 2023
4c84266
Merge remote-tracking branch 'refs/remotes/origin/iOS/feat#122'
chopmozzi Nov 30, 2023
2b9ce5d
:wrench: 모델 수정
chopmozzi Nov 30, 2023
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
Prev Previous commit
Next Next commit
✨ TagPlayList Scene UI 구현
  • Loading branch information
loinsir committed Nov 29, 2023
commit 109abbf7f37a8c92ac8ae64b57eb87876187eb32
60 changes: 60 additions & 0 deletions iOS/Layover/Layover.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
@@ -38,6 +38,15 @@
1972CCDA2B13A4BA00C3C762 /* SignUpWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1972CCD92B13A4BA00C3C762 /* SignUpWorker.swift */; };
1972CCDF2B14C9B000C3C762 /* Notification.Name+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1972CCDE2B14C9B000C3C762 /* Notification.Name+.swift */; };
19743C052B06940D001E405A /* PlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19743C042B06940D001E405A /* PlayerView.swift */; };
19A169232B176C5F00DB34C0 /* TagPlayListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A1691D2B176C5F00DB34C0 /* TagPlayListPresenter.swift */; };
19A169242B176C5F00DB34C0 /* TagPlayListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A1691E2B176C5F00DB34C0 /* TagPlayListWorker.swift */; };
19A169252B176C5F00DB34C0 /* TagPlayListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A1691F2B176C5F00DB34C0 /* TagPlayListRouter.swift */; };
19A169262B176C5F00DB34C0 /* TagPlayListModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A169202B176C5F00DB34C0 /* TagPlayListModels.swift */; };
19A169272B176C5F00DB34C0 /* TagPlayListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A169212B176C5F00DB34C0 /* TagPlayListViewController.swift */; };
19A169282B176C5F00DB34C0 /* TagPlayListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A169222B176C5F00DB34C0 /* TagPlayListInteractor.swift */; };
19A1692A2B176D6E00DB34C0 /* TagPlayListConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A169292B176D6E00DB34C0 /* TagPlayListConfigurator.swift */; };
19A1692D2B17750B00DB34C0 /* PlayList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A1692C2B17750B00DB34C0 /* PlayList.swift */; };
19A169302B1776CA00DB34C0 /* TagPlayListCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A1692F2B1776CA00DB34C0 /* TagPlayListCollectionViewCell.swift */; };
19AACFCA2B0F7C3B0088143E /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AACFC92B0F7C3B0088143E /* Response.swift */; };
19AACFCC2B0F7D730088143E /* LoginDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AACFCB2B0F7D730088143E /* LoginDTO.swift */; };
19C7AFCE2B02410F003B35F2 /* AuthManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19C7AFCD2B02410F003B35F2 /* AuthManager.swift */; };
@@ -163,6 +172,15 @@
1972CCD92B13A4BA00C3C762 /* SignUpWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignUpWorker.swift; sourceTree = "<group>"; };
1972CCDE2B14C9B000C3C762 /* Notification.Name+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Notification.Name+.swift"; sourceTree = "<group>"; };
19743C042B06940D001E405A /* PlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerView.swift; sourceTree = "<group>"; };
19A1691D2B176C5F00DB34C0 /* TagPlayListPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagPlayListPresenter.swift; sourceTree = "<group>"; };
19A1691E2B176C5F00DB34C0 /* TagPlayListWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagPlayListWorker.swift; sourceTree = "<group>"; };
19A1691F2B176C5F00DB34C0 /* TagPlayListRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagPlayListRouter.swift; sourceTree = "<group>"; };
19A169202B176C5F00DB34C0 /* TagPlayListModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagPlayListModels.swift; sourceTree = "<group>"; };
19A169212B176C5F00DB34C0 /* TagPlayListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagPlayListViewController.swift; sourceTree = "<group>"; };
19A169222B176C5F00DB34C0 /* TagPlayListInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagPlayListInteractor.swift; sourceTree = "<group>"; };
19A169292B176D6E00DB34C0 /* TagPlayListConfigurator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagPlayListConfigurator.swift; sourceTree = "<group>"; };
19A1692C2B17750B00DB34C0 /* PlayList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayList.swift; sourceTree = "<group>"; };
19A1692F2B1776CA00DB34C0 /* TagPlayListCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagPlayListCollectionViewCell.swift; sourceTree = "<group>"; };
19AACFC52B0F71DF0088143E /* Secrets.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Secrets.xcconfig; sourceTree = "<group>"; };
19AACFC92B0F7C3B0088143E /* Response.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Response.swift; sourceTree = "<group>"; };
19AACFCB2B0F7D730088143E /* LoginDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginDTO.swift; sourceTree = "<group>"; };
@@ -336,6 +354,37 @@
path = UserDefaults;
sourceTree = "<group>";
};
19A1691C2B176C2C00DB34C0 /* TagPlayList */ = {
isa = PBXGroup;
children = (
19A1692E2B1776B200DB34C0 /* Cell */,
19A169292B176D6E00DB34C0 /* TagPlayListConfigurator.swift */,
19A1691F2B176C5F00DB34C0 /* TagPlayListRouter.swift */,
19A169212B176C5F00DB34C0 /* TagPlayListViewController.swift */,
19A169222B176C5F00DB34C0 /* TagPlayListInteractor.swift */,
19A1691D2B176C5F00DB34C0 /* TagPlayListPresenter.swift */,
19A1691E2B176C5F00DB34C0 /* TagPlayListWorker.swift */,
19A169202B176C5F00DB34C0 /* TagPlayListModels.swift */,
);
path = TagPlayList;
sourceTree = "<group>";
};
19A1692B2B1774F900DB34C0 /* Models */ = {
isa = PBXGroup;
children = (
19A1692C2B17750B00DB34C0 /* PlayList.swift */,
);
path = Models;
sourceTree = "<group>";
};
19A1692E2B1776B200DB34C0 /* Cell */ = {
isa = PBXGroup;
children = (
19A1692F2B1776CA00DB34C0 /* TagPlayListCollectionViewCell.swift */,
);
path = Cell;
sourceTree = "<group>";
};
19AACFC82B0F7C200088143E /* DTOs */ = {
isa = PBXGroup;
children = (
@@ -527,6 +576,7 @@
FC68E2992B02320F001AABFF /* Network */,
FC7E45752AFF6F5B004F155A /* Services */,
FC7E45782AFF6F7A004F155A /* Workers */,
19A1692B2B1774F900DB34C0 /* Models */,
FC7E457B2AFF6F9D004F155A /* Scenes */,
FC7E45802AFF6FE9004F155A /* DesignSystem */,
FC7E45392AFEB623004F155A /* AppDelegate.swift */,
@@ -579,6 +629,7 @@
194552032B038FC400299768 /* Tabbar */,
194551EB2B037F1E00299768 /* Login */,
1945521A2B0478A100299768 /* Home */,
19A1691C2B176C2C00DB34C0 /* TagPlayList */,
FC930E6E2B0CD73B00AA48E3 /* Profile */,
FC5BE1152B148B540036366D /* EditProfile */,
194552272B0479B600299768 /* BaseViewController.swift */,
@@ -782,11 +833,14 @@
83C35E1E2B10923C00D8DD5C /* PlaybackCell.swift in Sources */,
FC2511A42B045D6C004717BC /* SignUpModels.swift in Sources */,
FC767F932B1220CC0088CF9B /* NicknameDTO.swift in Sources */,
19A169272B176C5F00DB34C0 /* TagPlayListViewController.swift in Sources */,
19A169252B176C5F00DB34C0 /* TagPlayListRouter.swift in Sources */,
FC68E2A12B023326001AABFF /* EndPoint.swift in Sources */,
1972CCDF2B14C9B000C3C762 /* Notification.Name+.swift in Sources */,
FC2511AF2B04EAD9004717BC /* MapPresenter.swift in Sources */,
19AACFCA2B0F7C3B0088143E /* Response.swift in Sources */,
FC767F972B1224B80088CF9B /* IntroduceDTO.swift in Sources */,
19A169302B1776CA00DB34C0 /* TagPlayListCollectionViewCell.swift in Sources */,
1972CCD42B138E6B00C3C762 /* SignUpRouter.swift in Sources */,
FC5BE11C2B148D160036366D /* EditProfilePresenter.swift in Sources */,
FC68E2A32B0233BC001AABFF /* NetworkError.swift in Sources */,
@@ -812,6 +866,7 @@
193686722B15BCA7008902CD /* UserEndPointFactory.swift in Sources */,
194551F22B037F2D00299768 /* LoginPresenter.swift in Sources */,
194552242B0478B400299768 /* HomeModels.swift in Sources */,
19A1692D2B17750B00DB34C0 /* PlayList.swift in Sources */,
194552022B038B8300299768 /* OSLog+.swift in Sources */,
194552312B04DA1A00299768 /* LOCircleButton.swift in Sources */,
194552262B0478B400299768 /* HomeInteractor.swift in Sources */,
@@ -829,15 +884,18 @@
19C7AFD62B02584D003B35F2 /* KeychainStored.swift in Sources */,
FC930E802B0CFB0B00AA48E3 /* ProfileHeaderView.swift in Sources */,
193686742B15C489008902CD /* UserWorker.swift in Sources */,
19A169242B176C5F00DB34C0 /* TagPlayListWorker.swift in Sources */,
FCE52FF82B0FCAF7002CDB75 /* MockURLProtocol.swift in Sources */,
FC930E792B0CD75C00AA48E3 /* ProfileViewController.swift in Sources */,
FC7E453A2AFEB623004F155A /* AppDelegate.swift in Sources */,
1972CCD82B13A2EC00C3C762 /* SignUpEndPointFactory.swift in Sources */,
19A169262B176C5F00DB34C0 /* TagPlayListModels.swift in Sources */,
FC767F842B1214A80088CF9B /* MockUserWorker.swift in Sources */,
FC930E782B0CD75C00AA48E3 /* ProfileModels.swift in Sources */,
FC68E29B2B02325D001AABFF /* Requestable.swift in Sources */,
FC2511A22B045C3F004717BC /* SignUpPresenter.swift in Sources */,
FC767FA82B1269DB0088CF9B /* LOAnnotationView.swift in Sources */,
19A169232B176C5F00DB34C0 /* TagPlayListPresenter.swift in Sources */,
FC68E29D2B02326A001AABFF /* Responsable.swift in Sources */,
FC2511A02B045C0A004717BC /* SignUpInteractor.swift in Sources */,
FC767F862B1214C10088CF9B /* CheckUserNameDTO.swift in Sources */,
@@ -853,6 +911,7 @@
835783C32B14A41600E7D304 /* MockLoginWorker.swift in Sources */,
835A61922B067FEC002F22A5 /* LOTagStackView.swift in Sources */,
FC7E45902AFF746E004F155A /* DummyWorker.swift in Sources */,
19A169282B176C5F00DB34C0 /* TagPlayListInteractor.swift in Sources */,
FC930E7A2B0CD75C00AA48E3 /* ProfileInteractor.swift in Sources */,
FC930E752B0CD75C00AA48E3 /* ProfilePresenter.swift in Sources */,
835A61A12B068115002F22A5 /* PlaybackViewController.swift in Sources */,
@@ -868,6 +927,7 @@
1972CCCF2B12438900C3C762 /* LoginEndPointFactory.swift in Sources */,
835A61A92B0B5A31002F22A5 /* LoginConfigurator.swift in Sources */,
194551F72B037F2D00299768 /* LoginInteractor.swift in Sources */,
19A1692A2B176D6E00DB34C0 /* TagPlayListConfigurator.swift in Sources */,
FC7E453C2AFEB623004F155A /* SceneDelegate.swift in Sources */,
FC2511A92B04DAD4004717BC /* MapViewController.swift in Sources */,
FCEE0FF62B03804000195BBE /* LOTextField.swift in Sources */,
16 changes: 16 additions & 0 deletions iOS/Layover/Layover/Models/PlayList.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
//
// PlayList.swift
// Layover
//
// Created by 김인환 on 11/29/23.
// Copyright © 2023 CodeBomber. All rights reserved.
//

import Foundation

struct PlayList: Equatable {
var identifier: Int
var title: String
var description: String?
var thumbnailImageURL: URL?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
//
// TagPlayListCollectionViewCell.swift
// Layover
//
// Created by 김인환 on 11/29/23.
// Copyright © 2023 CodeBomber. All rights reserved.
//

import UIKit

final class TagPlayListCollectionViewCell: UICollectionViewCell {

// MARK: - UI Components

private let thumbnailImageView: UIImageView = {
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFill
imageView.backgroundColor = .lightGray
imageView.clipsToBounds = true
return imageView
}()

private let titleLabel: UILabel = {
let label = UILabel()
label.font = UIFont.loFont(ofSize: 15, weight: .semibold, type: .pretendard)
label.textAlignment = .natural
return label
}()

// MARK: - Properties

private(set) var playID: Int?

// MARK: - Initializer

override init(frame: CGRect) {
super.init(frame: frame)
setConstraints()
}

required init?(coder: NSCoder) {
super.init(coder: coder)
setConstraints()
}

// MARK: - Methods

private func setConstraints() {
contentView.addSubviews(thumbnailImageView, titleLabel)
contentView.subviews.forEach { $0.translatesAutoresizingMaskIntoConstraints = false }

NSLayoutConstraint.activate([
thumbnailImageView.topAnchor.constraint(equalTo: contentView.topAnchor),
thumbnailImageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
thumbnailImageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
thumbnailImageView.heightAnchor.constraint(equalTo: thumbnailImageView.widthAnchor),

titleLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 14),
titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -14),
titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -14)
])
}

func configure(playID: Int, thumbnailImage: UIImage, title: String) {
self.playID = playID
thumbnailImageView.image = thumbnailImage
titleLabel.text = title
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//
// TagPlayListConfigurator.swift
// Layover
//
// Created by 김인환 on 11/29/23.
// Copyright © 2023 CodeBomber. All rights reserved.
//

import Foundation

final class TagPlayListConfigurator: Configurator {

static let shared = TagPlayListConfigurator()

private init() { }

func configure(_ viewController: TagPlayListViewController) {
let viewController = viewController
let interactor = TagPlayListInteractor()
let presenter = TagPlayListPresenter()
let worker = TagPlayListWorker()
let router = TagPlayListRouter()

router.viewController = viewController
router.dataStore = interactor
viewController.interactor = interactor
viewController.router = router
interactor.presenter = presenter
interactor.worker = worker
presenter.viewController = viewController
}
}
26 changes: 26 additions & 0 deletions iOS/Layover/Layover/Scenes/TagPlayList/TagPlayListInteractor.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//
// TagPlayListInteractor.swift
// Layover
//
// Created by 김인환 on 11/29/23.
// Copyright (c) 2023 CodeBomber. All rights reserved.
//

import UIKit

protocol TagPlayListBusinessLogic {

}

protocol TagPlayListDataStore {
}

final class TagPlayListInteractor: TagPlayListBusinessLogic, TagPlayListDataStore {

// MARK: - Properties

var presenter: TagPlayListPresentationLogic?
var worker: TagPlayListWorker?


}
25 changes: 25 additions & 0 deletions iOS/Layover/Layover/Scenes/TagPlayList/TagPlayListModels.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//
// TagPlayListModels.swift
// Layover
//
// Created by 김인환 on 11/29/23.
// Copyright (c) 2023 CodeBomber. All rights reserved.
//

import UIKit

enum TagPlayListModels {
// MARK: Use cases

enum FetchPlayList {
struct Request {
}

struct Response {
let playList: [PlayList]
}

struct ViewModel {
}
}
}
22 changes: 22 additions & 0 deletions iOS/Layover/Layover/Scenes/TagPlayList/TagPlayListPresenter.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// TagPlayListPresenter.swift
// Layover
//
// Created by 김인환 on 11/29/23.
// Copyright (c) 2023 CodeBomber. All rights reserved.
//

import UIKit

protocol TagPlayListPresentationLogic {

}

final class TagPlayListPresenter: TagPlayListPresentationLogic {

// MARK: - Properties

weak var viewController: TagPlayListDisplayLogic?


}
25 changes: 25 additions & 0 deletions iOS/Layover/Layover/Scenes/TagPlayList/TagPlayListRouter.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//
// TagPlayListRouter.swift
// Layover
//
// Created by 김인환 on 11/29/23.
// Copyright (c) 2023 CodeBomber. All rights reserved.
//

import UIKit

@objc protocol TagPlayListRoutingLogic {

}

protocol TagPlayListDataPassing {
var dataStore: TagPlayListDataStore? { get }
}

final class TagPlayListRouter: TagPlayListRoutingLogic, TagPlayListDataPassing {

// MARK: - Properties

weak var viewController: TagPlayListViewController?
var dataStore: TagPlayListDataStore?
}
Loading