Manos Chorianopoulos

CouponViewController part1

...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
7 objects = { 7 objects = {
8 8
9 /* Begin PBXBuildFile section */ 9 /* Begin PBXBuildFile section */
10 + 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */; };
10 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */; }; 11 1E64E1832DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */; };
11 1E64E1842DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */; }; 12 1E64E1842DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */; };
12 1E917CD62DDF64B2002221D8 /* MyRewardsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E917CD52DDF64B2002221D8 /* MyRewardsViewController.xib */; }; 13 1E917CD62DDF64B2002221D8 /* MyRewardsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1E917CD52DDF64B2002221D8 /* MyRewardsViewController.xib */; };
...@@ -150,6 +151,7 @@ ...@@ -150,6 +151,7 @@
150 151
151 /* Begin PBXFileReference section */ 152 /* Begin PBXFileReference section */
152 1E108A9728A3FA9B0008B8E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 153 1E108A9728A3FA9B0008B8E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
154 + 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyableLabel.swift; sourceTree = "<group>"; };
153 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsOfferCollectionViewCell.swift; sourceTree = "<group>"; }; 155 1E64E1812DE48E0600543217 /* MyRewardsOfferCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsOfferCollectionViewCell.swift; sourceTree = "<group>"; };
154 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOfferCollectionViewCell.xib; sourceTree = "<group>"; }; 156 1E64E1822DE48E0600543217 /* MyRewardsOfferCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyRewardsOfferCollectionViewCell.xib; sourceTree = "<group>"; };
155 1E917CD42DDF64B2002221D8 /* MyRewardsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsViewController.swift; sourceTree = "<group>"; }; 157 1E917CD42DDF64B2002221D8 /* MyRewardsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyRewardsViewController.swift; sourceTree = "<group>"; };
...@@ -462,6 +464,7 @@ ...@@ -462,6 +464,7 @@
462 E6A77850282933340045BBA8 /* SwiftWarplyFramework */ = { 464 E6A77850282933340045BBA8 /* SwiftWarplyFramework */ = {
463 isa = PBXGroup; 465 isa = PBXGroup;
464 children = ( 466 children = (
467 + 1E4C4CFA2DE6014500279AAD /* CopyableLabel.swift */,
465 1E108A9728A3FA9B0008B8E7 /* Info.plist */, 468 1E108A9728A3FA9B0008B8E7 /* Info.plist */,
466 1EA8E5B42DDF315600CD3418 /* screens */, 469 1EA8E5B42DDF315600CD3418 /* screens */,
467 1EA8E5BC2DDF34FB00CD3418 /* cells */, 470 1EA8E5BC2DDF34FB00CD3418 /* cells */,
...@@ -926,6 +929,7 @@ ...@@ -926,6 +929,7 @@
926 1E917CD72DDF64B2002221D8 /* MyRewardsViewController.swift in Sources */, 929 1E917CD72DDF64B2002221D8 /* MyRewardsViewController.swift in Sources */,
927 E6A77915282933E60045BBA8 /* WLUtils.m in Sources */, 930 E6A77915282933E60045BBA8 /* WLUtils.m in Sources */,
928 1E917CDC2DDF68C7002221D8 /* CouponViewController.swift in Sources */, 931 1E917CDC2DDF68C7002221D8 /* CouponViewController.swift in Sources */,
932 + 1E4C4CFB2DE6014500279AAD /* CopyableLabel.swift in Sources */,
929 E6A77947282933E70045BBA8 /* FMDatabaseQueue.m in Sources */, 933 E6A77947282933E70045BBA8 /* FMDatabaseQueue.m in Sources */,
930 E6A77922282933E60045BBA8 /* NSData+SSToolkitAdditions.m in Sources */, 934 E6A77922282933E60045BBA8 /* NSData+SSToolkitAdditions.m in Sources */,
931 E6A7794A282933E70045BBA8 /* FMDatabaseAdditions.m in Sources */, 935 E6A7794A282933E70045BBA8 /* FMDatabaseAdditions.m in Sources */,
......
1 +//
2 +// CopyableLabel.swift
3 +// SwiftWarplyFramework
4 +//
5 +// Created by Manos Chorianopoulos on 26/10/22.
6 +//
7 +
8 +import Foundation
9 +import UIKit
10 +
11 +class CopyableLabel: UILabel {
12 +
13 + override init(frame: CGRect) {
14 + super.init(frame: frame)
15 + sharedInit()
16 + }
17 +
18 + required init(coder aDecoder: NSCoder) {
19 + super.init(coder: aDecoder)!
20 + sharedInit()
21 + }
22 +
23 + func sharedInit() {
24 + isUserInteractionEnabled = true
25 + addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(showMenu(sender:))))
26 + }
27 +
28 + @objc
29 + func showMenu(sender: AnyObject?) {
30 + becomeFirstResponder()
31 + let menu = UIMenuController.shared
32 + if !menu.isMenuVisible {
33 + menu.setTargetRect(bounds, in: self)
34 + menu.setMenuVisible(true, animated: true)
35 + }
36 + }
37 +
38 + override var canBecomeFirstResponder: Bool {
39 + return true
40 + }
41 +
42 + override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
43 + if action == #selector(UIResponderStandardEditActions.copy(_:)) {
44 + return true
45 + }
46 + return false
47 + }
48 +
49 + override func copy(_ sender: Any?) {
50 + let board = UIPasteboard.general
51 + if var textToCopy = text {
52 + if (textToCopy.contains(", ")) {
53 + textToCopy = textToCopy.replacingOccurrences(of: ", ", with: "")
54 + }
55 + print(textToCopy)
56 + board.string = textToCopy
57 + }
58 +
59 +// board.string = text
60 + let menu = UIMenuController.shared
61 + menu.setMenuVisible(false, animated: true)
62 + }
63 +
64 +}
...@@ -8,13 +8,125 @@ ...@@ -8,13 +8,125 @@
8 import UIKit 8 import UIKit
9 9
10 @objc public class CouponViewController: UIViewController { 10 @objc public class CouponViewController: UIViewController {
11 + @IBOutlet weak var couponImage: UIImageView!
12 +
13 + @IBOutlet weak var infoView: UIView!
14 + @IBOutlet weak var infoImage: UIImageView!
15 + @IBOutlet weak var infoLabel: UILabel!
16 +
17 + @IBOutlet weak var favoriteImage: UIImageView!
18 + @IBOutlet weak var shareImage: UIImageView!
19 +
20 + @IBOutlet weak var titleLabel: UILabel!
21 + @IBOutlet weak var subtitleLabel: UILabel!
22 + @IBOutlet weak var expirationLabel: UILabel!
23 + @IBOutlet weak var detailsLabel: UILabel!
24 +
25 + // MARK: - IBOutlets for Coupon Code Section
26 + @IBOutlet weak var couponCodeContainerView: UIView!
27 + @IBOutlet weak var couponCodeHeaderView: UIView!
28 + @IBOutlet weak var couponCodeContentView: UIView!
29 +
30 + // Header elements
31 + @IBOutlet weak var couponCodeTitleLabel: UILabel!
32 + @IBOutlet weak var couponCodeArrowImage: UIImageView!
33 + @IBOutlet weak var couponCodeButton: UIButton!
34 +
35 + // Content elements (initially hidden)
36 + @IBOutlet weak var couponCodeValueLabel: CopyableLabel!
37 + @IBOutlet weak var copyButtonImage: UIImageView!
38 + @IBOutlet weak var copyButton: UIButton!
39 +
40 + // Constraints for animation
41 + @IBOutlet weak var couponCodeContentHeightConstraint: NSLayoutConstraint!
42 +
43 + // MARK: - IBOutlets for Coupon Code Section
44 + @IBOutlet weak var couponQRContainerView: UIView!
45 + @IBOutlet weak var couponQRHeaderView: UIView!
46 + @IBOutlet weak var couponQRContentView: UIView!
47 +
48 + // Header elements
49 + @IBOutlet weak var couponQRTitleLabel: UILabel!
50 + @IBOutlet weak var couponQRArrowImage: UIImageView!
51 + @IBOutlet weak var couponQRButton: UIButton!
52 +
53 + // Content elements (initially hidden)
54 + @IBOutlet weak var couponQRImage: UIImageView!
55 +
56 + // Constraints for animation
57 + @IBOutlet weak var couponQRContentHeightConstraint: NSLayoutConstraint!
58 +
59 + @IBOutlet weak var termsButton: UIButton!
60 + @IBOutlet weak var termsLabel: UILabel!
61 + @IBOutlet weak var termsLabelHeight: NSLayoutConstraint!
62 +
63 + @IBOutlet weak var mapButton: UIButton!
64 +
65 + @IBOutlet weak var websiteButton: UIButton!
66 +
11 var coupon: OfferModel? 67 var coupon: OfferModel?
68 + private var isDetailsExpanded = false
69 + private var isCouponCodeExpanded = false
70 + private var isCouponBarcodeExpanded = false
71 + private var isTermsExpanded = false
12 72
13 public override func viewDidLoad() { 73 public override func viewDidLoad() {
14 super.viewDidLoad() 74 super.viewDidLoad()
15 75
16 // Show navigation bar for this screen (with back button) 76 // Show navigation bar for this screen (with back button)
17 self.navigationController?.setNavigationBarHidden(false, animated: false) 77 self.navigationController?.setNavigationBarHidden(false, animated: false)
78 + setBackButton()
79 + setNavigationTitle("Προσφορά")
80 +
81 + infoView.backgroundColor = UIColor(rgb: 0xFFFFFF)
82 + infoView.layer.cornerRadius = 10.0
83 + infoView.layer.borderWidth = 1.0
84 + infoView.layer.borderColor = UIColor(red: 0.01, green: 0.05, blue: 0.11, alpha: 0.19).cgColor
85 +
86 + infoImage.image = UIImage(named: "info", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
87 + shareImage.image = UIImage(named: "share", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
88 + couponCodeArrowImage.image = UIImage(named: "arrow_down", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
89 + copyButtonImage.image = UIImage(named: "copy", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
90 + couponQRArrowImage.image = UIImage(named: "arrow_down", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
91 + couponQRImage.image = UIImage(named: "barcode", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
92 +
93 + infoLabel.font = UIFont(name: "PingLCG-Regular", size: 13)
94 + infoLabel.textColor = UIColor(rgb: 0x020E1C)
95 + infoLabel.text = "Περισσότερα"
96 +
97 + setupExpandableDetails()
98 +
99 + couponCodeContainerView.backgroundColor = UIColor(rgb: 0xFFFFFF)
100 + couponCodeContainerView.layer.cornerRadius = 8.0
101 +
102 + couponQRContainerView.backgroundColor = UIColor(rgb: 0xFFFFFF)
103 + couponQRContainerView.layer.cornerRadius = 8.0
104 +
105 + termsButton.titleLabel?.font = UIFont(name: "PingLCG-Bold", size: 16)
106 +// termsButton.imageView?.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5)
107 + termsButton.setTitle("Όροι Χρήσης", for: .normal)
108 + termsButton.setTitleColor(UIColor(rgb: 0x020E1C), for: .normal)
109 + termsButton.setImage(UIImage(named: "arrow_down.png", in: MyEmptyClass.resourceBundle(), compatibleWith: nil), for: .normal)
110 + termsButton.semanticContentAttribute = .forceRightToLeft
111 + termsButton.tintColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 1.00)
112 + termsButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 0);
113 + termsButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 5);
114 + termsButton.imageView?.layer.transform = CATransform3DMakeScale(0.8, 0.8, 0.8)
115 +
116 + termsLabelHeight.constant = 0
117 +
118 + mapButton.titleLabel?.font = UIFont(name: "PingLCG-Bold", size: 16)
119 + mapButton.setTitle("Όροι Χρήσης", for: .normal)
120 + mapButton.setTitleColor(UIColor(rgb: 0xFFFFFF), for: .normal)
121 + mapButton.layer.cornerRadius = 4.0
122 +
123 + websiteButton.titleLabel?.font = UIFont(name: "PingLCG-Bold", size: 16)
124 + websiteButton.setTitle("Όροι Χρήσης", for: .normal)
125 + websiteButton.setTitleColor(UIColor(rgb: 0x000F1E), for: .normal)
126 + websiteButton.backgroundColor = .clear
127 + websiteButton.layer.borderWidth = 1
128 + websiteButton.layer.borderColor = UIColor(rgb: 0x000F1E).cgColor
129 + websiteButton.layer.cornerRadius = 4.0
18 130
19 // Configure the view with offer data 131 // Configure the view with offer data
20 if let offer = coupon { 132 if let offer = coupon {
...@@ -23,7 +135,59 @@ import UIKit ...@@ -23,7 +135,59 @@ import UIKit
23 } 135 }
24 136
25 private func setupUI(with coupon: OfferModel) { 137 private func setupUI(with coupon: OfferModel) {
26 - // Set up the UI based on the offer data 138 + couponImage.image = UIImage(named: coupon.bannerImage, in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
139 + favoriteImage.image = UIImage(named: coupon.isFavorite ? "favorite2_filled" : "favorite2_empty", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
140 +
141 + titleLabel.font = UIFont(name: "PingLCG-Bold", size: 24)
142 + titleLabel.textColor = UIColor(rgb: 0xF2709D)
143 + titleLabel.text = coupon.title
144 +
145 + subtitleLabel.font = UIFont(name: "PingLCG-Regular", size: 18)
146 + subtitleLabel.textColor = UIColor(rgb: 0x020E1C)
147 + subtitleLabel.text = coupon.description
148 +
149 + expirationLabel.font = UIFont(name: "PingLCG-Regular", size: 18)
150 + expirationLabel.textColor = UIColor(rgb: 0x020E1C)
151 +// expirationLabel.text = ("Η προσφορά ισχύει " + coupon.expirationDate)
152 + expirationLabel.text = "Η προσφορά ισχύει έως 30-09-2025"
153 +
154 + couponCodeTitleLabel.font = UIFont(name: "PingLCG-Regular", size: 16)
155 + couponCodeTitleLabel.textColor = UIColor(rgb: 0x000F1E)
156 + couponCodeTitleLabel.text = "Κωδικός Κουπονιού"
157 +
158 + couponCodeTitleLabel.font = UIFont(name: "PingLCG-Bold", size: 24)
159 + couponCodeTitleLabel.textColor = UIColor(rgb: 0x000F1E)
160 + couponCodeTitleLabel.text = "coupons_ab"
161 +
162 + couponCodeTitleLabel.font = UIFont(name: "PingLCG-Regular", size: 16)
163 + couponCodeTitleLabel.textColor = UIColor(rgb: 0x000F1E)
164 + couponCodeTitleLabel.text = "QR Κουπονιού"
165 +
166 + termsLabel.font = UIFont(name: "PingLCG-Regular", size: 16)
167 + termsLabel.textColor = UIColor(rgb: 0x020E1C)
168 + termsLabel.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed ex euismod, feugiat justo eu, faucibus urna. Nulla sodales euismod arcu volutpat finibus. Etiam id urna at justo facilisis tempor. Morbi dignissim erat vitae magna sodales dignissim ac in mauris. Mauris tempor convallis tortor, interdum hendrerit turpis eleifend at. Praesent."
27 } 169 }
28 170
171 + private func setupExpandableDetails() {
172 + let fullText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed ex euismod, feugiat justo eu, faucibus urna. Nulla sodales euismod arcu volutpat finibus. Etiam id urna at justo facilisis tempor. Morbi dignissim erat vitae magna sodales dignissim ac in mauris. Mauris tempor convallis tortor, interdum hendrerit turpis eleifend at. Praesent."
173 +
174 + detailsLabel.text = fullText
175 + detailsLabel.numberOfLines = 3
176 + detailsLabel.font = UIFont(name: "PingLCG-Regular", size: 18)
177 + detailsLabel.textColor = UIColor(rgb: 0x020E1C)
178 +
179 + // Add tap gesture
180 + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(toggleDetailsExpansion))
181 + detailsLabel.isUserInteractionEnabled = true
182 + detailsLabel.addGestureRecognizer(tapGesture)
183 + }
184 +
185 + @objc private func toggleDetailsExpansion() {
186 + isDetailsExpanded.toggle()
187 +
188 + UIView.animate(withDuration: 0.3) {
189 + self.detailsLabel.numberOfLines = self.isDetailsExpanded ? 0 : 3
190 + self.view.layoutIfNeeded()
191 + }
192 + }
29 } 193 }
......
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?> 1 +<?xml version="1.0" encoding="UTF-8"?>
2 -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> 2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23094" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
3 + <device id="retina6_12" orientation="portrait" appearance="light"/>
3 <dependencies> 4 <dependencies>
4 - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/> 5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23084"/>
5 <capability name="Safe area layout guides" minToolsVersion="9.0"/> 6 <capability name="Safe area layout guides" minToolsVersion="9.0"/>
7 + <capability name="System colors in document resources" minToolsVersion="11.0"/>
6 <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> 8 <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
7 </dependencies> 9 </dependencies>
8 <objects> 10 <objects>
9 - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CouponViewController" customModuleProvider="target"> 11 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CouponViewController" customModule="SwiftWarplyFramework" customModuleProvider="target">
10 <connections> 12 <connections>
13 + <outlet property="copyButton" destination="uPp-hJ-U97" id="99c-QK-4uC"/>
14 + <outlet property="copyButtonImage" destination="AXc-Yh-5Ek" id="4VG-c1-zbJ"/>
15 + <outlet property="couponCodeArrowImage" destination="YoJ-w2-mm9" id="oQm-Mm-FL8"/>
16 + <outlet property="couponCodeButton" destination="5sx-2G-cCM" id="vuv-NX-y5I"/>
17 + <outlet property="couponCodeContainerView" destination="ElJ-Te-N4M" id="84s-Ab-iAG"/>
18 + <outlet property="couponCodeContentHeightConstraint" destination="ky8-Xs-cjh" id="P1b-xY-vde"/>
19 + <outlet property="couponCodeContentView" destination="wT1-HY-mg9" id="PEK-wT-l4v"/>
20 + <outlet property="couponCodeHeaderView" destination="cTO-BG-Gzi" id="6Xm-p8-F13"/>
21 + <outlet property="couponCodeTitleLabel" destination="lEF-bh-hOi" id="dVH-Zs-Rbg"/>
22 + <outlet property="couponCodeValueLabel" destination="2Fn-5d-j8v" id="Dlf-7P-qlY"/>
23 + <outlet property="couponImage" destination="Xiw-td-OMd" id="OxY-cx-CHa"/>
24 + <outlet property="couponQRArrowImage" destination="OXW-Jx-8wp" id="ijU-6O-hcN"/>
25 + <outlet property="couponQRButton" destination="xd4-3b-eOl" id="ElE-cn-nPX"/>
26 + <outlet property="couponQRContainerView" destination="Cwz-uh-Zn5" id="igH-cb-FMa"/>
27 + <outlet property="couponQRContentHeightConstraint" destination="odW-jh-UiA" id="LfK-Hl-1Ks"/>
28 + <outlet property="couponQRContentView" destination="xqU-7k-Vxg" id="t1n-V2-Tv3"/>
29 + <outlet property="couponQRHeaderView" destination="eEy-8l-te2" id="0U3-5V-9BB"/>
30 + <outlet property="couponQRImage" destination="Z9w-Ue-Lij" id="cIj-vB-EMz"/>
31 + <outlet property="couponQRTitleLabel" destination="NZj-6a-KB7" id="Yr1-32-jxM"/>
32 + <outlet property="detailsLabel" destination="X7C-0H-IhU" id="fvt-P2-urI"/>
33 + <outlet property="expirationLabel" destination="HLR-Nk-7Gm" id="sRz-Ot-p9b"/>
34 + <outlet property="favoriteImage" destination="1Kx-s2-p1l" id="kMd-LA-04k"/>
35 + <outlet property="infoImage" destination="tFA-1H-T5S" id="Pat-1s-nbE"/>
36 + <outlet property="infoLabel" destination="K34-LM-bC1" id="wIV-dh-aQs"/>
37 + <outlet property="infoView" destination="89U-JU-Imv" id="w8A-vj-7Lb"/>
38 + <outlet property="mapButton" destination="j1U-rV-0FP" id="K5C-V5-ejo"/>
39 + <outlet property="shareImage" destination="WjF-6P-8Wn" id="f7E-u8-Efc"/>
40 + <outlet property="subtitleLabel" destination="VJr-Mc-WMf" id="D5i-m9-5pG"/>
41 + <outlet property="termsButton" destination="Id4-Xw-01i" id="K7V-uP-07v"/>
42 + <outlet property="termsLabel" destination="Ak8-Tc-k8X" id="lGl-Bm-k5q"/>
43 + <outlet property="termsLabelHeight" destination="ZA1-TX-m9Y" id="zDj-wU-mre"/>
44 + <outlet property="titleLabel" destination="u54-xs-f5a" id="jG6-28-Q0R"/>
11 <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> 45 <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
46 + <outlet property="websiteButton" destination="t8z-s1-rIA" id="qZa-ex-J6Y"/>
12 </connections> 47 </connections>
13 </placeholder> 48 </placeholder>
14 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> 49 <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
15 <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> 50 <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
16 - <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> 51 + <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
17 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> 52 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
18 - <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> 53 + <subviews>
54 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XaT-fU-eNh" userLabel="Main View">
55 + <rect key="frame" x="0.0" y="59" width="393" height="793"/>
56 + <subviews>
57 + <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YpC-uS-mhw">
58 + <rect key="frame" x="0.0" y="0.0" width="393" height="793"/>
59 + <subviews>
60 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qrm-40-JLT" userLabel="Scroll Content View">
61 + <rect key="frame" x="0.0" y="0.0" width="393" height="1225.6666666666667"/>
62 + <subviews>
63 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Xiw-td-OMd" userLabel="Coupon Image View">
64 + <rect key="frame" x="0.0" y="0.0" width="393" height="211"/>
65 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
66 + <constraints>
67 + <constraint firstAttribute="height" constant="211" id="fMe-eO-hFu"/>
68 + </constraints>
69 + </imageView>
70 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="89U-JU-Imv" userLabel="Info View">
71 + <rect key="frame" x="248" y="17" width="129" height="20.666666666666671"/>
72 + <subviews>
73 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="tFA-1H-T5S" userLabel="Info Image View">
74 + <rect key="frame" x="1" y="3.6666666666666723" width="13.666666666666666" height="13.333333333333336"/>
75 + <constraints>
76 + <constraint firstAttribute="height" constant="13.5" id="uQt-vY-kbk"/>
77 + <constraint firstAttribute="width" constant="13.5" id="yzR-99-6Vp"/>
78 + </constraints>
79 + </imageView>
80 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Περισσότερα" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="K34-LM-bC1" userLabel="Info Label">
81 + <rect key="frame" x="19" y="-0.3333333333333286" width="100" height="21"/>
82 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
83 + <nil key="textColor"/>
84 + <nil key="highlightedColor"/>
85 + </label>
86 + </subviews>
87 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
88 + <constraints>
89 + <constraint firstAttribute="bottom" secondItem="tFA-1H-T5S" secondAttribute="bottom" constant="3.5" id="2LU-6d-9tG"/>
90 + <constraint firstAttribute="trailing" secondItem="K34-LM-bC1" secondAttribute="trailing" constant="10" id="7h2-jE-9iR"/>
91 + <constraint firstItem="K34-LM-bC1" firstAttribute="leading" secondItem="tFA-1H-T5S" secondAttribute="trailing" constant="4.5" id="9BF-QB-VRC"/>
92 + <constraint firstItem="K34-LM-bC1" firstAttribute="centerY" secondItem="89U-JU-Imv" secondAttribute="centerY" id="AJ7-80-sbu"/>
93 + <constraint firstItem="tFA-1H-T5S" firstAttribute="top" secondItem="89U-JU-Imv" secondAttribute="top" constant="3.5" id="Nyk-Ax-H7g"/>
94 + <constraint firstItem="tFA-1H-T5S" firstAttribute="leading" secondItem="89U-JU-Imv" secondAttribute="leading" constant="1" id="xHt-ua-5rb"/>
95 + </constraints>
96 + </view>
97 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u54-xs-f5a" userLabel="Title Label">
98 + <rect key="frame" x="24" y="234" width="249" height="20.333333333333343"/>
99 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
100 + <nil key="textColor"/>
101 + <nil key="highlightedColor"/>
102 + </label>
103 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="1Kx-s2-p1l" userLabel="Favorite Image View">
104 + <rect key="frame" x="284" y="228" width="40" height="40"/>
105 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
106 + <constraints>
107 + <constraint firstAttribute="width" constant="40" id="cMn-6O-CHy"/>
108 + <constraint firstAttribute="height" constant="40" id="wxC-Bz-5Ya"/>
109 + </constraints>
110 + </imageView>
111 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="WjF-6P-8Wn" userLabel="Share Image View">
112 + <rect key="frame" x="335" y="228" width="40" height="40"/>
113 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
114 + <constraints>
115 + <constraint firstAttribute="height" constant="40" id="Hb1-K6-gef"/>
116 + <constraint firstAttribute="width" constant="40" id="fIZ-xu-SFW"/>
117 + </constraints>
118 + </imageView>
119 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VJr-Mc-WMf" userLabel="Subtitle Label">
120 + <rect key="frame" x="24" y="254.33333333333334" width="345" height="20.333333333333343"/>
121 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
122 + <nil key="textColor"/>
123 + <nil key="highlightedColor"/>
124 + </label>
125 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HLR-Nk-7Gm" userLabel="Expiration Label">
126 + <rect key="frame" x="24" y="288.66666666666669" width="345" height="20.333333333333314"/>
127 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
128 + <nil key="textColor"/>
129 + <nil key="highlightedColor"/>
130 + </label>
131 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="X7C-0H-IhU" userLabel="Details Label">
132 + <rect key="frame" x="24" y="329" width="345" height="20.333333333333314"/>
133 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
134 + <nil key="textColor"/>
135 + <nil key="highlightedColor"/>
136 + </label>
137 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ElJ-Te-N4M" userLabel="CouponCodeContainerView">
138 + <rect key="frame" x="24" y="383.33333333333331" width="345" height="182.99999999999994"/>
139 + <subviews>
140 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cTO-BG-Gzi" userLabel="CouponCodeHeaderView">
141 + <rect key="frame" x="0.0" y="0.0" width="345" height="55"/>
142 + <subviews>
143 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lEF-bh-hOi" userLabel="CouponCodeTitleLabel">
144 + <rect key="frame" x="17" y="17" width="277" height="21"/>
145 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
146 + <nil key="textColor"/>
147 + <nil key="highlightedColor"/>
148 + </label>
149 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="YoJ-w2-mm9" userLabel="CouponCodeArrowImage">
150 + <rect key="frame" x="311" y="21" width="13" height="13"/>
151 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
152 + <constraints>
153 + <constraint firstAttribute="width" constant="13" id="627-N9-Nwq"/>
154 + <constraint firstAttribute="height" constant="13" id="MqD-PS-KVR"/>
155 + </constraints>
156 + </imageView>
157 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5sx-2G-cCM" userLabel="CouponCodeButton">
158 + <rect key="frame" x="0.0" y="0.0" width="345" height="55"/>
159 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
160 + <state key="normal" title="Button"/>
161 + <buttonConfiguration key="configuration" style="plain" title="Button">
162 + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
163 + </buttonConfiguration>
164 + </button>
165 + </subviews>
166 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
167 + <constraints>
168 + <constraint firstAttribute="bottom" secondItem="5sx-2G-cCM" secondAttribute="bottom" id="5b7-2R-dAJ"/>
169 + <constraint firstAttribute="trailing" secondItem="5sx-2G-cCM" secondAttribute="trailing" id="CI1-1e-hkQ"/>
170 + <constraint firstItem="lEF-bh-hOi" firstAttribute="leading" secondItem="cTO-BG-Gzi" secondAttribute="leading" constant="17" id="Gld-ir-1gP"/>
171 + <constraint firstItem="5sx-2G-cCM" firstAttribute="top" secondItem="cTO-BG-Gzi" secondAttribute="top" id="MVC-wv-Mpz"/>
172 + <constraint firstItem="YoJ-w2-mm9" firstAttribute="centerY" secondItem="cTO-BG-Gzi" secondAttribute="centerY" id="UcW-oq-76N"/>
173 + <constraint firstAttribute="bottom" secondItem="lEF-bh-hOi" secondAttribute="bottom" constant="17" id="WvU-KU-XPP"/>
174 + <constraint firstItem="lEF-bh-hOi" firstAttribute="top" secondItem="cTO-BG-Gzi" secondAttribute="top" constant="17" id="a9J-3H-Fxg"/>
175 + <constraint firstItem="5sx-2G-cCM" firstAttribute="leading" secondItem="cTO-BG-Gzi" secondAttribute="leading" id="eSr-hy-hgk"/>
176 + <constraint firstAttribute="trailing" secondItem="YoJ-w2-mm9" secondAttribute="trailing" constant="21" id="fle-ul-e4O"/>
177 + <constraint firstItem="YoJ-w2-mm9" firstAttribute="leading" secondItem="lEF-bh-hOi" secondAttribute="trailing" constant="17" id="wG0-2i-Ums"/>
178 + </constraints>
179 + </view>
180 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wT1-HY-mg9" userLabel="CouponCodeContentView">
181 + <rect key="frame" x="0.0" y="55" width="345" height="128"/>
182 + <subviews>
183 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Fn-5d-j8v" userLabel="CouponCodeValueLabel" customClass="CopyableLabel">
184 + <rect key="frame" x="16.999999999999996" y="26.000000000000057" width="56.666666666666657" height="76"/>
185 + <fontDescription key="fontDescription" type="system" pointSize="24"/>
186 + <nil key="textColor"/>
187 + <nil key="highlightedColor"/>
188 + </label>
189 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="AXc-Yh-5Ek" userLabel="CopyButtonImage">
190 + <rect key="frame" x="84.666666666666671" y="47.666666666666686" width="33" height="33"/>
191 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
192 + <constraints>
193 + <constraint firstAttribute="height" constant="33" id="7ds-Ao-fBn"/>
194 + <constraint firstAttribute="width" constant="33" id="CQY-h3-dmj"/>
195 + </constraints>
196 + </imageView>
197 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uPp-hJ-U97" userLabel="CouponCopyButton">
198 + <rect key="frame" x="84.666666666666671" y="47.666666666666686" width="33" height="33"/>
199 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
200 + <state key="normal" title="Button"/>
201 + <buttonConfiguration key="configuration" style="plain" title="Button">
202 + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
203 + </buttonConfiguration>
204 + </button>
205 + </subviews>
206 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
207 + <constraints>
208 + <constraint firstItem="uPp-hJ-U97" firstAttribute="leading" secondItem="AXc-Yh-5Ek" secondAttribute="leading" id="4AX-eb-8Eo"/>
209 + <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="AXc-Yh-5Ek" secondAttribute="trailing" constant="17" id="7Pr-rr-Awn"/>
210 + <constraint firstItem="uPp-hJ-U97" firstAttribute="trailing" secondItem="AXc-Yh-5Ek" secondAttribute="trailing" id="BlL-II-2cP"/>
211 + <constraint firstItem="AXc-Yh-5Ek" firstAttribute="centerY" secondItem="wT1-HY-mg9" secondAttribute="centerY" id="FdP-94-Drs"/>
212 + <constraint firstItem="2Fn-5d-j8v" firstAttribute="leading" secondItem="wT1-HY-mg9" secondAttribute="leading" constant="17" id="HYO-ML-C8b"/>
213 + <constraint firstItem="2Fn-5d-j8v" firstAttribute="top" secondItem="wT1-HY-mg9" secondAttribute="top" constant="26" id="XpY-aU-BzN"/>
214 + <constraint firstAttribute="bottom" secondItem="2Fn-5d-j8v" secondAttribute="bottom" constant="26" id="Y10-PC-eP5"/>
215 + <constraint firstItem="uPp-hJ-U97" firstAttribute="top" secondItem="AXc-Yh-5Ek" secondAttribute="top" id="hSS-7f-MiM"/>
216 + <constraint firstAttribute="height" constant="128" id="ky8-Xs-cjh"/>
217 + <constraint firstItem="uPp-hJ-U97" firstAttribute="bottom" secondItem="AXc-Yh-5Ek" secondAttribute="bottom" id="v1F-S6-muO"/>
218 + <constraint firstItem="AXc-Yh-5Ek" firstAttribute="leading" secondItem="2Fn-5d-j8v" secondAttribute="trailing" constant="11" id="vuS-Bk-Q0J"/>
219 + </constraints>
220 + </view>
221 + </subviews>
222 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
223 + <constraints>
224 + <constraint firstItem="wT1-HY-mg9" firstAttribute="leading" secondItem="ElJ-Te-N4M" secondAttribute="leading" id="1fU-8Q-kc5"/>
225 + <constraint firstItem="cTO-BG-Gzi" firstAttribute="leading" secondItem="ElJ-Te-N4M" secondAttribute="leading" id="827-rg-YnF"/>
226 + <constraint firstItem="cTO-BG-Gzi" firstAttribute="top" secondItem="ElJ-Te-N4M" secondAttribute="top" id="DCX-hf-OZ5"/>
227 + <constraint firstAttribute="bottom" secondItem="wT1-HY-mg9" secondAttribute="bottom" id="NTj-Gv-gK2"/>
228 + <constraint firstAttribute="trailing" secondItem="wT1-HY-mg9" secondAttribute="trailing" id="ssf-Xv-Bxx"/>
229 + <constraint firstAttribute="trailing" secondItem="cTO-BG-Gzi" secondAttribute="trailing" id="umy-qN-JFu"/>
230 + <constraint firstItem="wT1-HY-mg9" firstAttribute="top" secondItem="cTO-BG-Gzi" secondAttribute="bottom" id="wkk-WM-rVY"/>
231 + </constraints>
232 + </view>
233 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Cwz-uh-Zn5" userLabel="CouponQRContainerView">
234 + <rect key="frame" x="24" y="589.33333333333337" width="345" height="305"/>
235 + <subviews>
236 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eEy-8l-te2" userLabel="CouponQRHeaderView">
237 + <rect key="frame" x="0.0" y="0.0" width="345" height="55"/>
238 + <subviews>
239 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NZj-6a-KB7" userLabel="CouponQRTitleLabel">
240 + <rect key="frame" x="17" y="17" width="277" height="21"/>
241 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
242 + <nil key="textColor"/>
243 + <nil key="highlightedColor"/>
244 + </label>
245 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="OXW-Jx-8wp" userLabel="CouponQRArrowImage">
246 + <rect key="frame" x="311" y="21" width="13" height="13"/>
247 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
248 + <constraints>
249 + <constraint firstAttribute="width" constant="13" id="G7f-Pn-WhD"/>
250 + <constraint firstAttribute="height" constant="13" id="zVL-H5-ijW"/>
251 + </constraints>
252 + </imageView>
253 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xd4-3b-eOl" userLabel="CouponQRButton">
254 + <rect key="frame" x="0.0" y="0.0" width="345" height="55"/>
255 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
256 + <state key="normal" title="Button"/>
257 + <buttonConfiguration key="configuration" style="plain" title="Button">
258 + <color key="baseForegroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
259 + </buttonConfiguration>
260 + </button>
261 + </subviews>
262 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
263 + <constraints>
264 + <constraint firstAttribute="bottom" secondItem="xd4-3b-eOl" secondAttribute="bottom" id="1yG-EQ-krt"/>
265 + <constraint firstAttribute="trailing" secondItem="xd4-3b-eOl" secondAttribute="trailing" id="4cA-IG-MEv"/>
266 + <constraint firstAttribute="trailing" secondItem="OXW-Jx-8wp" secondAttribute="trailing" constant="21" id="61o-1d-G8i"/>
267 + <constraint firstAttribute="bottom" secondItem="NZj-6a-KB7" secondAttribute="bottom" constant="17" id="7Nq-qK-srn"/>
268 + <constraint firstItem="xd4-3b-eOl" firstAttribute="leading" secondItem="eEy-8l-te2" secondAttribute="leading" id="BBO-lA-FMd"/>
269 + <constraint firstItem="NZj-6a-KB7" firstAttribute="leading" secondItem="eEy-8l-te2" secondAttribute="leading" constant="17" id="C9L-Ez-BxU"/>
270 + <constraint firstItem="xd4-3b-eOl" firstAttribute="top" secondItem="eEy-8l-te2" secondAttribute="top" id="Omk-77-XDb"/>
271 + <constraint firstItem="OXW-Jx-8wp" firstAttribute="leading" secondItem="NZj-6a-KB7" secondAttribute="trailing" constant="17" id="gAd-xN-NrH"/>
272 + <constraint firstItem="OXW-Jx-8wp" firstAttribute="centerY" secondItem="eEy-8l-te2" secondAttribute="centerY" id="gFQ-3l-Vyc"/>
273 + <constraint firstItem="NZj-6a-KB7" firstAttribute="top" secondItem="eEy-8l-te2" secondAttribute="top" constant="17" id="x3M-GO-42H"/>
274 + </constraints>
275 + </view>
276 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xqU-7k-Vxg" userLabel="CouponQRContentView">
277 + <rect key="frame" x="0.0" y="55" width="345" height="250"/>
278 + <subviews>
279 + <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Z9w-Ue-Lij" userLabel="CouponQRImage">
280 + <rect key="frame" x="72.666666666666686" y="25" width="200" height="200"/>
281 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
282 + <constraints>
283 + <constraint firstAttribute="width" constant="200" id="UHz-Fg-n1x"/>
284 + <constraint firstAttribute="height" constant="200" id="itM-bK-4dv"/>
285 + </constraints>
286 + </imageView>
287 + </subviews>
288 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
289 + <constraints>
290 + <constraint firstItem="Z9w-Ue-Lij" firstAttribute="centerX" secondItem="xqU-7k-Vxg" secondAttribute="centerX" id="3jb-mY-gez"/>
291 + <constraint firstAttribute="bottom" secondItem="Z9w-Ue-Lij" secondAttribute="bottom" constant="25" id="4Wr-Ld-HWz"/>
292 + <constraint firstItem="Z9w-Ue-Lij" firstAttribute="top" secondItem="xqU-7k-Vxg" secondAttribute="top" constant="25" id="DoG-pU-Ipv"/>
293 + <constraint firstAttribute="height" constant="250" id="odW-jh-UiA"/>
294 + </constraints>
295 + </view>
296 + </subviews>
297 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
298 + <constraints>
299 + <constraint firstAttribute="trailing" secondItem="xqU-7k-Vxg" secondAttribute="trailing" id="JEa-Zg-JIu"/>
300 + <constraint firstItem="xqU-7k-Vxg" firstAttribute="top" secondItem="eEy-8l-te2" secondAttribute="bottom" id="Jf6-P1-9qS"/>
301 + <constraint firstItem="eEy-8l-te2" firstAttribute="leading" secondItem="Cwz-uh-Zn5" secondAttribute="leading" id="iZp-kc-tZ2"/>
302 + <constraint firstItem="xqU-7k-Vxg" firstAttribute="leading" secondItem="Cwz-uh-Zn5" secondAttribute="leading" id="nxQ-kb-BhT"/>
303 + <constraint firstItem="eEy-8l-te2" firstAttribute="top" secondItem="Cwz-uh-Zn5" secondAttribute="top" id="qho-3x-oyY"/>
304 + <constraint firstAttribute="trailing" secondItem="eEy-8l-te2" secondAttribute="trailing" id="sg9-Jq-q2G"/>
305 + <constraint firstAttribute="bottom" secondItem="xqU-7k-Vxg" secondAttribute="bottom" id="wUN-aQ-c9t"/>
306 + </constraints>
307 + </view>
308 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Id4-Xw-01i" userLabel="TermsButton">
309 + <rect key="frame" x="24" y="944.33333333333337" width="345" height="35"/>
310 + <state key="normal" title="Button"/>
311 + <buttonConfiguration key="configuration" style="plain" title="Button"/>
312 + </button>
313 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ak8-Tc-k8X" userLabel="TermsLabel">
314 + <rect key="frame" x="24" y="989.33333333333326" width="345" height="20.333333333333371"/>
315 + <constraints>
316 + <constraint firstAttribute="height" constant="20.329999999999998" id="ZA1-TX-m9Y"/>
317 + </constraints>
318 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
319 + <nil key="textColor"/>
320 + <nil key="highlightedColor"/>
321 + </label>
322 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="j1U-rV-0FP" userLabel="MapButton">
323 + <rect key="frame" x="24" y="1049.6666666666667" width="345" height="55"/>
324 + <constraints>
325 + <constraint firstAttribute="height" constant="55" id="BZv-RS-JfU"/>
326 + </constraints>
327 + <state key="normal" title="Button"/>
328 + <buttonConfiguration key="configuration" style="plain" title="Button"/>
329 + </button>
330 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="t8z-s1-rIA" userLabel="WebsiteButton">
331 + <rect key="frame" x="24" y="1124.6666666666667" width="345" height="55"/>
332 + <constraints>
333 + <constraint firstAttribute="height" constant="55" id="EUh-DN-fJh"/>
334 + </constraints>
335 + <state key="normal" title="Button"/>
336 + <buttonConfiguration key="configuration" style="plain" title="Button"/>
337 + </button>
338 + </subviews>
339 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
340 + <constraints>
341 + <constraint firstItem="t8z-s1-rIA" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="0ws-pJ-lPS"/>
342 + <constraint firstItem="1Kx-s2-p1l" firstAttribute="leading" secondItem="u54-xs-f5a" secondAttribute="trailing" constant="11" id="22w-QH-w0I"/>
343 + <constraint firstItem="Cwz-uh-Zn5" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="2Cq-bG-OqH"/>
344 + <constraint firstItem="HLR-Nk-7Gm" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="3IS-pt-47I"/>
345 + <constraint firstItem="Id4-Xw-01i" firstAttribute="top" secondItem="Cwz-uh-Zn5" secondAttribute="bottom" constant="50" id="CwG-Ev-Rvi"/>
346 + <constraint firstItem="WjF-6P-8Wn" firstAttribute="top" secondItem="Xiw-td-OMd" secondAttribute="bottom" constant="17" id="DTU-uH-exC"/>
347 + <constraint firstItem="Xiw-td-OMd" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" id="GFv-Mo-QN0"/>
348 + <constraint firstAttribute="trailing" secondItem="t8z-s1-rIA" secondAttribute="trailing" constant="24" id="Hel-rG-nvJ"/>
349 + <constraint firstItem="VJr-Mc-WMf" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="Hoa-qW-OtC"/>
350 + <constraint firstItem="89U-JU-Imv" firstAttribute="top" secondItem="qrm-40-JLT" secondAttribute="top" constant="17" id="JQF-r7-v7p"/>
351 + <constraint firstAttribute="trailing" secondItem="Cwz-uh-Zn5" secondAttribute="trailing" constant="24" id="MCe-c8-R0P"/>
352 + <constraint firstAttribute="trailing" secondItem="89U-JU-Imv" secondAttribute="trailing" constant="16" id="QJ1-AA-bn9"/>
353 + <constraint firstItem="u54-xs-f5a" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="ScM-kH-ZEe"/>
354 + <constraint firstItem="VJr-Mc-WMf" firstAttribute="top" secondItem="u54-xs-f5a" secondAttribute="bottom" id="Ssw-da-ntM"/>
355 + <constraint firstItem="Id4-Xw-01i" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="T08-vK-q5K"/>
356 + <constraint firstAttribute="trailing" secondItem="Xiw-td-OMd" secondAttribute="trailing" id="TGH-lz-pn5"/>
357 + <constraint firstAttribute="trailing" secondItem="Id4-Xw-01i" secondAttribute="trailing" constant="24" id="YjW-2Y-Pgv"/>
358 + <constraint firstItem="ElJ-Te-N4M" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="abd-4G-pI5"/>
359 + <constraint firstItem="Xiw-td-OMd" firstAttribute="top" secondItem="qrm-40-JLT" secondAttribute="top" id="ajI-sR-3Pt"/>
360 + <constraint firstAttribute="trailing" secondItem="j1U-rV-0FP" secondAttribute="trailing" constant="24" id="bBU-zw-nbU"/>
361 + <constraint firstAttribute="bottom" secondItem="t8z-s1-rIA" secondAttribute="bottom" constant="46" id="bBi-iY-kAp"/>
362 + <constraint firstItem="Ak8-Tc-k8X" firstAttribute="top" secondItem="Id4-Xw-01i" secondAttribute="bottom" constant="10" id="bGA-mQ-RpV"/>
363 + <constraint firstItem="WjF-6P-8Wn" firstAttribute="leading" secondItem="1Kx-s2-p1l" secondAttribute="trailing" constant="11" id="bI6-jl-1U8"/>
364 + <constraint firstAttribute="trailing" secondItem="X7C-0H-IhU" secondAttribute="trailing" constant="24" id="cXA-ke-cJ7"/>
365 + <constraint firstItem="X7C-0H-IhU" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="d5O-SJ-gva"/>
366 + <constraint firstAttribute="trailing" secondItem="HLR-Nk-7Gm" secondAttribute="trailing" constant="24" id="eDk-HB-bk1"/>
367 + <constraint firstAttribute="trailing" secondItem="ElJ-Te-N4M" secondAttribute="trailing" constant="24" id="f9R-SZ-ReV"/>
368 + <constraint firstItem="j1U-rV-0FP" firstAttribute="top" secondItem="Ak8-Tc-k8X" secondAttribute="bottom" constant="40" id="gym-1h-ewZ"/>
369 + <constraint firstItem="HLR-Nk-7Gm" firstAttribute="top" secondItem="VJr-Mc-WMf" secondAttribute="bottom" constant="14" id="hfN-OE-fbk"/>
370 + <constraint firstItem="j1U-rV-0FP" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="jac-wq-3ZZ"/>
371 + <constraint firstItem="ElJ-Te-N4M" firstAttribute="top" secondItem="X7C-0H-IhU" secondAttribute="bottom" constant="34" id="jpp-m0-Hqs"/>
372 + <constraint firstItem="t8z-s1-rIA" firstAttribute="top" secondItem="j1U-rV-0FP" secondAttribute="bottom" constant="20" id="lPW-dz-sru"/>
373 + <constraint firstItem="X7C-0H-IhU" firstAttribute="top" secondItem="HLR-Nk-7Gm" secondAttribute="bottom" constant="20" id="mg0-Su-33x"/>
374 + <constraint firstAttribute="trailing" secondItem="Ak8-Tc-k8X" secondAttribute="trailing" constant="24" id="oCu-13-6UV"/>
375 + <constraint firstAttribute="trailing" secondItem="WjF-6P-8Wn" secondAttribute="trailing" constant="18" id="qhV-dn-76R"/>
376 + <constraint firstItem="Cwz-uh-Zn5" firstAttribute="top" secondItem="ElJ-Te-N4M" secondAttribute="bottom" constant="23" id="sxz-YM-etJ"/>
377 + <constraint firstItem="Ak8-Tc-k8X" firstAttribute="leading" secondItem="qrm-40-JLT" secondAttribute="leading" constant="24" id="v9m-et-nFd"/>
378 + <constraint firstItem="u54-xs-f5a" firstAttribute="top" secondItem="Xiw-td-OMd" secondAttribute="bottom" constant="23" id="w3l-OQ-ddG"/>
379 + <constraint firstAttribute="trailing" secondItem="VJr-Mc-WMf" secondAttribute="trailing" constant="24" id="wJA-JP-ZWT"/>
380 + <constraint firstItem="1Kx-s2-p1l" firstAttribute="top" secondItem="Xiw-td-OMd" secondAttribute="bottom" constant="17" id="zNT-Y8-JpJ"/>
381 + </constraints>
382 + </view>
383 + </subviews>
384 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
385 + <constraints>
386 + <constraint firstItem="qrm-40-JLT" firstAttribute="width" secondItem="zwi-OX-nWJ" secondAttribute="width" id="46f-KH-fWt"/>
387 + <constraint firstItem="qrm-40-JLT" firstAttribute="leading" secondItem="z3x-Kv-DPe" secondAttribute="leading" id="Tqa-O8-lWQ"/>
388 + <constraint firstItem="qrm-40-JLT" firstAttribute="bottom" secondItem="z3x-Kv-DPe" secondAttribute="bottom" id="bZd-DN-qHf"/>
389 + <constraint firstItem="qrm-40-JLT" firstAttribute="top" secondItem="z3x-Kv-DPe" secondAttribute="top" id="tU6-Lf-ZiK"/>
390 + <constraint firstItem="qrm-40-JLT" firstAttribute="trailing" secondItem="z3x-Kv-DPe" secondAttribute="trailing" id="wkW-P9-vPb"/>
391 + </constraints>
392 + <viewLayoutGuide key="contentLayoutGuide" id="z3x-Kv-DPe"/>
393 + <viewLayoutGuide key="frameLayoutGuide" id="zwi-OX-nWJ"/>
394 + </scrollView>
395 + </subviews>
396 + <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
397 + <constraints>
398 + <constraint firstAttribute="bottom" secondItem="YpC-uS-mhw" secondAttribute="bottom" id="8Cp-bx-YIo"/>
399 + <constraint firstItem="YpC-uS-mhw" firstAttribute="top" secondItem="XaT-fU-eNh" secondAttribute="top" id="FzN-9C-IcE"/>
400 + <constraint firstItem="qrm-40-JLT" firstAttribute="height" relation="greaterThanOrEqual" secondItem="XaT-fU-eNh" secondAttribute="height" id="Haf-bw-iTI"/>
401 + <constraint firstItem="YpC-uS-mhw" firstAttribute="leading" secondItem="XaT-fU-eNh" secondAttribute="leading" id="npV-aw-Pmw"/>
402 + <constraint firstAttribute="trailing" secondItem="YpC-uS-mhw" secondAttribute="trailing" id="wj8-zH-sYG"/>
403 + </constraints>
404 + </view>
405 + </subviews>
19 <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> 406 <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
407 + <color key="backgroundColor" systemColor="systemBackgroundColor"/>
408 + <constraints>
409 + <constraint firstAttribute="trailing" secondItem="XaT-fU-eNh" secondAttribute="trailing" id="8CQ-aq-Ezd"/>
410 + <constraint firstItem="XaT-fU-eNh" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="DIL-gG-nA2"/>
411 + <constraint firstAttribute="bottom" secondItem="XaT-fU-eNh" secondAttribute="bottom" id="XXc-AZ-i85"/>
412 + <constraint firstItem="XaT-fU-eNh" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="bpz-F0-O5d"/>
413 + </constraints>
414 + <point key="canvasLocation" x="12" y="-11"/>
20 </view> 415 </view>
21 </objects> 416 </objects>
417 + <resources>
418 + <systemColor name="systemBackgroundColor">
419 + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
420 + </systemColor>
421 + </resources>
22 </document> 422 </document>
......