mvcgen 0.1.14 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
}
|