Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
f64caca
[Add] Tutorial 관련 VCs 생성, Onboarding 폴더구조 수정 (#261)
yurim830 Aug 21, 2025
1cb84f1
[Add,Feat] TutorialTitleStackView 컴포넌트 구현 (#261)
yurim830 Aug 21, 2025
bb079c2
[Feat] 튜토리얼 컨테이너 PageVC, PageControl 구현 (#261)
yurim830 Aug 21, 2025
9b6cb7b
[Add] 튜토리얼 1페이지 로컬태그 이미지 에셋 추가 (#261)
yurim830 Aug 21, 2025
52ecc98
[Chore] StringLiterals 추가 - UserDefaults, Lottie, Tutorial (#261)
yurim830 Aug 21, 2025
9fbac23
[Feat] 깜빡이는 애니메이션 UIView extension 메소드 구현 (#261)
yurim830 Aug 21, 2025
6aaae69
[Chore] 기존 로띠 StringLiterals로 수정 (#261)
yurim830 Aug 21, 2025
11b8104
[Feat] 튜토리얼 1페이지(Review) 구현 (#261)
yurim830 Aug 21, 2025
5547001
[Add] 튜토리얼 2페이지 음식점사진 에셋 추가 (#261)
yurim830 Aug 21, 2025
c468a4a
[Feat] 페이드 인 애니메이션 메소드 구현 (#261)
yurim830 Aug 21, 2025
2bd0bcd
[Feat] 튜토리얼 2페이지(지역별 50곳만) 구현 (#261)
yurim830 Aug 21, 2025
ec4318c
[Add] 튜토리얼 3페이지 이미지 에셋 추가 (#261)
yurim830 Aug 21, 2025
151217a
[Feat] 튜토리얼 3페이지(시작하기) 구현 (#261)
yurim830 Aug 21, 2025
20cd9c4
[Chore] 애니메이션 타이밍, 배경색 수정 (#261)
yurim830 Aug 21, 2025
667677f
[Chore] 튜토리얼 3페이지 시작하기 버튼 액션설정 (#261)
yurim830 Aug 22, 2025
557915d
[Feat] 튜토리얼 네비게이션 분기처리 (#261)
yurim830 Aug 22, 2025
d07e273
[Feat] 튜토리얼 1페이지 디자인 변경사항 적용 (#261)
yurim830 Aug 22, 2025
f03663a
[Chore] 튜토리얼 2페이지 title, subTitle 애니메이션 분리 (#261)
yurim830 Aug 22, 2025
ca95af1
[Chore] 튜토리얼 3페이지 title, subTitle 애니메이션 분리 (#262)
yurim830 Aug 22, 2025
8c4b448
[Fix] 1페이지 애니메이션 타이밍 수정 (#261)
yurim830 Aug 22, 2025
aee781f
[Fix] PageControl 위치 조정 (#261)
yurim830 Aug 22, 2025
c92a3d7
[Del] TutorialPageTitleStack 컴포넌트 삭제 (#261)
yurim830 Aug 22, 2025
e2f28c3
[Chore] 애니메이션 시간 0.8초로 단축 (#261)
yurim830 Aug 22, 2025
4c0c6fa
[Fix] 3페이지 이미지 비율 수정 (#261)
yurim830 Aug 22, 2025
176922e
[Add,Chore] Pretendard-ExtraBold 추가, ACFontType 수정 (#261)
yurim830 Aug 22, 2025
3f23d84
[Chore] 튜토리얼 타이틀 폰트 ExtraBold 로 수정 (#261)
yurim830 Aug 22, 2025
8bc0b06
[Chore] 모든 로띠 StringLiterals로 정리 (#261)
yurim830 Aug 22, 2025
e876da6
[Delete] 안 쓰는 로띠 삭제 (#261)
yurim830 Aug 22, 2025
ea8559a
[Add,Del,Feat] Pretendard-Extrabold 삭제, bold 추가, h3B 폰트스타일 생성, 적용 (#261)
yurim830 Aug 24, 2025
cbb09de
[Chore] 2페이지 partialText 적용 (#261)
yurim830 Aug 24, 2025
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
60 changes: 48 additions & 12 deletions ACON-iOS/ACON-iOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
1502D71D2DE9D44100A21D81 /* RegionErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1502D71C2DE9D44100A21D81 /* RegionErrorView.swift */; };
1503DBEB2DFD9CBB001FC3E5 /* GetMenuboardImageListResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1503DBEA2DFD9CBB001FC3E5 /* GetMenuboardImageListResponse.swift */; };
150A105C2DA28F2600B0BC9A /* ACTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 150A105B2DA28F2600B0BC9A /* ACTextField.swift */; };
150BA57A2E56F3720058A06B /* TutorialContainerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 150BA5792E56F3720058A06B /* TutorialContainerViewController.swift */; };
150BA57F2E56F8170058A06B /* ReviewTutorialViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 150BA57E2E56F8170058A06B /* ReviewTutorialViewController.swift */; };
150BA5812E56F8580058A06B /* LimitedSpotsTutorialViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 150BA5802E56F8580058A06B /* LimitedSpotsTutorialViewController.swift */; };
150BA5832E56F87E0058A06B /* StartNowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 150BA5822E56F87E0058A06B /* StartNowViewController.swift */; };
151003EC2D5FBF7200409DF4 /* GetProfileResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 151003EB2D5FBF7200409DF4 /* GetProfileResponse.swift */; };
151003EE2D5FC48B00409DF4 /* ProfileService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 151003ED2D5FC48B00409DF4 /* ProfileService.swift */; };
151003F02D5FC4C600409DF4 /* ProfileTargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 151003EF2D5FC4C600409DF4 /* ProfileTargetType.swift */; };
Expand Down Expand Up @@ -53,6 +57,7 @@
1547A88B2D3596B600E96616 /* SpotFilterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1547A88A2D3596B600E96616 /* SpotFilterType.swift */; };
1547A88E2D35B13700E96616 /* FilterTagButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1547A88D2D35B13700E96616 /* FilterTagButton.swift */; };
1549976D2DEC51C80040242F /* SpotType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1549976C2DEC51C80040242F /* SpotType.swift */; };
154FB3772E5B3EB30075DC03 /* Pretendard-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 154FB3762E5B3EB30075DC03 /* Pretendard-Bold.otf */; };
155422A22E41D01600547471 /* ApiVersionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155422A12E41D01600547471 /* ApiVersionType.swift */; };
155422A42E41E00300547471 /* ACTargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155422A32E41E00300547471 /* ACTargetType.swift */; };
1558BA1A2D318FFC00ECDEF8 /* ACTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1558BA192D318FFC00ECDEF8 /* ACTabBarController.swift */; };
Expand Down Expand Up @@ -171,8 +176,6 @@
743900972DC8696A002F91B1 /* GlassButtonType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743900962DC86966002F91B1 /* GlassButtonType.swift */; };
74403B6D2DEF900B00B7B832 /* SpotListGoogleAdCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74403B6C2DEF900B00B7B832 /* SpotListGoogleAdCollectionViewCell.swift */; };
74403B6F2DF1D6DD00B7B832 /* GoogleAdsErrorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74403B6E2DF1D6D600B7B832 /* GoogleAdsErrorType.swift */; };
745000D72D403F0200262CBE /* lodingLottie.json in Resources */ = {isa = PBXBuildFile; fileRef = 745000D62D403F0200262CBE /* lodingLottie.json */; };
745000D82D403F0200262CBE /* checkLottie.json in Resources */ = {isa = PBXBuildFile; fileRef = 745000D52D403F0200262CBE /* checkLottie.json */; };
745862702DDBC3CD0075A854 /* ACAlertActionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7458626F2DDBC3C60075A854 /* ACAlertActionType.swift */; };
745A81CC2D3E429300E28002 /* LocalVerificationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 745A81CB2D3E428B00E28002 /* LocalVerificationViewModel.swift */; };
745B19AC2D40021E00BDBDA4 /* PostLoginRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 745B19AB2D40021700BDBDA4 /* PostLoginRequest.swift */; };
Expand Down Expand Up @@ -331,6 +334,10 @@
1502D71C2DE9D44100A21D81 /* RegionErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegionErrorView.swift; sourceTree = "<group>"; };
1503DBEA2DFD9CBB001FC3E5 /* GetMenuboardImageListResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMenuboardImageListResponse.swift; sourceTree = "<group>"; };
150A105B2DA28F2600B0BC9A /* ACTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACTextField.swift; sourceTree = "<group>"; };
150BA5792E56F3720058A06B /* TutorialContainerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialContainerViewController.swift; sourceTree = "<group>"; };
150BA57E2E56F8170058A06B /* ReviewTutorialViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewTutorialViewController.swift; sourceTree = "<group>"; };
150BA5802E56F8580058A06B /* LimitedSpotsTutorialViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LimitedSpotsTutorialViewController.swift; sourceTree = "<group>"; };
150BA5822E56F87E0058A06B /* StartNowViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartNowViewController.swift; sourceTree = "<group>"; };
151003EB2D5FBF7200409DF4 /* GetProfileResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetProfileResponse.swift; sourceTree = "<group>"; };
151003ED2D5FC48B00409DF4 /* ProfileService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileService.swift; sourceTree = "<group>"; };
151003EF2D5FC4C600409DF4 /* ProfileTargetType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileTargetType.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -373,6 +380,7 @@
1547A88A2D3596B600E96616 /* SpotFilterType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotFilterType.swift; sourceTree = "<group>"; };
1547A88D2D35B13700E96616 /* FilterTagButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterTagButton.swift; sourceTree = "<group>"; };
1549976C2DEC51C80040242F /* SpotType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotType.swift; sourceTree = "<group>"; };
154FB3762E5B3EB30075DC03 /* Pretendard-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Pretendard-Bold.otf"; sourceTree = "<group>"; };
155422A12E41D01600547471 /* ApiVersionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApiVersionType.swift; sourceTree = "<group>"; };
155422A32E41E00300547471 /* ACTargetType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACTargetType.swift; sourceTree = "<group>"; };
1558BA192D318FFC00ECDEF8 /* ACTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACTabBarController.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -489,8 +497,6 @@
743900962DC86966002F91B1 /* GlassButtonType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlassButtonType.swift; sourceTree = "<group>"; };
74403B6C2DEF900B00B7B832 /* SpotListGoogleAdCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotListGoogleAdCollectionViewCell.swift; sourceTree = "<group>"; };
74403B6E2DF1D6D600B7B832 /* GoogleAdsErrorType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleAdsErrorType.swift; sourceTree = "<group>"; };
745000D52D403F0200262CBE /* checkLottie.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = checkLottie.json; sourceTree = "<group>"; };
745000D62D403F0200262CBE /* lodingLottie.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = lodingLottie.json; sourceTree = "<group>"; };
7458626F2DDBC3C60075A854 /* ACAlertActionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACAlertActionType.swift; sourceTree = "<group>"; };
745A81CB2D3E428B00E28002 /* LocalVerificationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalVerificationViewModel.swift; sourceTree = "<group>"; };
745B19AB2D40021700BDBDA4 /* PostLoginRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostLoginRequest.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -666,6 +672,34 @@
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
150BA57B2E56F7770058A06B /* TutorialPages */ = {
isa = PBXGroup;
children = (
150BA57E2E56F8170058A06B /* ReviewTutorialViewController.swift */,
150BA5802E56F8580058A06B /* LimitedSpotsTutorialViewController.swift */,
150BA5822E56F87E0058A06B /* StartNowViewController.swift */,
);
path = TutorialPages;
sourceTree = "<group>";
};
150BA57C2E56F7990058A06B /* PreferenceSetup */ = {
isa = PBXGroup;
children = (
74A13D632DCBBAB4007FFFC3 /* OnboardingView.swift */,
74A13D612DCBB978007FFFC3 /* OnboardingViewController.swift */,
);
path = PreferenceSetup;
sourceTree = "<group>";
};
150BA57D2E56F7AE0058A06B /* Tutorial */ = {
isa = PBXGroup;
children = (
150BA5792E56F3720058A06B /* TutorialContainerViewController.swift */,
150BA57B2E56F7770058A06B /* TutorialPages */,
);
path = Tutorial;
sourceTree = "<group>";
};
151003E72D5FBEE900409DF4 /* Profile */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -1548,6 +1582,7 @@
15F15E822DBFD17A002F81E2 /* Pretendard-Light.otf */,
748D6FA02D2BD65D007690B4 /* Pretendard-Regular.otf */,
748D6F9C2D2BD641007690B4 /* Pretendard-SemiBold.otf */,
154FB3762E5B3EB30075DC03 /* Pretendard-Bold.otf */,
);
path = Fonts;
sourceTree = "<group>";
Expand Down Expand Up @@ -1676,10 +1711,10 @@
74A13D5F2DCBB960007FFFC3 /* Onboarding */ = {
isa = PBXGroup;
children = (
746A13BF2E0065590097DA25 /* Model */,
746A13BC2E0057120097DA25 /* ViewModel */,
7436352A2DEE2C62009B0035 /* Type */,
746A13BF2E0065590097DA25 /* Model */,
74A13D602DCBB96D007FFFC3 /* View */,
746A13BC2E0057120097DA25 /* ViewModel */,
);
path = Onboarding;
sourceTree = "<group>";
Expand All @@ -1688,8 +1723,8 @@
isa = PBXGroup;
children = (
74A13D652DCBC2A9007FFFC3 /* Cell */,
74A13D632DCBBAB4007FFFC3 /* OnboardingView.swift */,
74A13D612DCBB978007FFFC3 /* OnboardingViewController.swift */,
150BA57C2E56F7990058A06B /* PreferenceSetup */,
150BA57D2E56F7AE0058A06B /* Tutorial */,
);
path = View;
sourceTree = "<group>";
Expand Down Expand Up @@ -1796,8 +1831,6 @@
isa = PBXGroup;
children = (
15C0ED692D42CDA300C9ED83 /* loadingWhite.json */,
745000D52D403F0200262CBE /* checkLottie.json */,
745000D62D403F0200262CBE /* lodingLottie.json */,
749C90E72DD4D37100455211 /* splashLottie.json */,
747FB8FF2DDB95980027F252 /* finishedUpload.json */,
748F6A582DE0CCA60073CA9E /* drop1Acorn.json */,
Expand Down Expand Up @@ -2071,6 +2104,7 @@
buildActionMask = 2147483647;
files = (
74FA77842DD43709006846C9 /* SplashBGM.mp3 in Resources */,
154FB3772E5B3EB30075DC03 /* Pretendard-Bold.otf in Resources */,
15BFF8B92D665BAD00909C4F /* Debug.xcconfig in Resources */,
747FB9002DDB95980027F252 /* finishedUpload.json in Resources */,
15BFF8BA2D665BAD00909C4F /* Release.xcconfig in Resources */,
Expand All @@ -2083,8 +2117,6 @@
748D6FA12D2BD65D007690B4 /* Pretendard-Regular.otf in Resources */,
15F15E832DBFD17A002F81E2 /* Pretendard-Light.otf in Resources */,
748F6A592DE0CCA60073CA9E /* drop1Acorn.json in Resources */,
745000D72D403F0200262CBE /* lodingLottie.json in Resources */,
745000D82D403F0200262CBE /* checkLottie.json in Resources */,
15C0ED6A2D42CDA300C9ED83 /* loadingWhite.json in Resources */,
748D6F6E2D2BCA1C007690B4 /* LaunchScreen.storyboard in Resources */,
746AA0352DAD0EFF00E28B66 /* GoogleService-Info.plist in Resources */,
Expand Down Expand Up @@ -2188,6 +2220,7 @@
74C914D32D64E01C00BC13E1 /* PutImageToPresignedURLRequest.swift in Sources */,
7462616F2D3EA48300A4E84F /* GetSearchKeywordResponse.swift in Sources */,
74DDBA8B2DC45E3B00BF9824 /* ACButtonType.swift in Sources */,
150BA5812E56F8580058A06B /* LimitedSpotsTutorialViewController.swift in Sources */,
156AA72A2D6510E1005B8DCE /* GetNicknameValidityRequest.swift in Sources */,
74D297F82D63467900DDEE31 /* ImageService.swift in Sources */,
15A147212D5B256D003793EE /* LocalVerificationFlowType.swift in Sources */,
Expand Down Expand Up @@ -2236,6 +2269,7 @@
746F5BF22DE00CE90081569B /* GlassBorderAttributes.swift in Sources */,
748D6FAA2D2C3FF1007690B4 /* BaseCollectionViewCell.swift in Sources */,
748ECA6B2D31918D00BBC981 /* LoginView.swift in Sources */,
150BA57F2E56F8170058A06B /* ReviewTutorialViewController.swift in Sources */,
D6EA38152D42B88F002B68B9 /* SearchEmptyView.swift in Sources */,
74D31C712D5832D000B4B2B4 /* AlbumViewModel.swift in Sources */,
74721B4B2E2A07D100F0ACB9 /* SemiShortModalView.swift in Sources */,
Expand Down Expand Up @@ -2314,6 +2348,7 @@
740EE82E2E059908007A5DCF /* AppTargetType.swift in Sources */,
15A167DB2E3CACB100062C49 /* SpotUploadPhotoCollectionViewCell.swift in Sources */,
15F15E852DBFD206002F81E2 /* LanguageType.swift in Sources */,
150BA57A2E56F3720058A06B /* TutorialContainerViewController.swift in Sources */,
151AB6902DD367BF00D01DE8 /* SpotDetailView.swift in Sources */,
15A48BFC2D574BB9003C2421 /* ProfileEditViewController.swift in Sources */,
741B58752D5ED21C0061CBF7 /* PhotoCollectionViewSizeType.swift in Sources */,
Expand Down Expand Up @@ -2363,6 +2398,7 @@
D6E816A52D623FE5001E4EBF /* WithdrawalTableView.swift in Sources */,
7462618B2D3FA4A800A4E84F /* SpotDetailService.swift in Sources */,
15E71E422DF5A44B0020689D /* OpeningTimeView.swift in Sources */,
150BA5832E56F87E0058A06B /* StartNowViewController.swift in Sources */,
74D297F22D63436F00DDEE31 /* GetPresignedURLResponse.swift in Sources */,
1547A88B2D3596B600E96616 /* SpotFilterType.swift in Sources */,
15304FBE2E33B7E400EFCDEF /* MenuRecommendationViewController.swift in Sources */,
Expand Down
41 changes: 39 additions & 2 deletions ACON-iOS/ACON-iOS/Global/Extensions/UIView+.swift
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,20 @@ extension UIView {

extension UIView {

/// 아래에서 위로 올라오며 페이드 인하는 애니메이션
/// 페이드 인 애니메이션입니다.
/// - Parameters:
/// - duration: 애니메이션 전체 시간
/// - delay: 지연 시간
func animateFadeIn(duration: TimeInterval = 0.8, delay: TimeInterval = 0) {
self.alpha = 0
self.isHidden = false

UIView.animate(withDuration: duration, delay: delay, options: .curveEaseInOut) {
self.alpha = 1
}
}

/// 아래에서 위로 올라오며 페이드 인하는 애니메이션입니다.
/// - Parameters:
/// - duration: 애니메이션 전체 시간
/// - delay: 지연 시간 (뷰마다 순차적으로 나타나게 하고 싶을 때 활용)
Expand Down Expand Up @@ -210,5 +223,29 @@ extension UIView {
)
}

}
/// 깜빡이는 애니메이션을 시작합니다.
/// - Parameters:
/// - duration: 깜빡임 주기 (사라졌다가 다시 나타나기까지의 전체 시간)
/// - minAlpha: 깜빡이는 동안의 최소 alpha값
/// - fadeIn: true일 경우 minAlpha에서 시작 (페이드 인), false일 경우 1.0에서 시작 (페이드 아웃)
/// - animationKey: 애니메이션을 식별하는 고유 키
func startBlinking(duration: TimeInterval = 0.8, minAlpha: CGFloat = 0.2, fadeIn: Bool = true, animationKey: String = "blinking") {
stopBlinking(animationKey: animationKey)

let animation = CABasicAnimation(keyPath: "opacity")
animation.fromValue = fadeIn ? minAlpha : 1.0
animation.toValue = fadeIn ? 1.0 : minAlpha
animation.duration = duration / 2 // NOTE: 한 방향(예: 사라지는 과정)에 대한 시간
animation.autoreverses = true
animation.repeatCount = .infinity

self.layer.add(animation, forKey: animationKey)
}

/// 깜빡이는 애니메이션을 제거합니다.
/// - Parameter animationKey: 제거할 애니메이션의 고유 키
func stopBlinking(animationKey: String = "blinking") {
self.layer.removeAnimation(forKey: animationKey)
}

}
44 changes: 44 additions & 0 deletions ACON-iOS/ACON-iOS/Global/Literals/StringLiterals.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ enum StringLiterals {

static let lastLocalVerificationAlertTime = "lastLocalVerificationAlertTime"

static let hasSeenTutorial = "hasSeenTutorial"

}

enum Error {
Expand All @@ -33,6 +35,22 @@ enum StringLiterals {

}

enum Lottie {

static let splashLottie = "splashLottie"

static let finishedUpload = "finishedUpload"

static let loadingWhite = "loadingWhite"

static let drop1Acorn = "drop1Acorn"
static let drop2Acorn = "drop2Acorn"
static let drop3Acorn = "drop3Acorn"
static let drop4Acorn = "drop4Acorn"
static let drop5Acorn = "drop5Acorn"

}

enum Login {

static let googleLogin = "Google로 계속하기"
Expand Down Expand Up @@ -395,6 +413,32 @@ enum StringLiterals {

}

enum Tutorial {

static let verifiedLocalReviewTitle = "인증된 로컬 맛집 리뷰"

static let dropAcornForReview = "도토리를 떨어트려 리뷰를 남길 수 있어요"

static let localVerifiedSpots = "현지인 인증 맛집에는"

static let tagsAttached = "태그가 붙어요"

static let limitedSpotsTitle = "지역별 단 50곳만"

static let aconAtOneArea = "아콘은 한 지역에 "

static let maxFifty = "최대 50개"

static let saveAndRankChanges = "의 맛집만 저장해요\n리뷰에 따라 맛집 랭킹이 변동돼요"

static let startNowTitle = "지금, 어디 갈지만 정해보세요"

static let startNowSubTitle = "식당에 갈지 카페에 갈지만 정해보세요\n더 이상 맛집 찾느라 시간을 쏟지 마세요"

static let start = "시작하기"

}

enum DislikeTypes {

static let dakbal = "닭발"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "img_tag_local.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "img_tag_local@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "img_tag_local@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "img_tutorial_home_preview.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "img_tutorial_home_preview@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "img_tutorial_home_preview@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "img_tutorial_spots1.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "img_tutorial_spots1@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "img_tutorial_spots1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading