mvcgen 0.1.14 → 0.1.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mvcgen/filemanager.rb +1 -1
- data/lib/mvcgen/generator.rb +36 -33
- data/lib/mvcgen/version.rb +1 -1
- data/lib/templates/default/mvcspec.yml +1 -1
- data/lib/templates/default/podfile/Podfile +73 -0
- data/lib/templates/default/swift/AppDelegate.swift +181 -0
- data/lib/templates/default/swift/Assets.xcassets/AppIcon.appiconset/Contents.json +133 -0
- data/lib/templates/default/swift/Assets.xcassets/Back.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Back.imageset/icons8-back-filled-100-2.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Contents.json +6 -0
- data/lib/templates/default/swift/Assets.xcassets/Down.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Down.imageset/icons8-expand-arrow-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Forward.imageset/icons8-forward-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Key.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Key.imageset/universal_Key.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Shopping-cart.imageset/universal_Shopping-cart.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Tick.imageset/icons8-Checkmark-96 (1).png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Up.imageset/icons8-collapse-arrow-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/Uruguay.imageset/icons8-uruguay-40.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/Contents.json +1 -0
- data/lib/templates/default/swift/Assets.xcassets/Wallet.imageset/universal_Wallet.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_001.imageset/Icons_NotATour_Welcome_001.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_002.imageset/Icons_NotATour_Welcome_002.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_003.imageset/Icons_NotATour_Welcome_003.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/Welcome_004.imageset/Icons_NotATour_Welcome_004.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_beach.imageset/icons8-beach-64.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_nobaggage.imageset/icons8-no-baggage-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_signpost.imageset/icons8-signpost-64.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/alert_sunbed.imageset/sunbed.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/arrow.imageset/arrow.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/baggage.imageset/baggage@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/burger.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/burger.imageset/burger.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar-white.imageset/icons8-calendar.pdf +70 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/calendar.imageset/calendar.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/dots.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/dots.imageset/dots.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/edit.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/edit.imageset/edit.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/emptylogin.imageset/empty state loging.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/envelope.imageset/icons8-envelope.pdf +70 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/expandSection.imageset/icons8-expand-arrow-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/facebook.imageset/icons8-facebook-f.pdf +68 -0
- data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/filter-white.imageset/icons8-adjust (3).pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/filter.imageset/Contents.json +15 -0
- data/lib/templates/default/swift/Assets.xcassets/filter.imageset/filter.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/food.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/food.imageset/food.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/forgot-password.imageset/page-1@3x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/heart-active.imageset/favortio activo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/heart.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/heart.imageset/favorito inactivo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/icons8-delete.imageset/icons8-delete (3).pdf +69 -0
- data/lib/templates/default/swift/Assets.xcassets/lock.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/lock.imageset/icons8-lock.pdf +69 -0
- data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/man-avatar.imageset/man-avatar.pdf +1149 -1
- data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/new-notification.imageset/icons8-filled-circle-filled-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/no-fav.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/notificaciones.imageset/notificaciones.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/notification.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/notification.imageset/icons8-notification-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/other.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/other.imageset/other.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/page-1.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/page-3.imageset/page-1@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/photo.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/photo.imageset/photo.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/plus-white.imageset/icons8-plus-math-26.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus.imageset/+.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/plus.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/register.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/register.imageset/registro.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/search.imageset/Contents.json +15 -0
- data/lib/templates/default/swift/Assets.xcassets/search.imageset/search.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/settings.imageset/icons8-settings-500.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/Contents.json +23 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@2x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/shape.imageset/shape@3x.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/signpost.imageset/icons8-signpost-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/stars.imageset/Contents.json +24 -0
- data/lib/templates/default/swift/Assets.xcassets/stars.imageset/stars.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/terms.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/terms.imageset/terminos y condiciones.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/Contents.json +12 -0
- data/lib/templates/default/swift/Assets.xcassets/tickets.imageset/tickets.pdf +0 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/Contents.json +22 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-100.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/user.imageset/icons8-account-50.png +0 -0
- data/lib/templates/default/swift/Assets.xcassets/visa.imageset/Contents.json +21 -0
- data/lib/templates/default/swift/Assets.xcassets/visa.imageset/visa.png +0 -0
- data/lib/templates/default/swift/Config/Config.swift +1 -1
- data/lib/templates/default/swift/Controllers/Login/ForgetPasswordVC.swift +125 -0
- data/lib/templates/default/swift/Controllers/Login/LoginVC.swift +244 -0
- data/lib/templates/default/swift/Controllers/Login/RegisterVC.swift +213 -0
- data/lib/templates/default/swift/Controllers/Notifications/Cells/NotificationCell.swift +51 -0
- data/lib/templates/default/swift/Controllers/Notifications/NotificationsVC.swift +164 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/ForgetPasswordTVC.swift +98 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/LoginTVC.swift +245 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/OtherRegisterVC.swift +299 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageCell.swift +17 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/SelectLanguageVC.swift +116 -0
- data/lib/templates/default/swift/Controllers/OtherLogin/TermsAndConditionsVC.swift +76 -0
- data/lib/templates/default/swift/Controllers/Profile/AboutUsVC.swift +93 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/AboutUsImageCell.swift +66 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DescriptionCell.swift +16 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCell.swift +35 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/DestinationCellView.xib +84 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/FavoriteCollectionCell.swift +24 -0
- data/lib/templates/default/swift/Controllers/Profile/Cells/ImagesCollectionViewCell.swift +15 -0
- data/lib/templates/default/swift/Controllers/Profile/ProfileContainerVC.swift +72 -0
- data/lib/templates/default/swift/Controllers/Profile/ProfileTVC.swift +581 -0
- data/lib/templates/default/swift/Controllers/Tutorial/TutorialVC.swift +121 -0
- data/lib/templates/default/swift/Extensions/ArrayDuplicates.swift +35 -0
- data/lib/templates/default/swift/Extensions/Buttons.swift +1 -1
- data/lib/templates/default/swift/Extensions/CustomCamera.swift +65 -0
- data/lib/templates/default/swift/Extensions/GradientView.swift +121 -0
- data/lib/templates/default/swift/Extensions/HideKeyboard.swift +22 -0
- data/lib/templates/default/swift/Extensions/Images.swift +82 -0
- data/lib/templates/default/swift/Extensions/InnerShadowExtension.swift +83 -0
- data/lib/templates/default/swift/Extensions/TableViewEmptyView.swift +30 -0
- data/lib/templates/default/swift/Extensions/TapEffectExtension.swift +48 -0
- data/lib/templates/default/swift/Extensions/{ColorHex.swift → UIColorExtensions.swift} +2 -2
- data/lib/templates/default/swift/Extensions/UnderlinedTextView.swift +61 -0
- data/lib/templates/default/swift/Extensions/UnderlinedWithIconTextField.swift +55 -0
- data/lib/templates/default/swift/Helper/APIHelper.swift +4 -4
- data/lib/templates/default/swift/Helper/APIManager.swift +81 -14
- data/lib/templates/default/swift/Helper/APIRequestBody.swift +1 -1
- data/lib/templates/default/swift/Helper/AWSManager.swift +1 -1
- data/lib/templates/default/swift/Helper/FilesManager.swift +1 -1
- data/lib/templates/default/swift/Helper/S3Manager.swift +1 -1
- data/lib/templates/default/swift/Helper/Utils.swift +3 -1
- data/lib/templates/default/swift/Info.plist +53 -0
- data/lib/templates/default/swift/Models/Country.swift +28 -0
- data/lib/templates/default/swift/Models/Managers/UserManager.swift +1 -1
- data/lib/templates/default/swift/Models/Notif.swift +71 -0
- data/lib/templates/default/swift/Models/Responses/BaseResponse.swift +1 -1
- data/lib/templates/default/swift/Models/Responses/NotificationResponse.swift +24 -0
- data/lib/templates/default/swift/Models/Responses/UserResponse.swift +1 -1
- data/lib/templates/default/swift/Models/Responses/UserSingupResponse.swift +1 -1
- data/lib/templates/default/swift/Models/User.swift +2 -2
- data/lib/templates/default/swift/UI/Storyboards/Home.storyboard +2113 -0
- data/lib/templates/default/swift/UI/Storyboards/Login.storyboard +814 -0
- data/lib/templates/default/swift/UI/Storyboards/OtherLogin.storyboard +1031 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/EmptyTableLabelView.swift +18 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/NoNotificationView.swift +16 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/EmptyTableLabelView.xib +72 -0
- data/lib/templates/default/swift/UI/Views/EmptyTableView/Xibs/NoNotificationsView.xib +61 -0
- metadata +176 -4
@@ -0,0 +1,121 @@
|
|
1
|
+
//
|
2
|
+
// TutorialVC.swift
|
3
|
+
// MVCGEN
|
4
|
+
//
|
5
|
+
// Created by Daniel Martinez on 23/7/18.
|
6
|
+
// Copyright © 2018 Houlak. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import UIKit
|
10
|
+
import paper_onboarding
|
11
|
+
|
12
|
+
class TutorialVC: UIViewController {
|
13
|
+
|
14
|
+
@IBOutlet weak var onboarding: PaperOnboarding!
|
15
|
+
@IBOutlet weak var skipButton: UIButton!
|
16
|
+
|
17
|
+
override func viewDidLoad() {
|
18
|
+
super.viewDidLoad()
|
19
|
+
skipButton.isHidden = true
|
20
|
+
|
21
|
+
// Uncomment next line to setup `PaperOnboarding` from code
|
22
|
+
setupPaperOnboardingView()
|
23
|
+
|
24
|
+
}
|
25
|
+
|
26
|
+
private func setupPaperOnboardingView() {
|
27
|
+
let onboarding = PaperOnboarding()
|
28
|
+
onboarding.dataSource = self
|
29
|
+
onboarding.delegate = self
|
30
|
+
onboarding.translatesAutoresizingMaskIntoConstraints = false
|
31
|
+
view.addSubview(onboarding)
|
32
|
+
|
33
|
+
// Add constraints
|
34
|
+
for attribute: NSLayoutAttribute in [.left, .right, .top, .bottom] {
|
35
|
+
let constraint = NSLayoutConstraint(item: onboarding,
|
36
|
+
attribute: attribute,
|
37
|
+
relatedBy: .equal,
|
38
|
+
toItem: view,
|
39
|
+
attribute: attribute,
|
40
|
+
multiplier: 1,
|
41
|
+
constant: 0)
|
42
|
+
view.addConstraint(constraint)
|
43
|
+
}
|
44
|
+
self.view.bringSubview(toFront: skipButton);
|
45
|
+
}
|
46
|
+
|
47
|
+
}
|
48
|
+
|
49
|
+
// MARK: Actions
|
50
|
+
|
51
|
+
extension TutorialVC {
|
52
|
+
|
53
|
+
@IBAction func skipButtonTapped(_ sender: UIButton) {
|
54
|
+
print(#function)
|
55
|
+
}
|
56
|
+
|
57
|
+
}
|
58
|
+
|
59
|
+
// MARK: PaperOnboardingDelegate
|
60
|
+
extension TutorialVC: PaperOnboardingDelegate {
|
61
|
+
|
62
|
+
func onboardingWillTransitonToIndex(_ index: Int) {
|
63
|
+
skipButton.isHidden = index == 3 ? false : true
|
64
|
+
}
|
65
|
+
|
66
|
+
func onboardingDidTransitonToIndex(_ index: Int) {
|
67
|
+
|
68
|
+
}
|
69
|
+
|
70
|
+
func onboardingConfigurationItem(_ item: OnboardingContentViewItem, index: Int) {
|
71
|
+
|
72
|
+
// item.titleLabel?.backgroundColor = .redColor()
|
73
|
+
// item.descriptionLabel?.backgroundColor = .redColor()
|
74
|
+
// item.imageView = ...
|
75
|
+
}
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
// MARK: PaperOnboardingDataSource
|
80
|
+
extension TutorialVC: PaperOnboardingDataSource {
|
81
|
+
|
82
|
+
func onboardingItem(at index: Int) -> OnboardingItemInfo {
|
83
|
+
let titleFont = UIFont(name: "Quicksand-Bold", size: 30.0) ?? UIFont.boldSystemFont(ofSize: 30.0)
|
84
|
+
let descriptionFont = UIFont(name: "Quicksand-Medium", size: 22.0) ?? UIFont.systemFont(ofSize: 22.0)
|
85
|
+
let welcomeLabel = NSLocalizedString("WELCOME", comment: "")
|
86
|
+
|
87
|
+
let list = [
|
88
|
+
OnboardingItemInfo(informationImage: UIImage(named: "Welcome_001")!,
|
89
|
+
title: welcomeLabel,
|
90
|
+
description: NSLocalizedString("If you like to travel comfortably ...", comment: ""),
|
91
|
+
pageIcon: UIImage(named: "Tick")!,
|
92
|
+
color: Colors.firstGradientColor,
|
93
|
+
titleColor: UIColor.white, descriptionColor: UIColor.white, titleFont: titleFont, descriptionFont: descriptionFont),
|
94
|
+
OnboardingItemInfo(informationImage: UIImage(named: "Welcome_002")!,
|
95
|
+
title: "",
|
96
|
+
description: NSLocalizedString("... with everything arranged ...", comment: ""),
|
97
|
+
pageIcon: UIImage(named: "Tick")!,
|
98
|
+
color: Colors.secondGradientColor,
|
99
|
+
titleColor: UIColor.white, descriptionColor: UIColor.white, titleFont: titleFont, descriptionFont: descriptionFont),
|
100
|
+
OnboardingItemInfo(informationImage: UIImage(named: "Welcome_003")!,
|
101
|
+
title: "",
|
102
|
+
description: NSLocalizedString("... with everything planned ...", comment: ""),
|
103
|
+
pageIcon: UIImage(named: "Tick")!,
|
104
|
+
color: Colors.thirdGradientColor,
|
105
|
+
titleColor: UIColor.white, descriptionColor: UIColor.white, titleFont: titleFont, descriptionFont: descriptionFont),
|
106
|
+
OnboardingItemInfo(informationImage: UIImage(named: "Welcome_004")!,
|
107
|
+
title: "",
|
108
|
+
description: NSLocalizedString("... then don't travel with us!", comment: ""),
|
109
|
+
pageIcon: UIImage(named: "Tick")!,
|
110
|
+
color: Colors.textColor,
|
111
|
+
titleColor: UIColor.white, descriptionColor: UIColor.white, titleFont: titleFont, descriptionFont: descriptionFont),
|
112
|
+
]
|
113
|
+
return list[index]
|
114
|
+
}
|
115
|
+
|
116
|
+
func onboardingItemsCount() -> Int {
|
117
|
+
return 4
|
118
|
+
}
|
119
|
+
|
120
|
+
}
|
121
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
//
|
2
|
+
// ArrayDuplicates.swift
|
3
|
+
// MVCGEN
|
4
|
+
//
|
5
|
+
// Created by Daniel Martinez on 23/7/18.
|
6
|
+
// Copyright © 2018 Houlak. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
/*
|
10
|
+
Extension for Array that will compare two elements and put an element into an array if it is NOT a duplicate.
|
11
|
+
The returned array will be the filtered list that contains only unique values.
|
12
|
+
Example:
|
13
|
+
// Use the .filterDuplicates function on an array of beacons to create a new array of only unique UUID's
|
14
|
+
let beaconRegions: [iBeaconItem] = iBeacons.filterDuplicates { $0.uuid == $1.uuid && $0.uuid == $1.uuid }
|
15
|
+
*/
|
16
|
+
|
17
|
+
extension Array {
|
18
|
+
|
19
|
+
func filterDuplicates(includeElement: @escaping (_ lhs: Element, _ rhs: Element) -> Bool) -> [Element] {
|
20
|
+
|
21
|
+
var results = [Element]()
|
22
|
+
|
23
|
+
forEach { (element) in
|
24
|
+
|
25
|
+
let existingElements = results.filter {
|
26
|
+
return includeElement(element, $0)
|
27
|
+
}
|
28
|
+
|
29
|
+
if existingElements.count == 0 {
|
30
|
+
results.append(element)
|
31
|
+
}
|
32
|
+
}
|
33
|
+
return results
|
34
|
+
}
|
35
|
+
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
//
|
2
|
+
// CustomCamera.swift
|
3
|
+
// MVCGEN
|
4
|
+
//
|
5
|
+
// Created by Daniel Martinez on 23/7/18.
|
6
|
+
// Copyright © 2018 Houlak. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import UIKit
|
10
|
+
import MobileCoreServices
|
11
|
+
import DKImagePickerController
|
12
|
+
|
13
|
+
open class CustomCamera: UIImagePickerController, DKImagePickerControllerCameraProtocol, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
|
14
|
+
|
15
|
+
var didCancel: (() -> Void)?
|
16
|
+
var didFinishCapturingImage: ((_ image: UIImage, _ metadata: [AnyHashable : Any]?) -> Void)?
|
17
|
+
var didFinishCapturingVideo: ((_ videoURL: URL) -> Void)?
|
18
|
+
|
19
|
+
open override func viewDidLoad() {
|
20
|
+
super.viewDidLoad()
|
21
|
+
|
22
|
+
self.delegate = self
|
23
|
+
self.sourceType = .camera
|
24
|
+
self.mediaTypes = [kUTTypeImage as String, kUTTypeMovie as String]
|
25
|
+
}
|
26
|
+
|
27
|
+
// MARK: - DKImagePickerControllerCameraProtocol
|
28
|
+
|
29
|
+
public func setDidCancel(block: @escaping () -> Void) {
|
30
|
+
self.didCancel = block
|
31
|
+
}
|
32
|
+
|
33
|
+
public func setDidFinishCapturingImage(block: @escaping (UIImage, [AnyHashable : Any]?) -> Void) {
|
34
|
+
self.didFinishCapturingImage = block
|
35
|
+
}
|
36
|
+
|
37
|
+
public func setDidFinishCapturingVideo(block: @escaping (URL) -> Void) {
|
38
|
+
self.didFinishCapturingVideo = block
|
39
|
+
}
|
40
|
+
|
41
|
+
// MARK: - UIImagePickerControllerDelegate methods
|
42
|
+
|
43
|
+
open func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
|
44
|
+
|
45
|
+
let mediaType = info[UIImagePickerControllerMediaType] as! String
|
46
|
+
let metadata = info[UIImagePickerControllerMediaMetadata] as! [AnyHashable : Any]
|
47
|
+
|
48
|
+
if mediaType == kUTTypeImage as String {
|
49
|
+
|
50
|
+
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
|
51
|
+
self.didFinishCapturingImage?(image, metadata)
|
52
|
+
|
53
|
+
} else if mediaType == kUTTypeMovie as String {
|
54
|
+
|
55
|
+
let videoURL = info[UIImagePickerControllerMediaURL] as! URL
|
56
|
+
self.didFinishCapturingVideo?(videoURL)
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
open func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
|
61
|
+
self.didCancel?()
|
62
|
+
}
|
63
|
+
|
64
|
+
}
|
65
|
+
|
@@ -0,0 +1,121 @@
|
|
1
|
+
//
|
2
|
+
// GradientView.swift
|
3
|
+
// MVCGEN
|
4
|
+
//
|
5
|
+
// Created by Daniel Martinez on 23/7/18.
|
6
|
+
// Copyright © 2018 Houlak. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import Foundation
|
10
|
+
import UIKit
|
11
|
+
|
12
|
+
typealias GradientPoints = (startPoint: CGPoint, endPoint: CGPoint)
|
13
|
+
|
14
|
+
enum GradientOrientation {
|
15
|
+
case topRightBottomLeft
|
16
|
+
case topLeftBottomRight
|
17
|
+
case horizontal
|
18
|
+
case vertical
|
19
|
+
|
20
|
+
var startPoint: CGPoint {
|
21
|
+
return points.startPoint
|
22
|
+
}
|
23
|
+
|
24
|
+
var endPoint: CGPoint {
|
25
|
+
return points.endPoint
|
26
|
+
}
|
27
|
+
|
28
|
+
var points: GradientPoints {
|
29
|
+
switch self {
|
30
|
+
case .topRightBottomLeft:
|
31
|
+
return (CGPoint.init(x: 0.0, y: 1.0), CGPoint.init(x: 1.0, y: 0.0))
|
32
|
+
case .topLeftBottomRight:
|
33
|
+
return (CGPoint.init(x: 0.0, y: 0.0), CGPoint.init(x: 1, y: 1))
|
34
|
+
case .horizontal:
|
35
|
+
return (CGPoint.init(x: 0.0, y: 0.5), CGPoint.init(x: 1.0, y: 0.5))
|
36
|
+
case .vertical:
|
37
|
+
return (CGPoint.init(x: 0.0, y: 0.0), CGPoint.init(x: 0.0, y: 1.0))
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
extension UIView {
|
43
|
+
|
44
|
+
func applyGradient(withColours colours: [UIColor], cornerRadius: CGFloat = 0, locations: [NSNumber]? = nil) {
|
45
|
+
let gradient: CAGradientLayer = CAGradientLayer()
|
46
|
+
gradient.cornerRadius = cornerRadius
|
47
|
+
gradient.frame = self.bounds
|
48
|
+
gradient.colors = colours.map { $0.cgColor }
|
49
|
+
gradient.locations = locations
|
50
|
+
|
51
|
+
self.layer.insertSublayer(gradient, at: 0)
|
52
|
+
}
|
53
|
+
|
54
|
+
func applyGradient(withColours colours: [UIColor], gradientOrientation orientation: GradientOrientation, cornerRadius: CGFloat = 0) {
|
55
|
+
let gradient: CAGradientLayer = CAGradientLayer()
|
56
|
+
gradient.cornerRadius = cornerRadius
|
57
|
+
gradient.frame = self.bounds
|
58
|
+
gradient.colors = colours.map { $0.cgColor }
|
59
|
+
gradient.backgroundColor = UIColor.black.cgColor
|
60
|
+
gradient.startPoint = orientation.startPoint
|
61
|
+
gradient.endPoint = orientation.endPoint
|
62
|
+
|
63
|
+
self.layer.insertSublayer(gradient, at: 0)
|
64
|
+
}
|
65
|
+
|
66
|
+
func applyGradient(withColours colours: [UIColor], alpha: CGFloat, angle: Double!) {
|
67
|
+
|
68
|
+
let gradient: CAGradientLayer = CAGradientLayer()
|
69
|
+
gradient.name = "gradientLayer"
|
70
|
+
let rect = CGRect(x: 0, y: 0, width: 375, height: 165)
|
71
|
+
gradient.frame = rect
|
72
|
+
gradient.colors = colours.map { $0.cgColor }
|
73
|
+
let x: Double! = angle / 360.0
|
74
|
+
let a = pow(sinf(Float(2.0 * Double.pi * ((x + 0.75) / 2.0))),2.0);
|
75
|
+
let b = pow(sinf(Float(2 * Double.pi * ((x+0.0)/2))),2);
|
76
|
+
let c = pow(sinf(Float(2 * Double.pi * ((x+0.25)/2))),2);
|
77
|
+
let d = pow(sinf(Float(2 * Double.pi * ((x+0.5)/2))),2);
|
78
|
+
gradient.endPoint = CGPoint(x: CGFloat(c),y: CGFloat(d))
|
79
|
+
gradient.startPoint = CGPoint(x: CGFloat(a),y:CGFloat(b))
|
80
|
+
self.alpha = alpha
|
81
|
+
self.layer.insertSublayer(gradient, at: 0)
|
82
|
+
}
|
83
|
+
|
84
|
+
func applyGradientItinerary(withColours colours: [UIColor], alpha: CGFloat, angle: Double!) {
|
85
|
+
|
86
|
+
let gradient: CAGradientLayer = CAGradientLayer()
|
87
|
+
gradient.name = "gradientLayer"
|
88
|
+
gradient.frame = self.bounds
|
89
|
+
gradient.colors = colours.map { $0.cgColor }
|
90
|
+
let x: Double! = angle / 360.0
|
91
|
+
let a = pow(sinf(Float(2.0 * Double.pi * ((x + 0.75) / 2.0))),2.0);
|
92
|
+
let b = pow(sinf(Float(2 * Double.pi * ((x+0.0)/2))),2);
|
93
|
+
let c = pow(sinf(Float(2 * Double.pi * ((x+0.25)/2))),2);
|
94
|
+
let d = pow(sinf(Float(2 * Double.pi * ((x+0.5)/2))),2);
|
95
|
+
gradient.endPoint = CGPoint(x: CGFloat(c),y: CGFloat(d))
|
96
|
+
gradient.startPoint = CGPoint(x: CGFloat(a),y:CGFloat(b))
|
97
|
+
self.alpha = alpha
|
98
|
+
self.layer.insertSublayer(gradient, at: 0)
|
99
|
+
}
|
100
|
+
|
101
|
+
func applyGradient(withColours colours: [UIColor], rect: CGRect) {
|
102
|
+
|
103
|
+
let gradient: CAGradientLayer = CAGradientLayer()
|
104
|
+
gradient.name = "gradientLayer"
|
105
|
+
//let rect = CGRect(x: 0, y: 0, width: 375, height: 165)
|
106
|
+
gradient.frame = rect
|
107
|
+
gradient.colors = colours.map { $0.cgColor }
|
108
|
+
|
109
|
+
/*let a = rect.minX
|
110
|
+
let b = rect.minY
|
111
|
+
let c = rect.maxX
|
112
|
+
let d = rect.maxY*/
|
113
|
+
//gradient.endPoint = CGPoint(x: 10,y: 5)
|
114
|
+
//gradient.endPoint = CGPoint(x: CGFloat(c),y: CGFloat(d))
|
115
|
+
//gradient.startPoint = CGPoint(x: CGFloat(a),y:CGFloat(b))
|
116
|
+
//gradient.startPoint = CGPoint(x: 0,y:0)
|
117
|
+
//gradient.backgroundColor = UIColor.black.cgColor
|
118
|
+
self.layer.insertSublayer(gradient, at: 0)
|
119
|
+
}
|
120
|
+
|
121
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
//
|
2
|
+
// HideKeyboard.swift
|
3
|
+
// MVCGEN
|
4
|
+
//
|
5
|
+
// Created by Daniel Martinez on 23/7/18.
|
6
|
+
// Copyright © 2018 Houlak. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
import UIKit
|
10
|
+
|
11
|
+
extension UIViewController {
|
12
|
+
|
13
|
+
func hideKeyboardWhenTappedAround() {
|
14
|
+
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
|
15
|
+
view.addGestureRecognizer(tap)
|
16
|
+
|
17
|
+
}
|
18
|
+
|
19
|
+
@objc func dismissKeyboard() {
|
20
|
+
view.endEditing(true)
|
21
|
+
}
|
22
|
+
}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
//
|
2
|
+
// Images.swift
|
3
|
+
// MVCGEN
|
4
|
+
//
|
5
|
+
// Created by Daniel Martinez on 23/7/18.
|
6
|
+
// Copyright © 2018 Houlak. All rights reserved.
|
7
|
+
//
|
8
|
+
|
9
|
+
#if os(iOS) || os(tvOS) || os(watchOS)
|
10
|
+
import UIKit.UIImage
|
11
|
+
typealias Image = UIImage
|
12
|
+
#elseif os(OSX)
|
13
|
+
import AppKit.NSImage
|
14
|
+
typealias Image = NSImage
|
15
|
+
#endif
|
16
|
+
|
17
|
+
enum Asset: String {
|
18
|
+
case logo = "logo"
|
19
|
+
case banks = "Banks"
|
20
|
+
case hotels = "Hotels"
|
21
|
+
case key = "Key"
|
22
|
+
case shoppingCart = "Shopping-cart"
|
23
|
+
case stores = "Stores"
|
24
|
+
case wallet = "Wallet"
|
25
|
+
case tick = "Tick"
|
26
|
+
case userTestPhoto = "photo"
|
27
|
+
|
28
|
+
var image: Image {
|
29
|
+
let bundle = Bundle(for: BundleToken.self)
|
30
|
+
#if os(iOS) || os(tvOS)
|
31
|
+
let image = Image(named: rawValue, in: bundle, compatibleWith: nil)
|
32
|
+
#elseif os(OSX)
|
33
|
+
let image = bundle.image(forResource: rawValue)
|
34
|
+
#elseif os(watchOS)
|
35
|
+
let image = Image(named: rawValue)
|
36
|
+
#endif
|
37
|
+
guard let result = image else { fatalError("Unable to load image \(rawValue).") }
|
38
|
+
return result
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
extension Image {
|
43
|
+
convenience init!(asset: Asset) {
|
44
|
+
#if os(iOS) || os(tvOS)
|
45
|
+
let bundle = Bundle(for: BundleToken.self)
|
46
|
+
self.init(named: asset.rawValue, in: bundle, compatibleWith: nil)
|
47
|
+
#elseif os(OSX) || os(watchOS)
|
48
|
+
self.init(named: asset.rawValue)
|
49
|
+
#endif
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
private final class BundleToken {}
|
54
|
+
|
55
|
+
extension UIImage{
|
56
|
+
func resize(targetSize: CGSize) -> UIImage {
|
57
|
+
|
58
|
+
let size = self.size
|
59
|
+
|
60
|
+
let widthRatio = targetSize.width / self.size.width
|
61
|
+
let heightRatio = targetSize.height / self.size.height
|
62
|
+
|
63
|
+
// Figure out what our orientation is, and use that to form the rectangle
|
64
|
+
var newSize: CGSize
|
65
|
+
if(widthRatio > heightRatio) {
|
66
|
+
newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
|
67
|
+
} else {
|
68
|
+
newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio)
|
69
|
+
}
|
70
|
+
|
71
|
+
// This is the rect that we've calculated out and this is what is actually used below
|
72
|
+
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
|
73
|
+
|
74
|
+
// Actually do the resizing to the rect using the ImageContext stuff
|
75
|
+
UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
|
76
|
+
self.draw(in: rect)
|
77
|
+
let newImage = UIGraphicsGetImageFromCurrentImageContext()
|
78
|
+
UIGraphicsEndImageContext()
|
79
|
+
|
80
|
+
return newImage!
|
81
|
+
}
|
82
|
+
}
|