Showing
2 changed files
with
151 additions
and
76 deletions
... | @@ -4367,66 +4367,6 @@ | ... | @@ -4367,66 +4367,6 @@ |
4367 | <outlet property="titleLabel" destination="qfZ-mQ-mRL" id="1Bw-YT-TGA"/> | 4367 | <outlet property="titleLabel" destination="qfZ-mQ-mRL" id="1Bw-YT-TGA"/> |
4368 | </connections> | 4368 | </connections> |
4369 | </tableViewCell> | 4369 | </tableViewCell> |
4370 | - <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="InboxTableViewCellId" id="tNJ-bm-aGv" customClass="InboxTableViewCell" customModule="SwiftWarplyFramework" customModuleProvider="target"> | ||
4371 | - <rect key="frame" x="0.0" y="338" width="414" height="78.5"/> | ||
4372 | - <autoresizingMask key="autoresizingMask"/> | ||
4373 | - <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="tNJ-bm-aGv" id="A90-Li-IDd"> | ||
4374 | - <rect key="frame" x="0.0" y="0.0" width="414" height="78.5"/> | ||
4375 | - <autoresizingMask key="autoresizingMask"/> | ||
4376 | - <subviews> | ||
4377 | - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Iar-hb-ngF"> | ||
4378 | - <rect key="frame" x="20" y="0.0" width="374" height="78.5"/> | ||
4379 | - <subviews> | ||
4380 | - <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="q3d-Y7-YoH"> | ||
4381 | - <rect key="frame" x="0.0" y="0.0" width="205.5" height="78.5"/> | ||
4382 | - </imageView> | ||
4383 | - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dNf-ph-58z"> | ||
4384 | - <rect key="frame" x="215.5" y="30" width="148.5" height="18.5"/> | ||
4385 | - <fontDescription key="fontDescription" name="PeridotPE-Regular" family="Peridot PE" pointSize="15"/> | ||
4386 | - <color key="textColor" red="0.12941176469999999" green="0.12941176469999999" blue="0.12941176469999999" alpha="1" colorSpace="calibratedRGB"/> | ||
4387 | - <nil key="highlightedColor"/> | ||
4388 | - </label> | ||
4389 | - </subviews> | ||
4390 | - <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
4391 | - <constraints> | ||
4392 | - <constraint firstAttribute="bottom" secondItem="q3d-Y7-YoH" secondAttribute="bottom" id="3lu-rv-RHI"/> | ||
4393 | - <constraint firstItem="dNf-ph-58z" firstAttribute="leading" secondItem="q3d-Y7-YoH" secondAttribute="trailing" constant="10" id="BE4-GU-dWc"/> | ||
4394 | - <constraint firstItem="q3d-Y7-YoH" firstAttribute="width" secondItem="Iar-hb-ngF" secondAttribute="width" multiplier="0.55" id="GNH-sm-qA8"/> | ||
4395 | - <constraint firstItem="q3d-Y7-YoH" firstAttribute="top" secondItem="Iar-hb-ngF" secondAttribute="top" id="H2X-D0-SQ0"/> | ||
4396 | - <constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="dNf-ph-58z" secondAttribute="bottom" constant="10" id="HMr-jg-Egf"/> | ||
4397 | - <constraint firstItem="dNf-ph-58z" firstAttribute="centerY" secondItem="Iar-hb-ngF" secondAttribute="centerY" id="XRe-mw-R0J"/> | ||
4398 | - <constraint firstAttribute="trailing" secondItem="dNf-ph-58z" secondAttribute="trailing" constant="10" id="ZAx-jV-hle"/> | ||
4399 | - <constraint firstItem="q3d-Y7-YoH" firstAttribute="leading" secondItem="Iar-hb-ngF" secondAttribute="leading" id="d71-vY-Cgu"/> | ||
4400 | - <constraint firstItem="dNf-ph-58z" firstAttribute="top" relation="greaterThanOrEqual" secondItem="Iar-hb-ngF" secondAttribute="top" constant="30" id="oM5-Tj-eb3"/> | ||
4401 | - </constraints> | ||
4402 | - </view> | ||
4403 | - <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="new_icon" translatesAutoresizingMaskIntoConstraints="NO" id="0IZ-qO-cKj"> | ||
4404 | - <rect key="frame" x="344" y="5" width="60" height="25"/> | ||
4405 | - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
4406 | - <constraints> | ||
4407 | - <constraint firstAttribute="width" constant="60" id="ltd-9h-en3"/> | ||
4408 | - <constraint firstAttribute="height" constant="25" id="sjV-4S-ggn"/> | ||
4409 | - </constraints> | ||
4410 | - </imageView> | ||
4411 | - </subviews> | ||
4412 | - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
4413 | - <constraints> | ||
4414 | - <constraint firstItem="0IZ-qO-cKj" firstAttribute="top" secondItem="A90-Li-IDd" secondAttribute="top" constant="5" id="1GR-gl-rM7"/> | ||
4415 | - <constraint firstAttribute="trailing" secondItem="0IZ-qO-cKj" secondAttribute="trailing" constant="10" id="6QW-pj-851"/> | ||
4416 | - <constraint firstItem="Iar-hb-ngF" firstAttribute="leading" secondItem="A90-Li-IDd" secondAttribute="leading" constant="20" id="DbD-oU-ViN"/> | ||
4417 | - <constraint firstAttribute="trailing" secondItem="Iar-hb-ngF" secondAttribute="trailing" constant="20" id="IQM-tY-Clq"/> | ||
4418 | - <constraint firstAttribute="bottom" secondItem="Iar-hb-ngF" secondAttribute="bottom" id="SKJ-aq-DIL"/> | ||
4419 | - <constraint firstItem="Iar-hb-ngF" firstAttribute="top" secondItem="A90-Li-IDd" secondAttribute="top" id="s7S-Fw-x5P"/> | ||
4420 | - </constraints> | ||
4421 | - </tableViewCellContentView> | ||
4422 | - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | ||
4423 | - <connections> | ||
4424 | - <outlet property="campaignImage" destination="q3d-Y7-YoH" id="mSE-US-ead"/> | ||
4425 | - <outlet property="campaignTitleLabel" destination="dNf-ph-58z" id="OL1-vm-neo"/> | ||
4426 | - <outlet property="inboxView" destination="Iar-hb-ngF" id="sYI-hQ-yfh"/> | ||
4427 | - <outlet property="newBadgeImage" destination="0IZ-qO-cKj" id="2Vu-X1-ZX6"/> | ||
4428 | - </connections> | ||
4429 | - </tableViewCell> | ||
4430 | </prototypes> | 4370 | </prototypes> |
4431 | <connections> | 4371 | <connections> |
4432 | <outlet property="dataSource" destination="EDh-Zo-yDu" id="Few-SN-h9B"/> | 4372 | <outlet property="dataSource" destination="EDh-Zo-yDu" id="Few-SN-h9B"/> |
... | @@ -4468,17 +4408,34 @@ | ... | @@ -4468,17 +4408,34 @@ |
4468 | <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> | 4408 | <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> |
4469 | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | 4409 | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
4470 | <subviews> | 4410 | <subviews> |
4471 | - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="MapViewController" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hxt-S7-xrl"> | 4411 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rec-xf-ksW" userLabel="Main View"> |
4472 | - <rect key="frame" x="127" y="437" width="145" height="21"/> | 4412 | + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> |
4473 | - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | 4413 | + <subviews> |
4474 | - <fontDescription key="fontDescription" type="system" pointSize="17"/> | 4414 | + <mapView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="qZN-bc-ZwR"> |
4475 | - <nil key="textColor"/> | 4415 | + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> |
4476 | - <nil key="highlightedColor"/> | 4416 | + </mapView> |
4477 | - </label> | 4417 | + </subviews> |
4418 | + <color key="backgroundColor" systemColor="systemBackgroundColor"/> | ||
4419 | + <constraints> | ||
4420 | + <constraint firstItem="qZN-bc-ZwR" firstAttribute="top" secondItem="Rec-xf-ksW" secondAttribute="top" id="4kw-W4-pBb"/> | ||
4421 | + <constraint firstItem="qZN-bc-ZwR" firstAttribute="leading" secondItem="Rec-xf-ksW" secondAttribute="leading" id="6ig-4b-zI9"/> | ||
4422 | + <constraint firstAttribute="bottom" secondItem="qZN-bc-ZwR" secondAttribute="bottom" id="9X2-xK-rUq"/> | ||
4423 | + <constraint firstAttribute="trailing" secondItem="qZN-bc-ZwR" secondAttribute="trailing" id="L0O-xh-DcY"/> | ||
4424 | + </constraints> | ||
4425 | + </view> | ||
4478 | </subviews> | 4426 | </subviews> |
4479 | <viewLayoutGuide key="safeArea" id="bFi-bg-SVE"/> | 4427 | <viewLayoutGuide key="safeArea" id="bFi-bg-SVE"/> |
4480 | <color key="backgroundColor" systemColor="systemBackgroundColor"/> | 4428 | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
4429 | + <constraints> | ||
4430 | + <constraint firstAttribute="trailing" secondItem="Rec-xf-ksW" secondAttribute="trailing" id="BQY-2F-4YR"/> | ||
4431 | + <constraint firstItem="Rec-xf-ksW" firstAttribute="top" secondItem="YX1-Nw-62m" secondAttribute="top" id="HBe-12-Juu"/> | ||
4432 | + <constraint firstItem="Rec-xf-ksW" firstAttribute="leading" secondItem="YX1-Nw-62m" secondAttribute="leading" id="OjV-oz-5gW"/> | ||
4433 | + <constraint firstAttribute="bottom" secondItem="Rec-xf-ksW" secondAttribute="bottom" id="uP7-ob-anK"/> | ||
4434 | + </constraints> | ||
4481 | </view> | 4435 | </view> |
4436 | + <connections> | ||
4437 | + <outlet property="mapView" destination="qZN-bc-ZwR" id="3WA-X6-PXu"/> | ||
4438 | + </connections> | ||
4482 | </viewController> | 4439 | </viewController> |
4483 | <placeholder placeholderIdentifier="IBFirstResponder" id="7av-3d-VKz" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> | 4440 | <placeholder placeholderIdentifier="IBFirstResponder" id="7av-3d-VKz" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> |
4484 | </objects> | 4441 | </objects> | ... | ... |
... | @@ -5,25 +5,143 @@ | ... | @@ -5,25 +5,143 @@ |
5 | // Created by Manos Chorianopoulos on 7/2/24. | 5 | // Created by Manos Chorianopoulos on 7/2/24. |
6 | // | 6 | // |
7 | 7 | ||
8 | + | ||
8 | import UIKit | 9 | import UIKit |
10 | +import MapKit | ||
11 | + | ||
12 | +@objc public class MapViewController: UIViewController, MKMapViewDelegate { | ||
13 | + @IBOutlet private var mapView: MKMapView! | ||
14 | + | ||
15 | + var merchantsArray:Array<swiftApi.MerchantModel> = [] | ||
16 | + | ||
9 | 17 | ||
10 | -@objc public class MapViewController: UIViewController { | 18 | + var loading: Bool = false |
19 | + let initialLocation = CLLocation(latitude: 37.9641262, longitude: 23.7468592) // greece | ||
11 | 20 | ||
12 | public override func viewDidLoad() { | 21 | public override func viewDidLoad() { |
13 | super.viewDidLoad() | 22 | super.viewDidLoad() |
14 | 23 | ||
15 | - // Do any additional setup after loading the view. | 24 | +// self.hidesBottomBarWhenPushed = true |
25 | + | ||
26 | + mapView.delegate = self | ||
27 | + mapView.centerToLocation(initialLocation, regionRadius: 1000000) | ||
28 | + | ||
29 | + load() | ||
16 | } | 30 | } |
17 | 31 | ||
32 | + public override func viewWillAppear(_ animated: Bool) { | ||
33 | + super.viewWillAppear(animated) | ||
18 | 34 | ||
19 | - /* | 35 | +// self.navigationController?.hideHairline() |
20 | - // MARK: - Navigation | 36 | + } |
21 | 37 | ||
22 | - // In a storyboard-based application, you will often want to do a little preparation before navigation | 38 | + @objc func load() { |
23 | - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | 39 | + |
24 | - // Get the new view controller using segue.destination. | 40 | + if (loading) { |
25 | - // Pass the selected object to the new view controller. | 41 | + return; |
42 | + } | ||
43 | + showLoading() | ||
44 | + | ||
45 | + self.merchantsArray = generateRandomMerchantsInGreece() | ||
46 | + self.loadMapPins() | ||
47 | + showContent() | ||
26 | } | 48 | } |
27 | - */ | ||
28 | 49 | ||
50 | + func generateRandomMerchantsInGreece() -> Array<swiftApi.MerchantModel> { | ||
51 | + // Define the approximate bounding box coordinates for Greece | ||
52 | + let greeceBoundingBox = MKCoordinateRegion( | ||
53 | + center: CLLocationCoordinate2D(latitude: 38.5, longitude: 23.0), | ||
54 | + span: MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 3.0) | ||
55 | + ) | ||
56 | + | ||
57 | + // Generate 10 random merchants within Greece's bounding box | ||
58 | + var randomMerchants: Array<swiftApi.MerchantModel> = [] | ||
59 | + for _ in 1...10 { | ||
60 | + let randomLatitude = Double.random(in: greeceBoundingBox.center.latitude - greeceBoundingBox.span.latitudeDelta / 2 ... greeceBoundingBox.center.latitude + greeceBoundingBox.span.latitudeDelta / 2) | ||
61 | + let randomLongitude = Double.random(in: greeceBoundingBox.center.longitude - greeceBoundingBox.span.longitudeDelta / 2 ... greeceBoundingBox.center.longitude + greeceBoundingBox.span.longitudeDelta / 2) | ||
62 | + | ||
63 | + let randomMerchant = swiftApi.MerchantModel() | ||
64 | + randomMerchant._latitude = randomLatitude | ||
65 | + randomMerchant._longitude = randomLongitude | ||
66 | + | ||
67 | + randomMerchants.append(randomMerchant) | ||
68 | + } | ||
69 | + | ||
70 | + return randomMerchants | ||
71 | + } | ||
72 | + | ||
73 | + | ||
74 | + private func showLoading() { | ||
75 | + | ||
76 | + loading = true | ||
77 | + } | ||
78 | + | ||
79 | + private func showContent() { | ||
80 | + | ||
81 | + loading = false | ||
82 | + } | ||
83 | + | ||
84 | + private func loadMapPins() { | ||
85 | + for item in merchantsArray { | ||
86 | + let pin = MerchantAnnotation(item) | ||
87 | + | ||
88 | + if let annotationView = mapView.view(for: pin) { | ||
89 | + annotationView.isEnabled = false | ||
90 | + } | ||
91 | + mapView.addAnnotation(pin) | ||
92 | + | ||
93 | + } | ||
94 | + } | ||
95 | + | ||
96 | + // map view delegate | ||
97 | + public func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { | ||
98 | + | ||
99 | +// guard !(annotation is MKUserLocation) else { | ||
100 | +// return nil | ||
101 | +// } | ||
102 | + | ||
103 | + var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "warply_custom") | ||
104 | + if (annotationView == nil) { | ||
105 | + annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "warply_custom") | ||
106 | + annotationView?.canShowCallout = false | ||
107 | + } else { | ||
108 | + annotationView?.annotation = annotation | ||
109 | + } | ||
110 | + | ||
111 | + // custom pin image | ||
112 | + let customImageSize = CGSize(width: 60, height: 50) | ||
113 | + | ||
114 | + annotationView?.image = UIImage(named: "map_marker", in: MyEmptyClass.resourceBundle(), compatibleWith: nil) | ||
115 | + | ||
116 | + | ||
117 | + annotationView?.frame = CGRect(x: 0, y: 0, width: customImageSize.width, height: customImageSize.height) | ||
118 | + | ||
119 | + // Add shadow | ||
120 | + annotationView?.layer.shadowColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.16).cgColor | ||
121 | + annotationView?.layer.shadowOffset = CGSize(width: 0.0, height: 3.0) | ||
122 | + annotationView?.layer.shadowOpacity = 1.0 | ||
123 | + annotationView?.layer.shadowRadius = 6.0 | ||
124 | + | ||
125 | + return annotationView | ||
126 | + } | ||
127 | + | ||
128 | + public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { | ||
129 | + // Disable the default behavior of selecting and zooming in on the pin | ||
130 | + mapView.deselectAnnotation(view.annotation, animated: false) | ||
131 | + } | ||
132 | + | ||
133 | + public func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) { | ||
134 | + | ||
135 | + } | ||
136 | +} | ||
137 | + | ||
138 | +private extension MKMapView { | ||
139 | + | ||
140 | + func centerToLocation(_ location: CLLocation, regionRadius: CLLocationDistance = 1000) { | ||
141 | + let coordinateRegion = MKCoordinateRegion( | ||
142 | + center: location.coordinate, | ||
143 | + latitudinalMeters: regionRadius, | ||
144 | + longitudinalMeters: regionRadius) | ||
145 | + setRegion(coordinateRegion, animated: true) | ||
146 | + } | ||
29 | } | 147 | } | ... | ... |
-
Please register or login to post a comment