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

[Week2] 토스 앱 상세페이지 구현 #7

Open
wants to merge 72 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
7e0dd40
[Add, Feat] - 스크롤뷰 연습 뷰컨 생성 및 작업
yurim830 Oct 15, 2024
faa8441
[Add, Feat] - 스크롤뷰 연습 뷰컨 생성 및 작업
yurim830 Oct 15, 2024
83f92ee
[Feat] - rootVC 변경
yurim830 Oct 15, 2024
7d62a2a
[Add] #6 - AppDetail View, VC 생성
yurim830 Oct 15, 2024
c8b4493
[Feat] #6 - 시작 VC 수정
yurim830 Oct 22, 2024
b218f39
[Add] #6 - UILabel Extension
yurim830 Oct 22, 2024
00d03f9
[Add] #6 - (Reusables) BorderView
yurim830 Oct 22, 2024
1ee012b
[Add] #6 - (Reusables) TitleLabel, SubtitleLabel, ContentLabel
yurim830 Oct 22, 2024
6ccf3c2
[Design] #6 - Border 색, 두께 수정
yurim830 Oct 22, 2024
cb3c075
[Move, Add] - 세미나 파일 그룹화, Reusable Components 생성
yurim830 Oct 22, 2024
329956e
[Move] - Practice 폴더로 이동
yurim830 Oct 22, 2024
3e14b8c
[Design] #6 - titleView UI 구성 완료
yurim830 Oct 22, 2024
8be6990
[Feat] #6 - binding, 뷰 업데이트 방식 수정
yurim830 Oct 22, 2024
8d874ec
[Design] #6 - 글씨크기 수정
yurim830 Oct 22, 2024
25af2b5
[Move] - Practice 폴더로 이동
yurim830 Oct 24, 2024
5b8baf6
...
yurim830 Oct 24, 2024
e5b04f7
[Feat] #6 - SummaryView 완성 (+ 스크롤뷰 레이아웃 오류 있으나 해결 못함)
yurim830 Oct 24, 2024
38591f7
[Add, Feat] #6 - (UIButton+Extension) Configure 함수 생성
yurim830 Oct 24, 2024
8caf1f2
[Fix] #6 - 버튼 이미지 configuration 오류 수정
yurim830 Oct 24, 2024
4fac0e4
[Feat] #6 - configureButton 함수 기능 추가 (contentInsets)
yurim830 Oct 24, 2024
13c9c30
[Feat] #6 - numberOfLines 기본값 0으로 설정
yurim830 Oct 24, 2024
c791371
기본 글씨크기 변경 16 -> 17
yurim830 Oct 24, 2024
0d0c69c
[Feat] #6 - setLineSpacing 함수 추가
yurim830 Oct 24, 2024
8675705
[Feat] #6 - 색상만 설정
yurim830 Oct 24, 2024
35a5bbd
글씨 크기 수정
yurim830 Oct 24, 2024
ab70aa1
[Feat] #6 - updateView 완성
yurim830 Oct 24, 2024
fe53053
[Add] #6 - toss 미리보기 이미지 에셋 추가
yurim830 Oct 24, 2024
f71d19d
[Feat] #6 - previewView 완성
yurim830 Oct 24, 2024
afcc9f3
[Feat] #6 - previewViewImageView 테두리 추가
yurim830 Oct 24, 2024
739ec2d
[Feat] #6 - description 뷰 완성
yurim830 Oct 24, 2024
c1a001f
[Feat] #6 - 평가 및 리뷰 요약뷰 완성
yurim830 Oct 24, 2024
ee0dcb3
[Add, Feat] #6 - symbol 이미지 두께 설정하는 함수 추가
yurim830 Oct 24, 2024
abe707f
[Feat] #6 - 기본 글씨 크기 변경
yurim830 Oct 24, 2024
27994c2
[Feat] #6 - 기본 글씨 두께 변경(light->regular)
yurim830 Oct 24, 2024
50d1a02
[Move] 파일 위치 되돌리기
yurim830 Oct 24, 2024
4d227f0
[Feat] #6 - 버튼 이미지 부분 UIImage extension 함수로 수정
yurim830 Oct 24, 2024
4b557dd
[Design] #6 - 색 변경
yurim830 Oct 24, 2024
714216e
[Feat] #6 - UIImage extension 함수 사용, yellow -> orange로 변경
yurim830 Oct 24, 2024
468fde9
[Design] #6 - 컴포넌트 크기 조정
yurim830 Oct 24, 2024
6b4a67a
[Add, Feat] #6 - 별점 요약 사진 추가 및 컴포넌트 속성 수정
yurim830 Oct 24, 2024
9c76966
[feat] #6 - ConfigureImage함수 pointSize 옵셔널로 수정
yurim830 Oct 24, 2024
de8ae7f
[Feat] #6 - UIImage symbol weight 함수 적용
yurim830 Oct 25, 2024
e80822d
[Merge] #6 - branch 'week2' of https://github.com/AND-SOPT-iOS/KimYu…
yurim830 Oct 25, 2024
c5c8aee
[Feat] #6 - 프로퍼티 이름 변경(update -> vesrion)
yurim830 Oct 25, 2024
dd8f4e0
[Add] #6 - (VersionRecordVC) 생성
yurim830 Oct 25, 2024
40b1651
[Feat] #6 - VersionRecordVC 네비게이션 연결
yurim830 Oct 25, 2024
6ee36ee
[Add, Feat] #6 - 전체 평가 및 리뷰 VC 생성 및 버튼 연결
yurim830 Oct 25, 2024
2bdba1f
[Add] #6 - FeedbackWrite View, VC 생성
yurim830 Oct 25, 2024
683696c
[Feat] #6 - FeedbackWriteView 완성
yurim830 Oct 25, 2024
b2fc57a
[Refactor] #6 - 접근제어자 수정
yurim830 Oct 25, 2024
3e75b73
[Feat] #6 - FeedbackWriteView 모달 설정
yurim830 Oct 25, 2024
1cdafd4
[Design] 폰트 수정
yurim830 Oct 25, 2024
14a08bf
[Feat] #6 - 취소 버튼 dismiss 액션 설정
yurim830 Oct 25, 2024
f0d299c
[Add, Feat] #6 - date 생성, str 변환 함수 생성
yurim830 Oct 25, 2024
ccda275
[Add] #6 - (Date+Extension)
yurim830 Oct 25, 2024
4ed7137
[Feat] #6 - Feedback 보내기 기능 구현(delegate 패턴)
yurim830 Oct 25, 2024
89becd1
[Feat] - (UIlabel+Extension) 옵셔널 대응
yurim830 Oct 25, 2024
94624e8
[Feat] - (FeedbackWriteView) Feedback 타입 맞추기
yurim830 Oct 25, 2024
fd2d488
[Feat] #6 - 개발자 피드백 유무에 따라 isHidden 처리
yurim830 Oct 25, 2024
5cdce7e
[Feat] #6 - 앱 설명 더보기 버튼 액션 구현
yurim830 Oct 25, 2024
317f59e
[Feat] #6 - 별점 드래그/탭 기능 구현
yurim830 Oct 25, 2024
b7d0366
[Feat] #6 - 별점 드래그/탭 기능 구현
yurim830 Oct 25, 2024
d0e1cc8
[Feat] #6 - 탭하여 평가했을 때 피드백 박스 노란 별도 바뀌게 설정
yurim830 Oct 25, 2024
607f6fd
[Feat] #6 - starCount 바인딩
yurim830 Oct 25, 2024
b6b4b7b
[Feat] #6 - 탭하여 평가하기와 노란 별 수 일치시키기
yurim830 Oct 25, 2024
fa881ac
[Feat] #6 - 네비게이션 바 아이템 설정
yurim830 Oct 25, 2024
ae4fd34
[Feat] #6 - 스크롤 될 때 네비게이션 바 아이템 상태 변경
yurim830 Oct 25, 2024
7218788
줄맞춤
yurim830 Oct 25, 2024
6a2b25c
[Feat] #6 - TextView delegate 설정
yurim830 Oct 25, 2024
da9fce4
[Feat] #6 - 기본 별점 5점으로, 바인딩 오류 수정
yurim830 Oct 25, 2024
1baebe8
[Fix] #6 - developer 라벨에 author 데이터 넣은 것 수정
yurim830 Oct 25, 2024
cb0550e
[Add, Refactor] #6 - model 분리
yurim830 Oct 26, 2024
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
122 changes: 122 additions & 0 deletions 35-seminar.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@
/* Begin PBXBuildFile section */
152919B72CB10FE200438E2B /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = 152919B62CB10FE200438E2B /* SnapKit */; };
1570C8CD2CB43A4C00A43324 /* .gitignore in Resources */ = {isa = PBXBuildFile; fileRef = 1570C8CC2CB43A4C00A43324 /* .gitignore */; };
157119D62CBE962F00362252 /* TitleLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157119D52CBE962F00362252 /* TitleLabel.swift */; };
157119D82CBE965700362252 /* SubtitleLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157119D72CBE965700362252 /* SubtitleLabel.swift */; };
157119DA2CBE96BB00362252 /* ContentLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157119D92CBE96BB00362252 /* ContentLabel.swift */; };
157119DD2CBE96F500362252 /* UILabel+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 157119DC2CBE96F500362252 /* UILabel+Extension.swift */; };
15728FC52CCCAF0100E1E151 /* Feedback.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15728FC42CCCAF0100E1E151 /* Feedback.swift */; };
15728FC72CCCAF3100E1E151 /* StarColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15728FC62CCCAF3100E1E151 /* StarColor.swift */; };
1590A63D2CBE6C6A00FB32AE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1590A6352CBE6C6A00FB32AE /* Assets.xcassets */; };
1590A63F2CBE6C6A00FB32AE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1590A6392CBE6C6A00FB32AE /* LaunchScreen.storyboard */; };
1590A6402CBE6C6A00FB32AE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1590A62A2CBE6C6A00FB32AE /* AppDelegate.swift */; };
Expand All @@ -17,11 +23,29 @@
1590A6432CBE6C6A00FB32AE /* Week1DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1590A62E2CBE6C6A00FB32AE /* Week1DetailViewController.swift */; };
1590A6442CBE6C6A00FB32AE /* Week1MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1590A6302CBE6C6A00FB32AE /* Week1MainView.swift */; };
1590A6452CBE6C6A00FB32AE /* Week1MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1590A6312CBE6C6A00FB32AE /* Week1MainViewController.swift */; };
1590A6A12CBE737600FB32AE /* PractScrollViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1590A6A02CBE737600FB32AE /* PractScrollViewController.swift */; };
1590A6A42CBE8A9200FB32AE /* AppDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1590A6A32CBE8A9200FB32AE /* AppDetailViewController.swift */; };
15EC30532CCA434700A0480B /* UIButton+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC30522CCA434700A0480B /* UIButton+Extension.swift */; };
15EC30552CCAB69000A0480B /* AppDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC30542CCAB69000A0480B /* AppDetailView.swift */; };
15EC30572CCAC33700A0480B /* UIImage+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC30562CCAC33700A0480B /* UIImage+Extension.swift */; };
15EC30592CCB727300A0480B /* VersionRecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC30582CCB727300A0480B /* VersionRecordViewController.swift */; };
15EC305B2CCB76F500A0480B /* AllFeedbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC305A2CCB76F500A0480B /* AllFeedbackViewController.swift */; };
15EC305D2CCB792300A0480B /* FeedbackWriteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC305C2CCB792300A0480B /* FeedbackWriteViewController.swift */; };
15EC305F2CCB793500A0480B /* FeedbackWriteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC305E2CCB793500A0480B /* FeedbackWriteView.swift */; };
15EC30612CCB8E9C00A0480B /* Date+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15EC30602CCB8E9C00A0480B /* Date+Extension.swift */; };
15F4FD072CC73D0A00C99A20 /* StarStackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15F4FD062CC73D0A00C99A20 /* StarStackView.swift */; };
15F4FD0F2CC7649A00C99A20 /* BorderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15F4FD0E2CC7649A00C99A20 /* BorderView.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
152919992CB101BA00438E2B /* 35-seminar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "35-seminar.app"; sourceTree = BUILT_PRODUCTS_DIR; };
1570C8CC2CB43A4C00A43324 /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = "<group>"; };
157119D52CBE962F00362252 /* TitleLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleLabel.swift; sourceTree = "<group>"; };
157119D72CBE965700362252 /* SubtitleLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubtitleLabel.swift; sourceTree = "<group>"; };
157119D92CBE96BB00362252 /* ContentLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentLabel.swift; sourceTree = "<group>"; };
157119DC2CBE96F500362252 /* UILabel+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UILabel+Extension.swift"; sourceTree = "<group>"; };
15728FC42CCCAF0100E1E151 /* Feedback.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Feedback.swift; sourceTree = "<group>"; };
15728FC62CCCAF3100E1E151 /* StarColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StarColor.swift; sourceTree = "<group>"; };
1590A62A2CBE6C6A00FB32AE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
1590A62B2CBE6C6A00FB32AE /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
1590A62D2CBE6C6A00FB32AE /* Week1DetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Week1DetailView.swift; sourceTree = "<group>"; };
Expand All @@ -31,6 +55,18 @@
1590A6352CBE6C6A00FB32AE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
1590A6372CBE6C6A00FB32AE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
1590A6382CBE6C6A00FB32AE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
1590A6A02CBE737600FB32AE /* PractScrollViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PractScrollViewController.swift; sourceTree = "<group>"; };
1590A6A32CBE8A9200FB32AE /* AppDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDetailViewController.swift; sourceTree = "<group>"; };
15EC30522CCA434700A0480B /* UIButton+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+Extension.swift"; sourceTree = "<group>"; };
15EC30542CCAB69000A0480B /* AppDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDetailView.swift; sourceTree = "<group>"; };
15EC30562CCAC33700A0480B /* UIImage+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Extension.swift"; sourceTree = "<group>"; };
15EC30582CCB727300A0480B /* VersionRecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionRecordViewController.swift; sourceTree = "<group>"; };
15EC305A2CCB76F500A0480B /* AllFeedbackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllFeedbackViewController.swift; sourceTree = "<group>"; };
15EC305C2CCB792300A0480B /* FeedbackWriteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackWriteViewController.swift; sourceTree = "<group>"; };
15EC305E2CCB793500A0480B /* FeedbackWriteView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackWriteView.swift; sourceTree = "<group>"; };
15EC30602CCB8E9C00A0480B /* Date+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+Extension.swift"; sourceTree = "<group>"; };
15F4FD062CC73D0A00C99A20 /* StarStackView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StarStackView.swift; sourceTree = "<group>"; };
15F4FD0E2CC7649A00C99A20 /* BorderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BorderView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -62,6 +98,38 @@
name = Products;
sourceTree = "<group>";
};
157119D42CBE8FB700362252 /* Reusables */ = {
isa = PBXGroup;
children = (
15F4FD0E2CC7649A00C99A20 /* BorderView.swift */,
15F4FD062CC73D0A00C99A20 /* StarStackView.swift */,
157119D52CBE962F00362252 /* TitleLabel.swift */,
157119D72CBE965700362252 /* SubtitleLabel.swift */,
157119D92CBE96BB00362252 /* ContentLabel.swift */,
);
path = Reusables;
sourceTree = "<group>";
};
157119DB2CBE96DE00362252 /* Extensions */ = {
isa = PBXGroup;
children = (
15EC30522CCA434700A0480B /* UIButton+Extension.swift */,
15EC30562CCAC33700A0480B /* UIImage+Extension.swift */,
157119DC2CBE96F500362252 /* UILabel+Extension.swift */,
15EC30602CCB8E9C00A0480B /* Date+Extension.swift */,
);
path = Extensions;
sourceTree = "<group>";
};
15728FC32CCCAEE000E1E151 /* Models */ = {
isa = PBXGroup;
children = (
15728FC42CCCAF0100E1E151 /* Feedback.swift */,
15728FC62CCCAF3100E1E151 /* StarColor.swift */,
);
path = Models;
sourceTree = "<group>";
};
1590A62C2CBE6C6A00FB32AE /* Application */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -103,6 +171,7 @@
children = (
1590A6392CBE6C6A00FB32AE /* LaunchScreen.storyboard */,
1590A6332CBE6C6A00FB32AE /* Week1 */,
1590A69F2CBE719000FB32AE /* Week2 */,
);
path = Presentation;
sourceTree = "<group>";
Expand All @@ -126,6 +195,39 @@
path = Resource;
sourceTree = "<group>";
};
1590A69F2CBE719000FB32AE /* Week2 */ = {
isa = PBXGroup;
children = (
15728FC32CCCAEE000E1E151 /* Models */,
157119DB2CBE96DE00362252 /* Extensions */,
157119D42CBE8FB700362252 /* Reusables */,
15F4FD092CC7405800C99A20 /* Practice */,
15F4FD082CC73E1D00C99A20 /* View */,
);
path = Week2;
sourceTree = "<group>";
};
15F4FD082CC73E1D00C99A20 /* View */ = {
isa = PBXGroup;
children = (
15EC30542CCAB69000A0480B /* AppDetailView.swift */,
1590A6A32CBE8A9200FB32AE /* AppDetailViewController.swift */,
15EC305A2CCB76F500A0480B /* AllFeedbackViewController.swift */,
15EC305E2CCB793500A0480B /* FeedbackWriteView.swift */,
15EC305C2CCB792300A0480B /* FeedbackWriteViewController.swift */,
15EC30582CCB727300A0480B /* VersionRecordViewController.swift */,
);
path = View;
sourceTree = "<group>";
};
15F4FD092CC7405800C99A20 /* Practice */ = {
isa = PBXGroup;
children = (
1590A6A02CBE737600FB32AE /* PractScrollViewController.swift */,
);
path = Practice;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
Expand Down Expand Up @@ -204,12 +306,30 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
15EC30592CCB727300A0480B /* VersionRecordViewController.swift in Sources */,
15EC30612CCB8E9C00A0480B /* Date+Extension.swift in Sources */,
1590A6A12CBE737600FB32AE /* PractScrollViewController.swift in Sources */,
15728FC72CCCAF3100E1E151 /* StarColor.swift in Sources */,
157119D82CBE965700362252 /* SubtitleLabel.swift in Sources */,
15EC30552CCAB69000A0480B /* AppDetailView.swift in Sources */,
1590A6402CBE6C6A00FB32AE /* AppDelegate.swift in Sources */,
1590A6412CBE6C6A00FB32AE /* SceneDelegate.swift in Sources */,
157119D62CBE962F00362252 /* TitleLabel.swift in Sources */,
15EC30532CCA434700A0480B /* UIButton+Extension.swift in Sources */,
1590A6A42CBE8A9200FB32AE /* AppDetailViewController.swift in Sources */,
1590A6422CBE6C6A00FB32AE /* Week1DetailView.swift in Sources */,
157119DA2CBE96BB00362252 /* ContentLabel.swift in Sources */,
1590A6432CBE6C6A00FB32AE /* Week1DetailViewController.swift in Sources */,
1590A6442CBE6C6A00FB32AE /* Week1MainView.swift in Sources */,
15EC305D2CCB792300A0480B /* FeedbackWriteViewController.swift in Sources */,
15F4FD072CC73D0A00C99A20 /* StarStackView.swift in Sources */,
157119DD2CBE96F500362252 /* UILabel+Extension.swift in Sources */,
15F4FD0F2CC7649A00C99A20 /* BorderView.swift in Sources */,
15EC305F2CCB793500A0480B /* FeedbackWriteView.swift in Sources */,
15EC305B2CCB76F500A0480B /* AllFeedbackViewController.swift in Sources */,
15EC30572CCAC33700A0480B /* UIImage+Extension.swift in Sources */,
1590A6452CBE6C6A00FB32AE /* Week1MainViewController.swift in Sources */,
15728FC52CCCAF0100E1E151 /* Feedback.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -241,6 +361,7 @@
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand Down Expand Up @@ -268,6 +389,7 @@
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
Expand Down
2 changes: 1 addition & 1 deletion 35-seminar/Application/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(windowScene: windowScene)
let navigationController = UINavigationController(rootViewController: Week1MainViewController())
let navigationController = UINavigationController(rootViewController: AppDetailViewController())
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
}
Expand Down
35 changes: 35 additions & 0 deletions 35-seminar/Presentation/Week2/Extensions/Date+Extension.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//
// Date+Extension.swift
// 35-seminar
//
// Created by 김유림 on 10/25/24.
//

import Foundation

extension Date {
static func form(year: Int, month: Int, day: Int) -> Date? {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Date형식을 생성하는 함수라고 생각하는데
제가 이해한 게 맞다면 init으로 구현하는 것도 고려해보시면 좋을 것 같아요!

var dateComponents = DateComponents()
dateComponents.year = year
dateComponents.month = month
dateComponents.day = day

return Calendar.current.date(from: dateComponents)
}

static func formattedDate(date: Date?) -> String {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

매개변수로 받지 않고 static이 아닌 Date의 함수로 작동할 수 있도록 self를 이용하면 더 깔끔할 것 같아요 😄

guard let inputDate = date else { return "날짜 없음" }

let currentYear = Calendar.current.component(.year, from: Date())
let inputYear = Calendar.current.component(.year, from: inputDate)
let yearDifference = currentYear - inputYear

guard yearDifference > 0 else {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "M월 d"
return dateFormatter.string(from: inputDate)
}

return "\(yearDifference)년 전"
}
}
59 changes: 59 additions & 0 deletions 35-seminar/Presentation/Week2/Extensions/UIButton+Extension.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
//
// UIButton+Extension.swift
// 35-seminar
//
// Created by 김유림 on 10/24/24.
//

import UIKit

enum ConfigurationType {
case plain
case filled
}

extension UIButton {
func configureButton(configType: ConfigurationType = .plain,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Button의 속성을 모두 컨트롤 할 수 있는 함수인 것 같아요.
속성 값을 대입하는 것과 함수의 매개 변수를 하나씩 컨트롤 하는 것의 차이가 궁금해요!

title: String? = nil,
fontSize: CGFloat = 15,
fontWeight: UIFont.Weight = .regular,
systemName: String = "",
pointSize: CGFloat? = nil,
symbolWeight: UIImage.SymbolWeight = .unspecified,
cornerStyle: UIButton.Configuration.CornerStyle? = nil,
foregroundColor: UIColor = .tintColor,
backgroundColor: UIColor = .clear,
removeContentInsets: Bool = false,
for state: UIControl.State = .normal) {

var config = {
switch configType {
case .plain:
return UIButton.Configuration.plain()
case .filled:
return UIButton.Configuration.filled()
}
}()

if let title = title {
let attributes: [NSAttributedString.Key: Any] = [.font : UIFont.systemFont(ofSize: fontSize, weight: fontWeight)]
let attributedTitle = NSAttributedString(string: title, attributes: attributes)
self.setAttributedTitle(attributedTitle, for: state)
}

config.image = UIImage.configureImage(systemName: systemName, pointSize: pointSize, symbolWeight: symbolWeight)

if let cornerStyle = cornerStyle {
config.cornerStyle = cornerStyle
}

config.baseForegroundColor = foregroundColor
config.baseBackgroundColor = backgroundColor

if removeContentInsets {
config.contentInsets = .zero
}

self.configuration = config
}
}
20 changes: 20 additions & 0 deletions 35-seminar/Presentation/Week2/Extensions/UIImage+Extension.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// UIImageView+Extension.swift
// 35-seminar
//
// Created by 김유림 on 10/25/24.
//

import UIKit

extension UIImage {
class func configureImage(systemName: String, pointSize: CGFloat? = nil, symbolWeight: UIImage.SymbolWeight) -> UIImage? {
if let pointSize = pointSize {
let symbolConfig = UIImage.SymbolConfiguration(pointSize: pointSize, weight: symbolWeight)
return UIImage(systemName: systemName, withConfiguration: symbolConfig)
}

let symbolConfig = UIImage.SymbolConfiguration(weight: symbolWeight)
return UIImage(systemName: systemName, withConfiguration: symbolConfig)
}
}
25 changes: 25 additions & 0 deletions 35-seminar/Presentation/Week2/Extensions/UILabel+Extension.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//
// UILabel+Extension.swift
// 35-seminar
//
// Created by 김유림 on 10/15/24.
//

import UIKit

extension UILabel {
func configureLabel(alignment: NSTextAlignment = .left, color: UIColor = .label, size: CGFloat, weight: UIFont.Weight, text: String? = nil, numberOfLines: Int = 1) {
self.textAlignment = alignment
self.textColor = color
self.font = .systemFont(ofSize: size, weight: weight)
self.text = text
self.numberOfLines = numberOfLines
}

func setLineSpacing(_ lineSpacing: CGFloat) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UILabel에 줄 간격을 설정하는 방법으로 좋은 것 같아요!

guard let text = self.text else { return }
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineSpacing
self.attributedText = NSAttributedString(string: text, attributes: [.paragraphStyle: paragraphStyle])
}
}
Loading