forked from organicmaps/organicmaps
[ios][promo] promo after booking is added
This commit is contained in:
parent
8213956cb3
commit
823c1e2b3e
18 changed files with 309 additions and 6 deletions
|
@ -70,6 +70,6 @@ class Info;
|
|||
|
||||
- (id<MWMBookingInfoHolder>)bookingInfoHolder;
|
||||
|
||||
- (void)showTutorialIfNeeded;
|
||||
- (void)showAdditionalViewsIfNeeded;
|
||||
|
||||
@end
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "platform/local_country_file_utils.hpp"
|
||||
#include "platform/platform.hpp"
|
||||
#include "platform/preferred_languages.hpp"
|
||||
|
||||
#include "storage/storage_helpers.hpp"
|
||||
|
||||
|
@ -418,8 +419,7 @@ extern NSString * const kAlohalyticsTapEventKey;
|
|||
return tutorial;
|
||||
}
|
||||
|
||||
- (void)showTutorialIfNeeded
|
||||
{
|
||||
- (void)showAdditionalViewsIfNeeded {
|
||||
auto ownerController = self.ownerController;
|
||||
|
||||
if ([MWMRouter isRoutingActive] || [MWMRouter hasSavedRoute])
|
||||
|
@ -437,13 +437,50 @@ extern NSString * const kAlohalyticsTapEventKey;
|
|||
if (DeepLinkHandler.shared.isLaunchedByDeeplink)
|
||||
return;
|
||||
|
||||
if (self.tutorialViewContoller != nil)
|
||||
if ([self showPromoBookingIfNeeded])
|
||||
return;
|
||||
|
||||
[self showTutorialIfNeeded];
|
||||
}
|
||||
|
||||
- (BOOL)showPromoBookingIfNeeded {
|
||||
auto policy = platform::GetCurrentNetworkPolicy();
|
||||
auto promoApi = GetFramework().GetPromoApi(policy);
|
||||
if (promoApi == nullptr)
|
||||
return NO;
|
||||
|
||||
auto const promoAfterBooking = promoApi->GetAfterBooking(languages::GetCurrentNorm());
|
||||
|
||||
if (promoAfterBooking.IsEmpty())
|
||||
return NO;
|
||||
|
||||
auto const ok = ^{
|
||||
auto urlString = @(promoAfterBooking.m_promoUrl.c_str());
|
||||
auto url = [NSURL URLWithString:urlString];
|
||||
[MapViewController.sharedController openCatalogDeeplink:url animated:YES utm:MWMUTMNone];
|
||||
|
||||
[self.ownerController dismissViewControllerAnimated:YES completion:nil];
|
||||
};
|
||||
auto cancel = ^{
|
||||
[self.ownerController dismissViewControllerAnimated:YES completion:nil];
|
||||
};
|
||||
auto cityImageUrl = @(promoAfterBooking.m_pictureUrl.c_str());
|
||||
auto alert = [[PromoAfterBookingViewController alloc] initWithCityImageUrl:cityImageUrl ok:ok cancel:cancel];
|
||||
[self.ownerController presentViewController:alert animated:YES completion:nil];
|
||||
[MWMEye promoAfterBookingShownWithCityId:@(promoAfterBooking.m_id.c_str())];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)showTutorialIfNeeded {
|
||||
if (self.tutorialViewContoller != nil)
|
||||
return YES;
|
||||
|
||||
self.tutorialType = [MWMEye getTipType];
|
||||
self.tutorialViewContoller = [self tutorialWithType:self.tutorialType];
|
||||
if (!self.tutorialViewContoller)
|
||||
return;
|
||||
return NO;
|
||||
|
||||
auto ownerController = self.ownerController;
|
||||
|
||||
[self logTutorialEvent:kStatTipsTricksShow additionalOptions:nil];
|
||||
self.hidden = NO;
|
||||
|
@ -452,6 +489,8 @@ extern NSString * const kAlohalyticsTapEventKey;
|
|||
self.tutorialViewContoller.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||
[ownerController.controlsView addSubview:self.tutorialViewContoller.view];
|
||||
[self.tutorialViewContoller didMoveToParentViewController:ownerController];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)didPressCancel:(MWMTutorialViewController *)viewController {
|
||||
|
|
|
@ -289,7 +289,7 @@ BOOL gIsFirstMyPositionMode = YES;
|
|||
- (void)didBecomeActive
|
||||
{
|
||||
if (!self.welcomePageController)
|
||||
[self.controlsManager showTutorialIfNeeded];
|
||||
[self.controlsManager showAdditionalViewsIfNeeded];
|
||||
}
|
||||
|
||||
- (void)viewDidLayoutSubviews
|
||||
|
|
|
@ -33,5 +33,7 @@ typedef NS_ENUM(NSUInteger, MWMEyeDiscoveryEvent)
|
|||
+ (void)boomarksCatalogShown;
|
||||
+ (void)discoveryShown;
|
||||
+ (void)discoveryItemClickedWithEvent:(MWMEyeDiscoveryEvent)event;
|
||||
+ (void)transitionToBookingWithPos:(CGPoint)pos;
|
||||
+ (void)promoAfterBookingShownWithCityId:(NSString *)cityId;
|
||||
|
||||
@end
|
||||
|
|
|
@ -36,4 +36,13 @@
|
|||
eye::Eye::Event::DiscoveryItemClicked((eye::Discovery::Event)event);
|
||||
}
|
||||
|
||||
+ (void)transitionToBookingWithPos:(CGPoint)pos
|
||||
{
|
||||
eye::Eye::Event::TransitionToBooking({pos.x, pos.y});
|
||||
}
|
||||
|
||||
+ (void)promoAfterBookingShownWithCityId:(NSString *)cityId
|
||||
{
|
||||
eye::Eye::Event::PromoAfterBookingShown(cityId.UTF8String);
|
||||
}
|
||||
@end
|
||||
|
|
6
iphone/Maps/Images.xcassets/Promo/Contents.json
Normal file
6
iphone/Maps/Images.xcassets/Promo/Contents.json
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
23
iphone/Maps/Images.xcassets/Promo/img_booking_popup_pholder_dark.imageset/Contents.json
vendored
Normal file
23
iphone/Maps/Images.xcassets/Promo/img_booking_popup_pholder_dark.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "img_booking_popup_pholder_dark.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "img_booking_popup_pholder_dark@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "img_booking_popup_pholder_dark@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
Binary file not shown.
After Width: | Height: | Size: 84 KiB |
23
iphone/Maps/Images.xcassets/Promo/img_booking_popup_pholder_light.imageset/Contents.json
vendored
Normal file
23
iphone/Maps/Images.xcassets/Promo/img_booking_popup_pholder_light.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "img_booking_popup_pholder_light.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "img_booking_popup_pholder_light@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "img_booking_popup_pholder_light@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
Binary file not shown.
After Width: | Height: | Size: 55 KiB |
Binary file not shown.
After Width: | Height: | Size: 98 KiB |
|
@ -339,6 +339,8 @@
|
|||
34FE5A6F1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */; };
|
||||
3D15ACEE2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D15ACED2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm */; };
|
||||
3D1958EB213804B6009A83EC /* libmetrics.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1958EA213804B6009A83EC /* libmetrics.a */; };
|
||||
3DB1C57122D5DDA60097EC4C /* PromoAfterBookingViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3DB1C57022D5DDA60097EC4C /* PromoAfterBookingViewController.xib */; };
|
||||
3DE1762422D614B8000214FF /* PromoAfterBookingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DE1762322D614B8000214FF /* PromoAfterBookingViewController.swift */; };
|
||||
3DEE1AEB21F72CD300054A91 /* MWMPowerManagmentViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3DEE1AEA21F72CD300054A91 /* MWMPowerManagmentViewController.mm */; };
|
||||
3DF9C22B207CC14A00DA0793 /* taxi_places in Resources */ = {isa = PBXBuildFile; fileRef = 3DF9C22A207CC14A00DA0793 /* taxi_places */; };
|
||||
408645FC21495EB1000A4A1D /* categories_cuisines.txt in Resources */ = {isa = PBXBuildFile; fileRef = 408645FB21495EB1000A4A1D /* categories_cuisines.txt */; };
|
||||
|
@ -1388,7 +1390,9 @@
|
|||
3D15ACED2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMObjectsCategorySelectorDataSource.mm; sourceTree = "<group>"; };
|
||||
3D15ACEF2155118800F725D5 /* MWMObjectsCategorySelectorDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMObjectsCategorySelectorDataSource.h; sourceTree = "<group>"; };
|
||||
3D1958EA213804B6009A83EC /* libmetrics.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libmetrics.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
3DB1C57022D5DDA60097EC4C /* PromoAfterBookingViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PromoAfterBookingViewController.xib; sourceTree = "<group>"; };
|
||||
3DDB4BC31DAB98F000F4D021 /* libpartners_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpartners_api.a; path = "../../../omim-xcode-build/Debug-iphonesimulator/libpartners_api.a"; sourceTree = "<group>"; };
|
||||
3DE1762322D614B8000214FF /* PromoAfterBookingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PromoAfterBookingViewController.swift; sourceTree = "<group>"; };
|
||||
3DEE1AE921F72CD300054A91 /* MWMPowerManagmentViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMPowerManagmentViewController.h; sourceTree = "<group>"; };
|
||||
3DEE1AEA21F72CD300054A91 /* MWMPowerManagmentViewController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMPowerManagmentViewController.mm; sourceTree = "<group>"; };
|
||||
3DF9C22A207CC14A00DA0793 /* taxi_places */ = {isa = PBXFileReference; lastKnownFileType = folder; name = taxi_places; path = ../../data/taxi_places; sourceTree = "<group>"; };
|
||||
|
@ -3404,6 +3408,15 @@
|
|||
path = Widgets;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3DB1C56F22D5DCF20097EC4C /* Promo */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3DB1C57022D5DDA60097EC4C /* PromoAfterBookingViewController.xib */,
|
||||
3DE1762322D614B8000214FF /* PromoAfterBookingViewController.swift */,
|
||||
);
|
||||
path = Promo;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
470F5A7B2189BA7200754295 /* InappPurchase */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -3992,6 +4005,7 @@
|
|||
F6E2FC321E097B9F0083EBEC /* Editor */,
|
||||
F6E2FC8A1E097B9F0083EBEC /* Migration */,
|
||||
F6E2FC8F1E097B9F0083EBEC /* PlacePage */,
|
||||
3DB1C56F22D5DCF20097EC4C /* Promo */,
|
||||
343029191F87BBF300D0A07C /* Reviews */,
|
||||
F6E2FCE11E097B9F0083EBEC /* Search */,
|
||||
F6E2FD361E097BA00083EBEC /* Settings */,
|
||||
|
@ -4847,6 +4861,7 @@
|
|||
34D3B02D1E389D05004100F9 /* MWMEditorAdditionalNameTableViewCell.xib in Resources */,
|
||||
34D3B0331E389D05004100F9 /* MWMEditorCategoryCell.xib in Resources */,
|
||||
F6E2FDCB1E097BA00083EBEC /* MWMEditorNotesFooter.xib in Resources */,
|
||||
3DB1C57122D5DDA60097EC4C /* PromoAfterBookingViewController.xib in Resources */,
|
||||
474AC76D2139E4F2002F9BF9 /* RemoveAdsViewController.xib in Resources */,
|
||||
34D3B0391E389D05004100F9 /* MWMEditorSelectTableViewCell.xib in Resources */,
|
||||
34AB663B1FC5AA330078E451 /* RouteManagerViewController.xib in Resources */,
|
||||
|
@ -5496,6 +5511,7 @@
|
|||
34D4FA631E26572D003F53EF /* FirstLaunchController.swift in Sources */,
|
||||
3404756E1E081A4600C92850 /* MWMSearch.mm in Sources */,
|
||||
6741AA191BF340DE002C974C /* MWMDownloaderDialogCell.mm in Sources */,
|
||||
3DE1762422D614B8000214FF /* PromoAfterBookingViewController.swift in Sources */,
|
||||
34AB66441FC5AA330078E451 /* RouteManagerViewModelProtocol.swift in Sources */,
|
||||
3486B5081E27A4B50069C126 /* LocalNotificationManager.mm in Sources */,
|
||||
3454D7BF1E07F045004AF2AD /* DateComponentsFormatter+ETA.swift in Sources */,
|
||||
|
|
|
@ -518,6 +518,9 @@ void RegisterEventIfPossible(eye::MapObject::Event::Type const type, place_page:
|
|||
NSAssert(url, @"Sponsored url can't be nil!");
|
||||
|
||||
[UIApplication.sharedApplication openURL:url options:@{} completionHandler:nil];
|
||||
|
||||
if (data.isBooking)
|
||||
[MWMEye transitionToBookingWithPos:CGPointMake(data.mercator.x, data.mercator.y)];
|
||||
}
|
||||
|
||||
- (void)book
|
||||
|
|
51
iphone/Maps/UI/Promo/PromoAfterBookingViewController.swift
Normal file
51
iphone/Maps/UI/Promo/PromoAfterBookingViewController.swift
Normal file
|
@ -0,0 +1,51 @@
|
|||
@objc
|
||||
class PromoAfterBookingViewController: UIViewController {
|
||||
private let transitioning = FadeTransitioning<AlertPresentationController>()
|
||||
private var cityImageUrl: String
|
||||
private var ok: MWMVoidBlock
|
||||
private var cancel: MWMVoidBlock
|
||||
|
||||
@IBOutlet weak var cityImageView: UIImageView!
|
||||
|
||||
@objc init(cityImageUrl: String, ok: @escaping MWMVoidBlock, cancel: @escaping MWMVoidBlock) {
|
||||
self.cityImageUrl = cityImageUrl
|
||||
self.ok = ok
|
||||
self.cancel = cancel
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
required init?(coder aDecoder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
setCityImage(cityImageUrl)
|
||||
}
|
||||
|
||||
private func setCityImage(_ imageUrl: String) {
|
||||
cityImageView.image = UIColor.isNightMode()
|
||||
? UIImage(named: "img_booking_popup_pholder_night")
|
||||
: UIImage(named: "img_booking_popup_pholder")
|
||||
if !imageUrl.isEmpty, let url = URL(string: imageUrl) {
|
||||
cityImageView.wi_setImage(with: url, transitionDuration: kDefaultAnimationDuration)
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func onOk() {
|
||||
ok()
|
||||
}
|
||||
|
||||
@IBAction func onCancel() {
|
||||
cancel()
|
||||
}
|
||||
|
||||
override var transitioningDelegate: UIViewControllerTransitioningDelegate? {
|
||||
get { return transitioning }
|
||||
set { }
|
||||
}
|
||||
|
||||
override var modalPresentationStyle: UIModalPresentationStyle {
|
||||
get { return .custom }
|
||||
set { }
|
||||
}
|
||||
}
|
131
iphone/Maps/UI/Promo/PromoAfterBookingViewController.xib
Normal file
131
iphone/Maps/UI/Promo/PromoAfterBookingViewController.xib
Normal file
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="landscape">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.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="PromoAfterBookingViewController" customModule="maps_me" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="cityImageView" destination="sDQ-mR-Qzk" id="zGI-LE-s8P"/>
|
||||
<outlet property="view" destination="BIK-1L-Jgv" id="j5K-AU-y0g"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="BIK-1L-Jgv">
|
||||
<rect key="frame" x="0.0" y="0.0" width="307" height="339"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="img_booking_popup_pholder_light" translatesAutoresizingMaskIntoConstraints="NO" id="sDQ-mR-Qzk" userLabel="City Image">
|
||||
<rect key="frame" x="0.0" y="0.0" width="307" height="128"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="128" id="NJk-9b-9g9"/>
|
||||
<constraint firstAttribute="width" constant="307" id="Rye-Y6-lJx"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Booked a hotel?" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rST-i3-ilM">
|
||||
<rect key="frame" x="18" y="144" width="271" height="21.5"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
|
||||
<color key="textColor" white="0.0" alpha="0.86124785958904104" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="popup_booking_download_guides_title"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="bold18"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Take a look at ready-made trips around the place!" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9tQ-SL-jQU">
|
||||
<rect key="frame" x="18" y="173.5" width="271" height="33.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<color key="textColor" white="0.0" alpha="0.54000000000000004" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="popup_booking_download_guides_message"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular14"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="s7h-bI-mHW">
|
||||
<rect key="frame" x="16" y="227" width="275" height="48"/>
|
||||
<color key="backgroundColor" red="0.11767578125" green="0.58980089430000004" blue="0.94108072916666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="275" id="0m8-86-yE0"/>
|
||||
<constraint firstAttribute="height" constant="48" id="2Aa-Ig-c33"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
|
||||
<state key="normal" title="Discover Guides"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="popup_mwm_download_guides_cta"/>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="8"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="bold16"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="textColorHighlightedName" value="white"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="white"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="linkBlue"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundHighlightedColorName" value="linkBlueHighlighted"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="onOk" destination="-1" eventType="touchUpInside" id="fNr-s9-Hg3"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3oa-Vj-n0Q">
|
||||
<rect key="frame" x="16" y="283" width="275" height="48"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="275" id="cwU-Xt-F7y"/>
|
||||
<constraint firstAttribute="height" constant="48" id="f8G-sC-CzS"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
|
||||
<state key="normal" title="Cancel">
|
||||
<color key="titleColor" white="0.0" alpha="0.37976241438356162" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</state>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="cancel"/>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="8"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<action selector="onCancel" destination="-1" eventType="touchUpInside" id="cRZ-PQ-NWh"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="sDQ-mR-Qzk" firstAttribute="leading" secondItem="KOL-sB-eMa" secondAttribute="leading" id="1gC-m1-Vt8"/>
|
||||
<constraint firstItem="sDQ-mR-Qzk" firstAttribute="top" secondItem="KOL-sB-eMa" secondAttribute="top" id="2ew-IR-iMY"/>
|
||||
<constraint firstItem="3oa-Vj-n0Q" firstAttribute="top" secondItem="s7h-bI-mHW" secondAttribute="bottom" constant="8" id="3vS-Sf-cy1"/>
|
||||
<constraint firstItem="rST-i3-ilM" firstAttribute="top" secondItem="sDQ-mR-Qzk" secondAttribute="bottom" constant="16" id="6tG-Pi-hDQ"/>
|
||||
<constraint firstItem="rST-i3-ilM" firstAttribute="leading" secondItem="KOL-sB-eMa" secondAttribute="leading" constant="18" id="75L-G4-PJ4"/>
|
||||
<constraint firstItem="KOL-sB-eMa" firstAttribute="trailing" secondItem="rST-i3-ilM" secondAttribute="trailing" constant="18" id="9g8-5m-yul"/>
|
||||
<constraint firstItem="3oa-Vj-n0Q" firstAttribute="leading" secondItem="KOL-sB-eMa" secondAttribute="leading" constant="16" id="FoX-wo-jMZ"/>
|
||||
<constraint firstItem="s7h-bI-mHW" firstAttribute="top" secondItem="9tQ-SL-jQU" secondAttribute="bottom" constant="20" id="PbO-1K-3bN"/>
|
||||
<constraint firstItem="9tQ-SL-jQU" firstAttribute="top" secondItem="rST-i3-ilM" secondAttribute="bottom" constant="8" id="Sm7-8W-ZWh"/>
|
||||
<constraint firstItem="KOL-sB-eMa" firstAttribute="trailing" secondItem="9tQ-SL-jQU" secondAttribute="trailing" constant="18" id="WLR-t2-3Qp"/>
|
||||
<constraint firstItem="KOL-sB-eMa" firstAttribute="trailing" secondItem="s7h-bI-mHW" secondAttribute="trailing" constant="16" id="hU8-gZ-kny"/>
|
||||
<constraint firstItem="s7h-bI-mHW" firstAttribute="leading" secondItem="KOL-sB-eMa" secondAttribute="leading" constant="16" id="kGK-rF-oHQ"/>
|
||||
<constraint firstItem="9tQ-SL-jQU" firstAttribute="leading" secondItem="KOL-sB-eMa" secondAttribute="leading" constant="18" id="kxH-7p-4pU"/>
|
||||
<constraint firstItem="KOL-sB-eMa" firstAttribute="trailing" secondItem="3oa-Vj-n0Q" secondAttribute="trailing" constant="16" id="qx8-UG-zXp"/>
|
||||
<constraint firstItem="sDQ-mR-Qzk" firstAttribute="trailing" secondItem="KOL-sB-eMa" secondAttribute="trailing" id="s8H-x9-uGL"/>
|
||||
<constraint firstItem="KOL-sB-eMa" firstAttribute="bottom" secondItem="3oa-Vj-n0Q" secondAttribute="bottom" constant="8" id="ykg-KU-alf"/>
|
||||
</constraints>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<viewLayoutGuide key="safeArea" id="KOL-sB-eMa"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="8"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<point key="canvasLocation" x="-779" y="-103"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="img_booking_popup_pholder_light" width="307" height="128"/>
|
||||
</resources>
|
||||
</document>
|
Loading…
Add table
Reference in a new issue