Dimitris Togias

add initial map view controller

......@@ -33,6 +33,8 @@
A07936762885E9CC00064122 /* UIColorExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A07936752885E9CC00064122 /* UIColorExtensions.swift */; };
A079367C2885F2F500064122 /* AnalysisHeaderViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A079367B2885F2F500064122 /* AnalysisHeaderViewCell.swift */; };
A079367E2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A079367D2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift */; };
A080CFD628D170A20045A315 /* MapsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A080CFD428D170A20045A315 /* MapsViewController.swift */; };
A080CFD728D170A20045A315 /* MapsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A080CFD528D170A20045A315 /* MapsViewController.xib */; };
A09DBCAE2888BA8100DD50B0 /* SharingHistoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A09DBCAD2888BA8100DD50B0 /* SharingHistoryViewController.swift */; };
E6A77853282933340045BBA8 /* SwiftWarplyFramework.docc in Sources */ = {isa = PBXBuildFile; fileRef = E6A77852282933340045BBA8 /* SwiftWarplyFramework.docc */; };
E6A77854282933340045BBA8 /* SwiftWarplyFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = E6A77851282933340045BBA8 /* SwiftWarplyFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };
......@@ -187,6 +189,8 @@
A07936752885E9CC00064122 /* UIColorExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColorExtensions.swift; sourceTree = "<group>"; };
A079367B2885F2F500064122 /* AnalysisHeaderViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisHeaderViewCell.swift; sourceTree = "<group>"; };
A079367D2885F60A00064122 /* AnalysisHeaderMessageViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalysisHeaderMessageViewCell.swift; sourceTree = "<group>"; };
A080CFD428D170A20045A315 /* MapsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapsViewController.swift; sourceTree = "<group>"; };
A080CFD528D170A20045A315 /* MapsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MapsViewController.xib; sourceTree = "<group>"; };
A09DBCAD2888BA8100DD50B0 /* SharingHistoryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharingHistoryViewController.swift; sourceTree = "<group>"; };
A9B7BE01A4E812DE49866EF8 /* Pods-SwiftWarplyFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.debug.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.debug.xcconfig"; sourceTree = "<group>"; };
B9EB8A451EF0C5AD75094EEE /* Pods-SwiftWarplyFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftWarplyFramework.release.xcconfig"; path = "Target Support Files/Pods-SwiftWarplyFramework/Pods-SwiftWarplyFramework.release.xcconfig"; sourceTree = "<group>"; };
......@@ -400,6 +404,13 @@
name = cells;
sourceTree = "<group>";
};
A080CFD828D17F7A0045A315 /* controls */ = {
isa = PBXGroup;
children = (
);
name = controls;
sourceTree = "<group>";
};
C049E0423E2B72D796B777A3 /* Pods */ = {
isa = PBXGroup;
children = (
......@@ -433,9 +444,12 @@
1E108A9728A3FA9B0008B8E7 /* Info.plist */,
1E108A8B28A3F8FF0008B8E7 /* Resources */,
A02F34042882B6E60086465F /* TelcoViewController.swift */,
A080CFD828D17F7A0045A315 /* controls */,
A07936712885E65C00064122 /* models */,
A079366A2885CDDC00064122 /* analysis */,
A07936742885E96A00064122 /* utilities */,
A080CFD428D170A20045A315 /* MapsViewController.swift */,
A080CFD528D170A20045A315 /* MapsViewController.xib */,
E6A7785E282933E40045BBA8 /* CouponsViewController.swift */,
1EA1AF092835346A008998AA /* CouponsTableViewCell.swift */,
E6A7785D282933E40045BBA8 /* CouponViewController.swift */,
......@@ -814,6 +828,7 @@
E6A778E5282933E60045BBA8 /* Main.storyboard in Resources */,
1E108A9628A3F9280008B8E7 /* pf_square_sans_pro_bold.ttf in Resources */,
1E108A9228A3F9280008B8E7 /* pf_square_sans_pro_regular.ttf in Resources */,
A080CFD728D170A20045A315 /* MapsViewController.xib in Resources */,
E6A778EA282933E60045BBA8 /* WLNativeVideoTableViewCell.xib in Resources */,
1E108A9528A3F9280008B8E7 /* pf_square_sans_pro_bold_italic.ttf in Resources */,
E6A7790A282933E60045BBA8 /* warp_white_close_button.png in Resources */,
......@@ -925,6 +940,7 @@
E6A7794A282933E70045BBA8 /* FMDatabaseAdditions.m in Sources */,
E6A77903282933E60045BBA8 /* WLAPSItem.m in Sources */,
E6A7790B282933E60045BBA8 /* WLPushManager.m in Sources */,
A080CFD628D170A20045A315 /* MapsViewController.swift in Sources */,
A079366E2885D07700064122 /* AnalysisChildViewController.swift in Sources */,
E6A77950282933E70045BBA8 /* FMResultSet.m in Sources */,
E6A77936282933E70045BBA8 /* AFAutoPurgingImageCache.m in Sources */,
......
//
// MapsViewController.swift
// SwiftWarplyFramework
//
// Created by Βασιλης Σκουρας on 14/9/22.
//
import UIKit
import MapKit
class MapsViewController: UIViewController, MKMapViewDelegate {
// ui
@IBOutlet private var mapView: MKMapView!
@IBOutlet private var titleView: UILabel!
@IBOutlet private var nameImageView: UIImageView!
@IBOutlet private var nameView: UILabel!
@IBOutlet private var hoursView: UILabel!
@IBOutlet private var phoneView: UILabel!
@IBOutlet private var addressView: UILabel!
@IBOutlet private var directionsButton: UIButton!
@IBOutlet private var infoTopConstraint: NSLayoutConstraint!
// public
public var couponSet: swiftApi.CouponSetItemModel?
var merchantsArray:Array<swiftApi.MerchantModel> = []
//
var loading: Bool = false
let initialLocation = CLLocation(latitude: 38.0689416, longitude: 19.9906012) // greece
//
override func viewDidLoad() {
super.viewDidLoad()
self.hidesBottomBarWhenPushed = true
self.infoTopConstraint.constant = 0
setBackButton("ic_close")
//setNavigationTitle(ccms?._titleOffer ?? "")
mapView.delegate = self
mapView.centerToLocation(initialLocation)
//directionsButton.titleLabel?.font = UIFont(name: "PFSquareSansPro-Medium", size: 16)
directionsButton.setTitle("Οδηγίες", for: .normal)
directionsButton.setTitleColor(.white, for: .normal)
directionsButton.backgroundColor = UIColor(red: 0.47, green: 0.75, blue: 0.08, alpha: 1.00)
directionsButton.layer.cornerRadius = 12.0
}
// mvp
@objc func load() {
if (loading) {
return;
}
showLoading()
// TODO: adapt params
let merchantUuid: String = couponSet!.merchant_uuid!
swiftApi().getMultilingualMerchantsAsync([], false, 0.0, [], "", 0, [merchantUuid], getMerchantsCallback)
showContent()
}
func getMerchantsCallback (_ merchantsData: Array<swiftApi.MerchantModel>?) -> Void {
if (merchantsData != nil) {
DispatchQueue.main.async {
self.merchantsArray = merchantsData!
self.loadMapPins()
}
return
}
}
private func showLoading() {
loading = true
}
private func showError() {
}
private func showContent() {
loading = false
}
// private
@IBAction func closeButtomAction(_ sender: Any) {
hidePinDetailsView()
}
private func loadMapPins() {
for item in merchantsArray {
let pin = MKPointAnnotation()
pin.coordinate = CLLocationCoordinate2D(latitude: item._latitude, longitude: item._longitude)
mapView.addAnnotation(pin)
}
}
private func loadPinDetailsView() {
self.titleView.text = "INTERSPORT"
self.nameImageView.image = UIImage(named: "intersport")
self.nameView.text = "Intersport Χαλάνδρι"
self.hoursView.text = "Δευτέρα - Τετάρτη"
self.phoneView.text = "210-6230453"
self.addressView.text = "ΕΘΝΙΚΗΣ ΑΝΤΙΣΤΑΣΕΩΝ 4 41"
}
private func showPinDetailsView() {
self.infoTopConstraint.constant = -320
UIView.animate(withDuration: 2.0) {
self.view.layoutIfNeeded()
}
}
private func hidePinDetailsView() {
self.infoTopConstraint.constant = 0
UIView.animate(withDuration: 2.0) {
self.view.layoutIfNeeded()
}
}
// map view delegate
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
guard !(annotation is MKUserLocation) else {
return nil
}
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "warply_custom")
if (annotationView == nil) {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "warply_custom")
annotationView?.canShowCallout = false
} else {
annotationView?.annotation = annotation
}
// TODO: add custom pin image?
annotationView?.image = UIImage(named: "custom")
return annotationView
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
loadPinDetailsView()
showPinDetailsView()
}
func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
hidePinDetailsView()
}
}
private extension MKMapView {
func centerToLocation(_ location: CLLocation, regionRadius: CLLocationDistance = 1000) {
let coordinateRegion = MKCoordinateRegion(
center: location.coordinate,
latitudinalMeters: regionRadius,
longitudinalMeters: regionRadius)
setRegion(coordinateRegion, animated: true)
}
}
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MapsViewController" customModule="SwiftWarplyFramework" customModuleProvider="target">
<connections>
<outlet property="addressView" destination="syP-Hv-OGD" id="LUw-pI-3va"/>
<outlet property="directionsButton" destination="bw3-J9-wHr" id="sSi-OK-KTA"/>
<outlet property="hoursView" destination="u9U-A7-lbO" id="xm5-gQ-zjh"/>
<outlet property="infoTopConstraint" destination="9av-UX-8VL" id="uKX-lw-OTH"/>
<outlet property="mapView" destination="F1c-ck-cQa" id="cdx-31-BiL"/>
<outlet property="nameImageView" destination="eDV-A1-pOO" id="JYq-eT-kEG"/>
<outlet property="nameView" destination="MsK-eg-pkk" id="60t-lm-O8m"/>
<outlet property="phoneView" destination="knh-D9-CuM" id="ES2-6e-vRx"/>
<outlet property="titleView" destination="oVh-dv-f7a" id="dst-Ku-EFw"/>
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<mapView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="F1c-ck-cQa">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
</mapView>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Zc1-ew-qcl">
<rect key="frame" x="0.0" y="576" width="414" height="320"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="INTERSPORT" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oVh-dv-f7a" userLabel="Title">
<rect key="frame" x="30" y="20" width="304" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="Gf2-VN-pNV"/>
</constraints>
<fontDescription key="fontDescription" type="boldSystem" pointSize="16"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lEb-V2-2FC" userLabel="Close">
<rect key="frame" x="354" y="20" width="30" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="30" id="gnd-qn-qo5"/>
<constraint firstAttribute="height" constant="30" id="oeu-zs-b1J"/>
</constraints>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain"/>
<connections>
<action selector="closeButtomAction:" destination="-1" eventType="touchUpOutside" id="0NJ-C9-lhC"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="F55-qj-PDc" userLabel="LineTop">
<rect key="frame" x="10" y="52" width="394" height="1"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="18a-J3-UZm"/>
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="eDV-A1-pOO" userLabel="NameLogo">
<rect key="frame" x="30" y="78" width="30" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="30" id="IjG-Iw-fIq"/>
<constraint firstAttribute="height" constant="30" id="LnS-gV-hIi"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" text="Intersport Χαλανδρίου" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MsK-eg-pkk" userLabel="NameLabel">
<rect key="frame" x="70" y="74" width="314" height="18"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SHs-vI-jD7" userLabel="LineMiddle">
<rect key="frame" x="10" y="133" width="394" height="1"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="hMo-qH-T2k"/>
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="KhY-nt-uwH" userLabel="phoneIcon">
<rect key="frame" x="30" y="164" width="20" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="1rt-pN-Dld"/>
<constraint firstAttribute="width" constant="20" id="3Rd-ir-r7Q"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" text="210-6230543" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="knh-D9-CuM" userLabel="phoneLabel">
<rect key="frame" x="60" y="154" width="324" height="40"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sAf-f8-8jc" userLabel="LineBottom">
<rect key="frame" x="10" y="214" width="394" height="1"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="vSP-6I-Lz6"/>
</constraints>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Bic-c4-J9E" userLabel="AddressIcon">
<rect key="frame" x="30" y="240.5" width="20" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="A8o-MY-I6f"/>
<constraint firstAttribute="width" constant="20" id="Xma-bp-6IZ"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" text="ΕΘΝΙΚΗΣ ΑΝΤΙΣΤΑΣΕΩΣ 4 41" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="syP-Hv-OGD" userLabel="AddressLabel">
<rect key="frame" x="60" y="235" width="247" height="31"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bw3-J9-wHr" userLabel="Directions">
<rect key="frame" x="317" y="235" width="67" height="31"/>
<state key="normal" title="Button"/>
<buttonConfiguration key="configuration" style="plain" title="Button"/>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" text="Δευτέρα - Τετάρτη" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u9U-A7-lbO" userLabel="HoursLabel">
<rect key="frame" x="70" y="94" width="314" height="18"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" systemColor="systemGray2Color"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<viewLayoutGuide key="safeArea" id="XS2-AR-3j9"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="u9U-A7-lbO" firstAttribute="leading" secondItem="eDV-A1-pOO" secondAttribute="trailing" constant="10" id="0Z2-uE-kRe"/>
<constraint firstItem="XS2-AR-3j9" firstAttribute="trailing" secondItem="MsK-eg-pkk" secondAttribute="trailing" constant="30" id="1qW-i8-MRk"/>
<constraint firstItem="XS2-AR-3j9" firstAttribute="bottom" secondItem="bw3-J9-wHr" secondAttribute="bottom" constant="20" id="3vm-pn-qpa"/>
<constraint firstItem="lEb-V2-2FC" firstAttribute="top" secondItem="Zc1-ew-qcl" secondAttribute="top" constant="20" id="5bY-RU-ons"/>
<constraint firstItem="knh-D9-CuM" firstAttribute="top" secondItem="SHs-vI-jD7" secondAttribute="bottom" constant="20" id="61g-5C-XbI"/>
<constraint firstItem="sAf-f8-8jc" firstAttribute="leading" secondItem="XS2-AR-3j9" secondAttribute="leading" constant="10" id="7W6-cn-WdZ"/>
<constraint firstItem="bw3-J9-wHr" firstAttribute="centerY" secondItem="Bic-c4-J9E" secondAttribute="centerY" id="AHw-0D-gur"/>
<constraint firstItem="SHs-vI-jD7" firstAttribute="top" secondItem="eDV-A1-pOO" secondAttribute="bottom" constant="25" id="D8j-Qh-CHB"/>
<constraint firstItem="KhY-nt-uwH" firstAttribute="leading" secondItem="XS2-AR-3j9" secondAttribute="leading" constant="30" id="Dok-gZ-xf1"/>
<constraint firstItem="SHs-vI-jD7" firstAttribute="leading" secondItem="Zc1-ew-qcl" secondAttribute="leading" constant="10" id="Lj8-XN-HTj"/>
<constraint firstAttribute="trailing" secondItem="F55-qj-PDc" secondAttribute="trailing" constant="10" id="MCj-ek-cnb"/>
<constraint firstAttribute="trailing" secondItem="lEb-V2-2FC" secondAttribute="trailing" constant="30" id="NcX-rr-7OU"/>
<constraint firstItem="syP-Hv-OGD" firstAttribute="leading" secondItem="Bic-c4-J9E" secondAttribute="trailing" constant="10" id="Rl4-cn-VTG"/>
<constraint firstAttribute="trailing" secondItem="SHs-vI-jD7" secondAttribute="trailing" constant="10" id="Smw-Bv-Qlr"/>
<constraint firstItem="lEb-V2-2FC" firstAttribute="leading" secondItem="oVh-dv-f7a" secondAttribute="trailing" constant="20" id="ULP-b9-ToV"/>
<constraint firstItem="MsK-eg-pkk" firstAttribute="leading" secondItem="eDV-A1-pOO" secondAttribute="trailing" constant="10" id="Vg7-xl-oA2"/>
<constraint firstItem="bw3-J9-wHr" firstAttribute="top" secondItem="sAf-f8-8jc" secondAttribute="bottom" constant="20" id="YhG-Th-URU"/>
<constraint firstItem="oVh-dv-f7a" firstAttribute="leading" secondItem="Zc1-ew-qcl" secondAttribute="leading" constant="30" id="Zd1-SB-SlA"/>
<constraint firstItem="KhY-nt-uwH" firstAttribute="top" secondItem="SHs-vI-jD7" secondAttribute="bottom" constant="30" id="a6s-J0-5rJ"/>
<constraint firstItem="knh-D9-CuM" firstAttribute="leading" secondItem="KhY-nt-uwH" secondAttribute="trailing" constant="10" id="aeR-MK-4WB"/>
<constraint firstItem="eDV-A1-pOO" firstAttribute="leading" secondItem="XS2-AR-3j9" secondAttribute="leading" constant="30" id="bkK-59-wXK"/>
<constraint firstAttribute="height" constant="320" id="eIo-xG-BnE"/>
<constraint firstItem="u9U-A7-lbO" firstAttribute="centerY" secondItem="eDV-A1-pOO" secondAttribute="centerY" constant="10" id="gFw-90-gXL"/>
<constraint firstItem="oVh-dv-f7a" firstAttribute="top" secondItem="Zc1-ew-qcl" secondAttribute="top" constant="20" id="gIA-8o-Pv8"/>
<constraint firstItem="XS2-AR-3j9" firstAttribute="trailing" secondItem="u9U-A7-lbO" secondAttribute="trailing" constant="30" id="hZz-zi-NzM"/>
<constraint firstItem="XS2-AR-3j9" firstAttribute="trailing" secondItem="sAf-f8-8jc" secondAttribute="trailing" constant="10" id="hn5-U5-rvW"/>
<constraint firstItem="sAf-f8-8jc" firstAttribute="top" secondItem="SHs-vI-jD7" secondAttribute="bottom" constant="80" id="htI-gJ-mSm"/>
<constraint firstAttribute="trailing" secondItem="bw3-J9-wHr" secondAttribute="trailing" constant="30" id="hya-Ns-ldi"/>
<constraint firstItem="Bic-c4-J9E" firstAttribute="leading" secondItem="Zc1-ew-qcl" secondAttribute="leading" constant="30" id="iUf-BZ-0kl"/>
<constraint firstItem="F55-qj-PDc" firstAttribute="leading" secondItem="Zc1-ew-qcl" secondAttribute="leading" constant="10" id="jK6-2e-p3v"/>
<constraint firstItem="XS2-AR-3j9" firstAttribute="bottom" secondItem="syP-Hv-OGD" secondAttribute="bottom" constant="20" id="luv-Gm-76K"/>
<constraint firstItem="sAf-f8-8jc" firstAttribute="top" secondItem="knh-D9-CuM" secondAttribute="bottom" constant="20" id="m6I-QE-hbq"/>
<constraint firstItem="eDV-A1-pOO" firstAttribute="top" secondItem="F55-qj-PDc" secondAttribute="bottom" constant="25" id="nAA-6u-CUo"/>
<constraint firstItem="XS2-AR-3j9" firstAttribute="trailing" secondItem="knh-D9-CuM" secondAttribute="trailing" constant="30" id="pFB-4b-xx9"/>
<constraint firstItem="MsK-eg-pkk" firstAttribute="centerY" secondItem="eDV-A1-pOO" secondAttribute="centerY" constant="-10" id="wpA-Xv-RdU"/>
<constraint firstItem="syP-Hv-OGD" firstAttribute="top" secondItem="sAf-f8-8jc" secondAttribute="bottom" constant="20" id="xD6-zI-9Nl"/>
<constraint firstItem="SHs-vI-jD7" firstAttribute="top" secondItem="F55-qj-PDc" secondAttribute="bottom" constant="80" id="xPl-UV-cMd"/>
<constraint firstItem="bw3-J9-wHr" firstAttribute="leading" secondItem="syP-Hv-OGD" secondAttribute="trailing" constant="10" id="zAU-89-R2t"/>
</constraints>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="Zc1-ew-qcl" firstAttribute="trailing" secondItem="fnl-2z-Ty3" secondAttribute="trailing" id="0dW-tS-Vxe"/>
<constraint firstItem="Zc1-ew-qcl" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="bottom" constant="-320" id="9av-UX-8VL"/>
<constraint firstItem="F1c-ck-cQa" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="GSB-K2-QjT"/>
<constraint firstItem="Zc1-ew-qcl" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="LKw-N3-e8B"/>
<constraint firstItem="F1c-ck-cQa" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="bxr-2d-8JA"/>
<constraint firstItem="F1c-ck-cQa" firstAttribute="trailing" secondItem="fnl-2z-Ty3" secondAttribute="trailing" id="n6F-h0-5ip"/>
<constraint firstAttribute="bottom" secondItem="F1c-ck-cQa" secondAttribute="bottom" id="tGx-bL-7cM"/>
</constraints>
<point key="canvasLocation" x="137.68115942028987" y="120.53571428571428"/>
</view>
</objects>
<resources>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
<systemColor name="systemGray2Color">
<color red="0.68235294117647061" green="0.68235294117647061" blue="0.69803921568627447" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</systemColor>
</resources>
</document>