Skip to content

Commit

Permalink
Merge pull request #12 from AVIRO-official/feature/challenge
Browse files Browse the repository at this point in the history
[Feat]: 챌린지 업데이트 인디케이터, 프로그래스바 애니메이션 등 추가
  • Loading branch information
Jeon0976 authored Dec 29, 2023
2 parents 1468f59 + 7e4e3ae commit 3fd1501
Show file tree
Hide file tree
Showing 11 changed files with 153 additions and 21 deletions.
4 changes: 2 additions & 2 deletions AVIRO/App/AppController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ final class AppController {
window.backgroundColor = .gray7
window.makeKeyAndVisible()

// checkState()
setTabBarView()
checkState()
// setTabBarView()
}

// MARK: 불러올 view 확인 메서드
Expand Down
7 changes: 7 additions & 0 deletions AVIRO/App/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
)
}

func application(
_ application: UIApplication,
supportedInterfaceOrientationsFor window: UIWindow?
) -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}

private func setNaverMapAPI() {
guard let keyUrl = Bundle.main.url(
forResource: "API",
Expand Down
2 changes: 1 addition & 1 deletion AVIRO/Manager/APIManager/APITypes.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import Foundation

enum APIError: Error {
enum APIError: Error {
case urlError
case networkError(Error)
case encodingError
Expand Down
5 changes: 5 additions & 0 deletions AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -655,17 +655,21 @@ final class AVIROAPI: AVIROAPIMangerProtocol {
}

extension AVIROAPI {

func performRequest<T>(
with url: URL,
httpMethod: HTTPMethodType = .get,
requestBody: Data? = nil,
headers: [String: String]? = nil,
completionHandler: @escaping (Result<T, APIError>) -> Void
) where T: Decodable {
print("before: ", onRequest.count)
guard !onRequest.contains(url) else { return }

onRequest.insert(url)

print("after: ", onRequest.count)

var request = URLRequest(url: url)

request.httpMethod = httpMethod.rawValue
Expand All @@ -679,6 +683,7 @@ extension AVIROAPI {

let task = session.dataTask(with: request) { [weak self] data, response, error in
defer {
print(url)
self?.onRequest.remove(url)
}

Expand Down
32 changes: 31 additions & 1 deletion AVIRO/Scene/Base/AVIROTabBarController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ final class AVIROTabBarController: UIViewController, TabBarDelegate {
private var selectedVCBottomUponTabViewConstraint: NSLayoutConstraint?
private var selectedVCBottomUponViewBottom: NSLayoutConstraint?

private var timer: Timer?

override func viewDidLoad() {
super.viewDidLoad()

Expand Down Expand Up @@ -281,10 +283,38 @@ final class AVIROTabBarController: UIViewController, TabBarDelegate {
}

@objc private func tabBarButtonTapped(_ sender: TabBarButton) {
selectedIndex = sender.tag
if sender.tag == selectedIndex {
if timer == nil {
startTimer(with: sender.tag)
selectedIndex = sender.tag
}
} else {
timerExpired()
selectedIndex = sender.tag
}
}

func hideBlurEffectView(with active: Bool) {
blurEffectView.isHidden = active
}

private func startTimer(with tag: Int) {
var timerInterval: TimeInterval = 1.5

if tag == 2 {
timerInterval = 5
}

timer = Timer.scheduledTimer(
withTimeInterval: timerInterval,
repeats: false,
block: { [weak self] _ in
self?.timerExpired()
})
}

private func timerExpired() {
timer?.invalidate()
timer = nil
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ final class ChallengeTitleView: UIView {
private lazy var challengeDateLabel: UILabel = {
let label = UILabel()

label.textColor = .gray2
label.text = "................"
label.textColor = .gray6
label.backgroundColor = .gray6
label.layer.cornerRadius = 10
label.clipsToBounds = true
label.font = .pretendard(size: 17, weight: .medium)

return label
Expand All @@ -29,7 +33,11 @@ final class ChallengeTitleView: UIView {
private lazy var challengeTitleLabel: UILabel = {
let label = UILabel()

label.textColor = .gray0
label.text = "................"
label.textColor = .gray6
label.backgroundColor = .gray6
label.layer.cornerRadius = 15
label.clipsToBounds = true
label.font = .pretendard(size: 32, weight: .semibold)

return label
Expand Down Expand Up @@ -103,12 +111,17 @@ final class ChallengeTitleView: UIView {
self.backgroundColor = .gray7
}

// TODO: DataBinding 설계 시 삭제 예정
func updateDate(with date: String) {
challengeDateLabel.textColor = .gray2
challengeDateLabel.backgroundColor = .gray7
challengeDateLabel.clipsToBounds = false
challengeDateLabel.text = date
}

func updateTitle(with title: String) {
challengeTitleLabel.backgroundColor = .gray7
challengeTitleLabel.textColor = .gray0
challengeTitleLabel.clipsToBounds = false
challengeTitleLabel.text = title
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ final class ChallengeLevelView: UIView {
private lazy var lankLabel: UILabel = {
let label = UILabel()

label.text = "포인트를 모아 나무를 성장시켜보세요!"
label.textColor = .gray0
label.font = .pretendard(size: 17, weight: .semibold)
label.numberOfLines = 1
Expand All @@ -23,6 +24,7 @@ final class ChallengeLevelView: UIView {
private lazy var levelLabel: UILabel = {
let label = UILabel()

label.text = "레벨 달성했어요!"
label.textColor = .gray2
label.font = .pretendard(size: 15, weight: .medium)
label.numberOfLines = 1
Expand All @@ -35,6 +37,7 @@ final class ChallengeLevelView: UIView {

view.trackTintColor = .gray5
view.progressTintColor = .keywordBlue
view.setProgress(0.05, animated: true)

return view
}()
Expand Down Expand Up @@ -89,6 +92,8 @@ final class ChallengeLevelView: UIView {
private func setupAttribute() {
self.backgroundColor = .gray6
self.layer.cornerRadius = 12

updateLevelPoint(with: ("0", "30"))
}

func updateLankLabel(with lank: String) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ final class ChallengeUserInfoView: UIView {
private lazy var nameLabel: UILabel = {
let label = UILabel()

label.text = MyData.my.nickname
label.textColor = .gray0
label.font = .pretendard(size: 20, weight: .semibold)
label.numberOfLines = 1
Expand All @@ -30,6 +31,17 @@ final class ChallengeUserInfoView: UIView {
return imageView
}()

private lazy var indicatorView: UIActivityIndicatorView = {
let view = UIActivityIndicatorView()

view.style = .large
view.color = .gray5
view.startAnimating()
view.isHidden = true

return view
}()

private lazy var levelView: ChallengeLevelView = {
let view = ChallengeLevelView()

Expand All @@ -51,7 +63,8 @@ final class ChallengeUserInfoView: UIView {
[
nameLabel,
levelView,
treeImageView
treeImageView,
indicatorView
].forEach {
$0.translatesAutoresizingMaskIntoConstraints = false
self.addSubview($0)
Expand All @@ -69,14 +82,25 @@ final class ChallengeUserInfoView: UIView {
levelView.topAnchor.constraint(equalTo: treeImageView.topAnchor, constant: 84),
levelView.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 15),
levelView.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -15),
levelView.bottomAnchor.constraint(equalTo: self.bottomAnchor)
levelView.bottomAnchor.constraint(equalTo: self.bottomAnchor),

indicatorView.centerXAnchor.constraint(equalTo: treeImageView.centerXAnchor),
indicatorView.centerYAnchor.constraint(equalTo: treeImageView.centerYAnchor)
])
}

private func setupAttribute() {
self.backgroundColor = .gray7
}

func isStartIndicator() {
indicatorView.isHidden = false
}

func isEndIndicator() {
indicatorView.isHidden = true
}

func bindData(with result: AVIROMyChallengeLevelResultDTO) {
let total = result.total ?? 0
let rank = result.userRank ?? 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,13 @@ final class ChallengeViewController: UIViewController, AVIROViewController {
}

private func setupLayout() {
scrollView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(scrollView)

[
scrollView
].forEach {
$0.translatesAutoresizingMaskIntoConstraints = false
view.addSubview($0)
}

NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(
equalTo: self.view.safeAreaLayoutGuide.topAnchor
Expand Down Expand Up @@ -148,6 +152,9 @@ final class ChallengeViewController: UIViewController, AVIROViewController {

private func dataBinding() {
let viewWillAppearTrigger = self.rx.viewWillAppear.map { _ in }.asDriver(onErrorDriveWith: .empty())
.do { [weak self] _ in
self?.challengeUserInfoView.isStartIndicator()
}

let tappedNavigationBarRightButton = navigationItem.rightBarButtonItem?.rx.tap.asDriver() ?? .empty()

Expand Down Expand Up @@ -195,6 +202,7 @@ final class ChallengeViewController: UIViewController, AVIROViewController {
}

func bindMyChallengeLevel(with result: AVIROMyChallengeLevelResultDTO) {
challengeUserInfoView.isEndIndicator()
challengeUserInfoView.bindData(with: result)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,17 @@ final class ReviewWriteViewController: UIViewController {
button.setTitleColor(.gray2, for: .disabled)
return button
}()

private lazy var indicatorView: UIActivityIndicatorView = {
let view = UIActivityIndicatorView()

view.style = .large
view.color = .gray5
view.startAnimating()
view.isHidden = true

return view
}()

private var reviewTextViewWhenKeyboardWillShow: NSLayoutConstraint!
private var reviewTextViewWhenKeyboardWillHide: NSLayoutConstraint!
Expand Down Expand Up @@ -132,7 +143,8 @@ final class ReviewWriteViewController: UIViewController {
textViewCountLabel,
exampleLabel,
exampleSticy,
reviewUploadButton
reviewUploadButton,
indicatorView
].forEach {
$0.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview($0)
Expand Down Expand Up @@ -216,8 +228,10 @@ final class ReviewWriteViewController: UIViewController {
),
reviewUploadButton.trailingAnchor.constraint(
equalTo: self.view.trailingAnchor
)
),

indicatorView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
indicatorView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor)
])

reviewTextViewWhenKeyboardWillShow = self.reviewTextView.topAnchor.constraint(
Expand Down Expand Up @@ -285,15 +299,20 @@ final class ReviewWriteViewController: UIViewController {
),

height > 750 ?
reviewTextView.heightAnchor.constraint(equalToConstant: 320)
reviewTextView.heightAnchor.constraint(equalToConstant: 320)
:
reviewTextView.heightAnchor.constraint(equalToConstant: 280)
])
}

private func dataBinding() {
let text = reviewTextView.rx.text.asDriver()
let updateReview = reviewUploadButton.rx.controlEvent(.touchUpInside).asDriver()
let updateReview = reviewUploadButton.rx
.controlEvent(.touchUpInside)
.asDriver()
.do { [weak self] _ in
self?.startLoading()
}

let input = ReviewWriteViewModel.Input(
text: text,
Expand Down Expand Up @@ -428,15 +447,31 @@ final class ReviewWriteViewController: UIViewController {
}

private func popViewController() {
endLoading()
tabBarDelegate?.isHidden = (false, true)
navigationController?.popViewController(animated: true)
}

func afterErrorShow(with error: APIError) {
showAlert(
title: "에러",
message: error.localizedDescription
)
endLoading()
switch error {
case .clientError(1):
showAlert(title: "에러", message: "중복 등록된 후기 입니다.")
default:
showAlert(title: "에러", message: error.localizedDescription)
}
}

private func startLoading() {
indicatorView.isHidden = false
reviewUploadButton.isEnabled = false
reviewUploadButton.backgroundColor = .gray5
}

private func endLoading() {
indicatorView.isHidden = true
reviewUploadButton.isEnabled = true
reviewUploadButton.backgroundColor = .keywordBlue
}
}

Expand Down
Loading

0 comments on commit 3fd1501

Please sign in to comment.