[ios] Redesign rate alert.

This commit is contained in:
v.mikhaylenko 2015-08-12 15:37:57 +03:00 committed by Alex Zolotarev
parent 14bd3880fe
commit 592ad8bcab
44 changed files with 354 additions and 611 deletions

View file

@ -25,7 +25,6 @@ typedef void (^CloseAlertCompletion)();
code:(routing::IRouter::ResultCode)code;
- (void)presentRateAlert;
- (void)presentFacebookAlert;
- (void)presentFeedbackAlertWithStarsCount:(NSUInteger)starsCount;
- (void)presentRoutingDisclaimerAlert;
- (void)presentDisabledLocationAlert;
- (void)presentLocationAlert;

View file

@ -95,11 +95,6 @@ static NSString * const kAlertControllerNibIdentifier = @"MWMAlertViewController
[self displayAlert:[MWMAlert pedestrianToastShareAlert:isFirstLaunch]];
}
- (void)presentFeedbackAlertWithStarsCount:(NSUInteger)starsCount
{
[self displayAlert:[MWMAlert feedbackAlertWithStarsCount:starsCount]];
}
- (void)presentDownloaderAlertWithCountries:(vector<storage::TIndex> const &)countries
routes:(vector<storage::TIndex> const &)routes
code:(routing::IRouter::ResultCode)code

View file

@ -23,7 +23,6 @@ typedef void (^RightButtonAction)();
routes:(vector<storage::TIndex> const &)routes
code:(routing::IRouter::ResultCode)code;
+ (MWMAlert *)rateAlert;
+ (MWMAlert *)feedbackAlertWithStarsCount:(NSUInteger)starsCount;
+ (MWMAlert *)facebookAlert;
+ (MWMAlert *)locationAlert;
+ (MWMAlert *)routingDisclaimerAlertWithInitialOrientation:(UIInterfaceOrientation)orientation;

View file

@ -12,7 +12,6 @@
#import "MWMDefaultAlert.h"
#import "MWMDownloadTransitMapAlert.h"
#import "MWMFacebookAlert.h"
#import "MWMFeedbackAlert.h"
#import "MWMLocationAlert.h"
#import "MWMPedestrianShareAlert.h"
#import "MWMRateAlert.h"
@ -61,11 +60,6 @@
return [MWMDefaultAlert locationServiceNotSupportedAlert];
}
+ (MWMAlert *)feedbackAlertWithStarsCount:(NSUInteger)starsCount
{
return [MWMFeedbackAlert alertWithStarsCount:starsCount];
}
+ (MWMAlert *)downloaderAlertWithAbsentCountries:(vector<storage::TIndex> const &)countries
routes:(vector<storage::TIndex> const &)routes
code:(routing::IRouter::ResultCode)code

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="2048" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
@ -61,7 +61,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="ok"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="leftButtonTap" destination="iN0-l3-epB" eventType="touchUpInside" id="xE7-aE-OzM"/>
@ -81,7 +81,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="ok"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="rightButtonTap" destination="iN0-l3-epB" eventType="touchUpInside" id="UO8-7c-q1i"/>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="2048" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
@ -83,7 +83,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="download"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="downloadButtonTap:" destination="jqI-GQ-yDh" eventType="touchUpInside" id="L2t-kQ-AzL"/>
@ -103,7 +103,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="later"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="notNowButtonTap:" destination="jqI-GQ-yDh" eventType="touchUpInside" id="6pb-Gg-9sN"/>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="2048" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
@ -67,7 +67,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="later"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="notNowButtonTap:" destination="Eeb-Gs-Fip" eventType="touchUpInside" id="FEJ-y8-uMY"/>
@ -87,7 +87,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="share"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="shareButtonTap:" destination="Eeb-Gs-Fip" eventType="touchUpInside" id="NBE-Bo-lM3"/>

View file

@ -1,15 +0,0 @@
//
// MWMFeedbackAlert.h
// Maps
//
// Created by v.mikhaylenko on 25.03.15.
// Copyright (c) 2015 MapsWithMe. All rights reserved.
//
#import "MWMAlert.h"
@interface MWMFeedbackAlert : MWMAlert
+ (instancetype)alertWithStarsCount:(NSUInteger)starsCount;
@end

View file

@ -1,98 +0,0 @@
//
// MWMFeedbackAlert.m
// Maps
//
// Created by v.mikhaylenko on 25.03.15.
// Copyright (c) 2015 MapsWithMe. All rights reserved.
//
#import "AppInfo.h"
#import "MWMAlertViewController.h"
#import "MWMFeedbackAlert.h"
#import "Statistics.h"
#import "UIKitCategories.h"
#import <MessageUI/MFMailComposeViewController.h>
#import <sys/utsname.h>
#import "3party/Alohalytics/src/alohalytics_objc.h"
#include "platform/platform.hpp"
@interface MWMFeedbackAlert () <MFMailComposeViewControllerDelegate>
@property (nonatomic, assign) NSUInteger starsCount;
@end
static NSString * const kFeedbackAlertNibName = @"MWMFeedbackAlert";
static NSString * const kRateEmail = @"rating@maps.me";
extern NSDictionary * const deviceNames;
extern NSString * const kLocaleUsedInSupportEmails;
extern NSString * const kRateAlertEventName;
@implementation MWMFeedbackAlert
+ (instancetype)alertWithStarsCount:(NSUInteger)starsCount
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"open"]];
MWMFeedbackAlert * alert = [[[NSBundle mainBundle] loadNibNamed:kFeedbackAlertNibName owner:self options:nil] firstObject];
alert.starsCount = starsCount;
return alert;
}
#pragma mark - Actions
- (IBAction)notNowButtonTap:(id)sender
{
[Alohalytics logEvent:kRateAlertEventName withValue:@"feedbackNotNowTap"];
[self close];
}
- (IBAction)writeFeedbackButtonTap:(id)sender
{
[Alohalytics logEvent:kRateAlertEventName withValue:@"feedbackWriteTap"];
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"feedbackWriteTap"]];
self.alpha = 0.;
self.alertController.view.alpha = 0.;
if ([MFMailComposeViewController canSendMail])
{
struct utsname systemInfo;
uname(&systemInfo);
NSString * machine = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
NSString * device = deviceNames[machine];
if (!device)
device = machine;
NSString * languageCode = [[NSLocale preferredLanguages] firstObject];
NSString * language = [[NSLocale localeWithLocaleIdentifier:kLocaleUsedInSupportEmails] displayNameForKey:NSLocaleLanguageCode value:languageCode];
NSString * locale = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
NSString * country = [[NSLocale localeWithLocaleIdentifier:kLocaleUsedInSupportEmails] displayNameForKey:NSLocaleCountryCode value:locale];
NSString * bundleVersion = AppInfo.sharedInfo.bundleVersion;
NSString * text = [NSString stringWithFormat:@"\n\n\n\n- %@ (%@)\n- MAPS.ME %@\n- %@/%@", device, [UIDevice currentDevice].systemVersion, bundleVersion, language, country];
MFMailComposeViewController * mailController = [[MFMailComposeViewController alloc] init];
mailController.mailComposeDelegate = self;
[mailController setSubject:[NSString stringWithFormat:@"%@ : %@", L(@"rating_just_rated"), @(self.starsCount)]];
[mailController setToRecipients:@[kRateEmail]];
[mailController setMessageBody:text isHTML:NO];
mailController.navigationBar.tintColor = [UIColor blackColor];
[self.alertController.ownerViewController presentViewController:mailController animated:YES completion:nil];
}
else
{
NSString * text = [NSString stringWithFormat:L(@"email_error_body"), kRateEmail];
[[[UIAlertView alloc] initWithTitle:L(@"email_error_title") message:text delegate:nil cancelButtonTitle:L(@"ok") otherButtonTitles:nil] show];
}
}
#pragma mark - MFMailComposeViewControllerDelegate
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"mailComposeController"]];
[self.alertController.ownerViewController dismissViewControllerAnimated:YES completion:^
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"close"]];
[self close];
}];
}
@end

View file

@ -1,156 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment version="2048" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
</dependencies>
<customFonts key="customFonts">
<mutableArray key="HelveticaNeue.ttc">
<string>HelveticaNeue-Medium</string>
<string>HelveticaNeue-Medium</string>
</mutableArray>
</customFonts>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="5Qh-Eb-f57" customClass="MWMFeedbackAlert">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Srt-KY-0sK" userLabel="ContainerView">
<rect key="frame" x="20" y="193" width="280" height="181"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Title" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HkY-pH-oLW" userLabel="Title">
<rect key="frame" x="20" y="20" width="240" height="21.5"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="22" id="17O-dl-jAv"/>
<constraint firstAttribute="width" constant="240" id="rVt-Mg-2cv"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="18"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="rating_do_like_maps"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Message" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KLp-hk-e5t" userLabel="Message">
<rect key="frame" x="20" y="53" width="240" height="20"/>
<constraints>
<constraint firstAttribute="width" constant="240" id="JLh-Dt-33i"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="QcM-hl-oy7"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="rating_tap_star"/>
</userDefinedRuntimeAttributes>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cns-JD-j3q">
<rect key="frame" x="0.0" y="93" width="280" height="44"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ItG-Qt-RfU">
<rect key="frame" x="0.0" y="0.0" width="284" height="44"/>
<state key="normal">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<connections>
<action selector="writeFeedbackButtonTap:" destination="5Qh-Eb-f57" eventType="touchUpInside" id="n54-S2-Fv4"/>
</connections>
</button>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="rate-send" translatesAutoresizingMaskIntoConstraints="NO" id="GfC-hh-YWi">
<rect key="frame" x="25" y="10" width="48" height="24"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Champagne-Ardenne" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DsU-aa-xTZ">
<rect key="frame" x="81" y="12" width="188" height="19"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="18"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="rating_send_feedback"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
<color key="backgroundColor" red="0.96078431372549022" green="0.96078431372549022" blue="0.96078431372549022" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="r3K-Bg-V4Z"/>
</constraints>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TRa-Ri-xb0" userLabel="hDivider">
<rect key="frame" x="0.0" y="137" width="280" height="1"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.12" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="HJt-Fa-THf"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AFW-Bz-Rp5" userLabel="left">
<rect key="frame" x="0.0" y="137" width="280" height="44"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="V8r-6h-00E"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
<state key="normal" title="left">
<color key="titleColor" red="0.090196078430000007" green="0.61960784310000006" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="later"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="notNowButtonTap:" destination="5Qh-Eb-f57" eventType="touchUpInside" id="Yx7-AX-VSc"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="0.88" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="centerX" secondItem="HkY-pH-oLW" secondAttribute="centerX" id="8eR-Mw-Ga1"/>
<constraint firstAttribute="width" constant="280" id="HPO-37-NMh"/>
<constraint firstAttribute="width" secondItem="cns-JD-j3q" secondAttribute="width" id="K3y-Ej-Omp"/>
<constraint firstItem="TRa-Ri-xb0" firstAttribute="top" secondItem="cns-JD-j3q" secondAttribute="bottom" id="KUA-OV-RPz"/>
<constraint firstItem="KLp-hk-e5t" firstAttribute="top" secondItem="HkY-pH-oLW" secondAttribute="bottom" constant="11.5" id="SGd-SB-5cq"/>
<constraint firstAttribute="centerX" secondItem="KLp-hk-e5t" secondAttribute="centerX" id="TLY-RU-CDe"/>
<constraint firstAttribute="bottom" secondItem="AFW-Bz-Rp5" secondAttribute="bottom" id="TxH-DH-Fk0"/>
<constraint firstItem="cns-JD-j3q" firstAttribute="top" secondItem="KLp-hk-e5t" secondAttribute="bottom" constant="20" id="faR-QE-72V"/>
<constraint firstAttribute="width" secondItem="AFW-Bz-Rp5" secondAttribute="width" id="g9H-Sv-0TG"/>
<constraint firstAttribute="width" secondItem="TRa-Ri-xb0" secondAttribute="width" id="ntk-PW-ifG"/>
<constraint firstItem="HkY-pH-oLW" firstAttribute="top" secondItem="Srt-KY-0sK" secondAttribute="top" constant="20" id="tjq-w9-YES"/>
<constraint firstAttribute="centerX" secondItem="AFW-Bz-Rp5" secondAttribute="centerX" id="vuA-ne-EVF"/>
<constraint firstItem="AFW-Bz-Rp5" firstAttribute="top" secondItem="TRa-Ri-xb0" secondAttribute="bottom" constant="-1" id="wNU-cK-aiS"/>
<constraint firstAttribute="centerX" secondItem="TRa-Ri-xb0" secondAttribute="centerX" id="x7G-nU-21a"/>
<constraint firstAttribute="centerX" secondItem="cns-JD-j3q" secondAttribute="centerX" id="y88-li-dlj"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="size" keyPath="layer.shadowOffset">
<size key="value" width="0.0" height="3"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.shadowRadius">
<integer key="value" value="6"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="4"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="alertBackground"/>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="centerY" secondItem="Srt-KY-0sK" secondAttribute="centerY" constant="0.5" id="KhM-4C-6jA"/>
<constraint firstAttribute="centerX" secondItem="Srt-KY-0sK" secondAttribute="centerX" id="NIt-wp-iZ6"/>
</constraints>
<point key="canvasLocation" x="706" y="177"/>
</view>
</objects>
<resources>
<image name="dialog_btn_press" width="280" height="44"/>
<image name="rate-send" width="48" height="24"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
</simulatedMetricsContainer>
</document>

View file

@ -80,7 +80,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="ok"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="settingsTap" destination="mnY-7K-ids" eventType="touchUpInside" id="y48-t3-n6f"/>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<deployment version="2048" identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
@ -76,18 +76,18 @@
</state>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="share"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium17"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorHighlightedName" value="whiteColor"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="string" keyPath="layer.borderColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="layer.borderColorName" value="buttonEnabledBlueText"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.borderWidth">
<integer key="value" value="1"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="clearColor"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundHighlightedColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundHighlightedColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="shareButtonTap" destination="pWH-NL-pHM" eventType="touchUpInside" id="5Kn-q1-1CP"/>

View file

@ -6,184 +6,206 @@
// Copyright (c) 2015 MapsWithMe. All rights reserved.
//
#import "AppInfo.h"
#import "MWMAlertViewController.h"
#import "MWMRateAlert.h"
#import "Statistics.h"
#import "UIColor+MapsMeColor.h"
#import "UIKitCategories.h"
#import <MessageUI/MFMailComposeViewController.h>
#import <sys/utsname.h>
#import "3party/Alohalytics/src/alohalytics_objc.h"
#include "platform/platform.hpp"
extern NSString * const kUDAlreadyRatedKey;
extern NSDictionary * const deviceNames;
extern NSString * const kLocaleUsedInSupportEmails;
extern NSString * const kRateAlertEventName = @"rateAlertEvent";
static NSString * const kRateAlertNibName = @"MWMRateAlert";
static NSString * const kRateEmail = @"rating@maps.me";
@interface MWMRateAlert ()
@interface MWMRateAlert () <MFMailComposeViewControllerDelegate>
@property (nonatomic, weak) IBOutlet UIButton *oneStarButton;
@property (nonatomic, weak) IBOutlet UIButton *twoStarButton;
@property (nonatomic, weak) IBOutlet UIButton *threeStarButton;
@property (nonatomic, weak) IBOutlet UIButton *fourStarButton;
@property (nonatomic, weak) IBOutlet UIButton *fiveStarButton;
@property (nonatomic, weak) IBOutlet UIImageView *oneStarPushImageView;
@property (nonatomic, weak) IBOutlet UIImageView *twoStarPushImageView;
@property (nonatomic, weak) IBOutlet UIImageView *threeStarPushImageView;
@property (nonatomic, weak) IBOutlet UIImageView *fourStarPushImageView;
@property (nonatomic, weak) IBOutlet UIImageView *fiveStarPushImageView;
@property (nonatomic, weak) IBOutlet UILabel *oneStarLabel;
@property (nonatomic, weak) IBOutlet UILabel *twoStarLabel;
@property (nonatomic, weak) IBOutlet UILabel *threeStarLabel;
@property (nonatomic, weak) IBOutlet UILabel *fourStarLabel;
@property (nonatomic, weak) IBOutlet UILabel *fiveStarLabel;
@property (nonatomic) IBOutletCollection(UIButton) NSArray * buttons;
@property (nonatomic, weak) IBOutlet UIButton * rateButton;
@property (nonatomic, weak) IBOutlet UILabel * title;
@property (nonatomic, weak) IBOutlet UILabel * message;
@property (nonatomic) NSUInteger selectedTag;
@end
static NSString * const kRateAlertNibName = @"MWMRateAlert";
@implementation MWMRateAlert
+ (instancetype)alert
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"open"]];
MWMRateAlert * alert = [[[NSBundle mainBundle] loadNibNamed:kRateAlertNibName owner:self options:nil] firstObject];
[alert configureButtons];
return alert;
}
#pragma mark - Actions
- (IBAction)oneStarTap:(UILongPressGestureRecognizer *)sender
- (void)configureButtons
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"oneStarTap"]];
[UIView animateWithDuration:0.15 animations:^
{
self.oneStarPushImageView.alpha = 1.;
self.oneStarButton.selected = YES;
}
completion:^(BOOL finished)
{
[UIView animateWithDuration:0.15 animations:^
{
self.oneStarPushImageView.alpha = 0.;
}
completion:^(BOOL finished)
{
[self presentAlertWithStarsCount:1];
}];
}];
UIImage * i = [self.buttons.firstObject imageForState:UIControlStateSelected];
for (UIButton * b in self.buttons)
[b setImage:i forState:(UIControlStateHighlighted | UIControlStateSelected)];
}
- (IBAction)twoStarTap:(UILongPressGestureRecognizer *)sender
- (IBAction)starTap:(UIButton *)sender
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"twoStarTap"]];
[UIView animateWithDuration:0.15 animations:^
if (!self.rateButton.enabled)
{
self.twoStarPushImageView.alpha = 1.;
self.oneStarButton.selected = YES;
self.twoStarButton.selected = YES;
self.rateButton.enabled = YES;
auto color = UIColor.buttonEnabledBlueText;
self.rateButton.layer.borderColor = color.CGColor;
[self.rateButton setTitleColor:color forState:UIControlStateNormal];
}
completion:^(BOOL finished)
NSUInteger const tag = sender.tag;
if (tag == 5)
{
[UIView animateWithDuration:0.15 animations:^
{
self.twoStarPushImageView.alpha = 0.;
}
completion:^(BOOL finished)
{
[self presentAlertWithStarsCount:2];
}];
}];
[self.rateButton setTitle:L(@"rate_the_app") forState:UIControlStateNormal];
self.message.text = L(@"rate_alert_five_star_message");
}
else
{
if (tag == 4)
self.message.text = L(@"rate_alert_four_star_message");
else
self.message.text = L(@"rate_alert_less_than_four_star_message");
[self.rateButton setTitle:L(@"leave_a_review") forState:UIControlStateNormal];
}
[self setNeedsLayout];
for (UIButton * b in self.buttons)
{
if (b.tag > tag)
b.selected = NO;
else
b.selected = YES;
}
self.selectedTag = tag;
}
- (IBAction)threeStarTap:(UILongPressGestureRecognizer *)sender
- (IBAction)starHighlighted:(UIButton *)sender
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"threeStarTap"]];
[UIView animateWithDuration:0.15 animations:^
{
self.threeStarPushImageView.alpha = 1.;
self.oneStarButton.selected = YES;
self.twoStarButton.selected = YES;
self.threeStarButton.selected = YES;
}
completion:^(BOOL finished)
{
[UIView animateWithDuration:0.15 animations:^
{
self.threeStarPushImageView.alpha = 0.;
}
completion:^(BOOL finished)
{
[self presentAlertWithStarsCount:3];
}];
}];
[self setHighlighted:sender.tag];
}
- (IBAction)fourStarTap:(UILongPressGestureRecognizer *)sender
- (IBAction)starTouchCanceled
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"fourStarTap"]];
[UIView animateWithDuration:0.15 animations:^
{
self.fourStarPushImageView.alpha = 1.;
self.oneStarButton.selected = YES;
self.twoStarButton.selected = YES;
self.threeStarButton.selected = YES;
self.fourStarButton.selected = YES;
}
completion:^(BOOL finished)
{
[UIView animateWithDuration:0.15 animations:^
{
self.fourStarPushImageView.alpha = 0.;
}
completion:^(BOOL finished)
{
[self presentAlertWithStarsCount:4];
}];
}];
for (UIButton * b in self.buttons)
b.highlighted = NO;
}
- (IBAction)fiveStarTap:(UILongPressGestureRecognizer *)sender
- (IBAction)starDragInside:(UIButton *)sender
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"fiveStarTap"]];
[Alohalytics logEvent:kRateAlertEventName withValue:@"fiveStar"];
[UIView animateWithDuration:0.15 animations:^
{
self.fiveStarPushImageView.alpha = 1.;
self.oneStarButton.selected = YES;
self.twoStarButton.selected = YES;
self.threeStarButton.selected = YES;
self.fourStarButton.selected = YES;
self.fiveStarButton.selected = YES;
}
completion:^(BOOL finished)
{
[UIView animateWithDuration:0.15 animations:^
{
self.fiveStarPushImageView.alpha = 0.;
}
completion:^(BOOL finished)
{
[[UIApplication sharedApplication] rateVersionFrom:@"ios_pro_popup"];
[self close];
[self setupAlreadyRatedInUserDefaults];
}];
}];
[self setHighlighted:sender.tag];
}
- (IBAction)notNowTap
- (void)setHighlighted:(NSUInteger)tag
{
for (UIButton * b in self.buttons)
{
if (b.tag > tag)
b.highlighted = NO;
else
b.highlighted = !b.selected;
}
}
- (IBAction)doneTap
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"notNowTap"]];
[Alohalytics logEvent:kRateAlertEventName withValue:@"notNowTap"];
[self close];
}
- (void)presentAlertWithStarsCount:(NSUInteger)starsCount
- (IBAction)rateTap
{
[self removeFromSuperview];
[self.alertController presentFeedbackAlertWithStarsCount:starsCount];
[self setupAlreadyRatedInUserDefaults];
NSUInteger const tag = self.selectedTag;
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, [@(tag).stringValue stringByAppendingString:@"_StarTap"]]];
if (tag == 5)
{
[[UIApplication sharedApplication] rateVersionFrom:@"ios_pro_popup"];
[Alohalytics logEvent:kRateAlertEventName withValue:@"fiveStar"];
[self close];
[self setupAlreadyRatedInUserDefaults];
}
else
{
[self sendFeedback];
}
}
- (void)setupAlreadyRatedInUserDefaults {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:kUDAlreadyRatedKey];
[[NSUserDefaults standardUserDefaults] synchronize];
- (void)setupAlreadyRatedInUserDefaults
{
auto ud = [NSUserDefaults standardUserDefaults];
[ud setBool:YES forKey:kUDAlreadyRatedKey];
[ud synchronize];
}
- (void)sendFeedback
{
[Alohalytics logEvent:kRateAlertEventName withValue:@"sendFeedback"];
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"sendFeedback"]];
self.alpha = 0.;
self.alertController.view.alpha = 0.;
if ([MFMailComposeViewController canSendMail])
{
struct utsname systemInfo;
uname(&systemInfo);
NSString * machine = @(systemInfo.machine);
NSString * device = deviceNames[machine];
if (!device)
device = machine;
NSString * languageCode = [[NSLocale preferredLanguages] firstObject];
NSString * language = [[NSLocale localeWithLocaleIdentifier:kLocaleUsedInSupportEmails]
displayNameForKey:NSLocaleLanguageCode
value:languageCode];
NSString * locale = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode];
NSString * country = [[NSLocale localeWithLocaleIdentifier:kLocaleUsedInSupportEmails]
displayNameForKey:NSLocaleCountryCode
value:locale];
NSString * bundleVersion = AppInfo.sharedInfo.bundleVersion;
NSString * text = [NSString stringWithFormat:@"\n\n\n\n- %@ (%@)\n- MAPS.ME %@\n- %@/%@", device,
[UIDevice currentDevice].systemVersion,
bundleVersion,
language,
country];
MFMailComposeViewController * mailController = [[MFMailComposeViewController alloc] init];
mailController.mailComposeDelegate = self;
[mailController setSubject:[NSString stringWithFormat:@"%@ : %@", L(@"rating_just_rated"), @(self.selectedTag)]];
[mailController setToRecipients:@[kRateEmail]];
[mailController setMessageBody:text isHTML:NO];
mailController.navigationBar.tintColor = [UIColor blackColor];
[self.alertController.ownerViewController presentViewController:mailController animated:YES completion:nil];
}
else
{
NSString * text = [NSString stringWithFormat:L(@"email_error_body"), kRateEmail];
[[[UIAlertView alloc] initWithTitle:L(@"email_error_title") message:text
delegate:nil
cancelButtonTitle:L(@"ok")
otherButtonTitles:nil] show];
}
}
#pragma mark - MFMailComposeViewControllerDelegate
- (void)mailComposeController:(MFMailComposeViewController *)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError *)error
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"mailComposeController"]];
[self.alertController.ownerViewController dismissViewControllerAnimated:YES completion:^
{
[Statistics.instance logEvent:[NSString stringWithFormat:@"%@ - %@", kRateAlertEventName, @"close"]];
[self close];
}];
}
@end

View file

@ -12,192 +12,236 @@
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="rvp-tn-CXj" customClass="MWMRateAlert">
<view contentMode="scaleToFill" id="xqS-d4-Cm7" customClass="MWMRateAlert">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mBS-ry-31d" userLabel="ContainerView">
<rect key="frame" x="20" y="174" width="280" height="220"/>
<view opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ecm-mK-5iV" userLabel="ContainerView">
<rect key="frame" x="20" y="141" width="280" height="284"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Title" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NX8-QL-ibo" userLabel="Title">
<rect key="frame" x="20" y="20" width="240" height="21.5"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8dQ-Vo-xwe" userLabel="Done">
<rect key="frame" x="240" y="0.0" width="40" height="40"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="22" id="kpJ-h4-1Rx"/>
<constraint firstAttribute="width" constant="240" id="ybQ-FP-Uyh"/>
<constraint firstAttribute="width" constant="40" id="7d0-Ox-KVv"/>
<constraint firstAttribute="height" constant="40" id="rAh-AS-UMC"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
<state key="normal" image="ic_cancel">
<color key="titleColor" red="0.01176470588" green="0.47843137250000001" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="doneTap" destination="xqS-d4-Cm7" eventType="touchUpInside" id="l7v-bf-FLp"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Оцените нашу работу" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pFt-mm-wUl">
<rect key="frame" x="40" y="12" width="200" height="21.5"/>
<constraints>
<constraint firstAttribute="width" constant="200" id="fCS-vI-z7G"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="22" id="w6i-mI-DNF"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="18"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="rating_do_like_maps"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium18"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackPrimaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="rate_alert_title"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Message" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="53Y-FR-tke" userLabel="Message">
<rect key="frame" x="20" y="53" width="240" height="20"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Спасибо что пользуетесь картами MAPS.ME. Пожалуйста, оцените приложение. Ваши оценки и отзывы помогают нам становиться лучше." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aP7-fq-KaH" userLabel="Message">
<rect key="frame" x="20" y="44" width="240" height="82"/>
<constraints>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="1Yg-tK-x6N"/>
<constraint firstAttribute="width" constant="240" id="Glz-r1-VJI"/>
<constraint firstAttribute="width" constant="240" id="HJM-e9-0wo"/>
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="16" id="v4x-De-gsX"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="rating_tap_star"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular14"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="rate_alert_default_message"/>
</userDefinedRuntimeAttributes>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="w1i-if-5aJ">
<rect key="frame" x="0.0" y="91" width="280" height="62"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ftg-qc-aFl" userLabel="Star box">
<rect key="frame" x="20" y="137" width="240" height="59"/>
<subviews>
<imageView userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="bg_rate" translatesAutoresizingMaskIntoConstraints="NO" id="884-Es-BrM">
<rect key="frame" x="11" y="0.0" width="58" height="58"/>
</imageView>
<imageView userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="bg_rate" translatesAutoresizingMaskIntoConstraints="NO" id="roJ-R8-N46">
<rect key="frame" x="61" y="0.0" width="58" height="58"/>
</imageView>
<imageView userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="bg_rate" translatesAutoresizingMaskIntoConstraints="NO" id="Shh-Gi-meU">
<rect key="frame" x="111" y="0.0" width="58" height="58"/>
</imageView>
<imageView userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="bg_rate" translatesAutoresizingMaskIntoConstraints="NO" id="bss-xQ-e01">
<rect key="frame" x="161" y="0.0" width="58" height="58"/>
</imageView>
<imageView userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="bg_rate" translatesAutoresizingMaskIntoConstraints="NO" id="4I1-Fa-UdO">
<rect key="frame" x="211" y="0.0" width="58" height="58"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6Yd-zQ-8va">
<rect key="frame" x="15" y="4" width="50" height="50"/>
<gestureRecognizers/>
<state key="normal" image="rate-empty">
<button opaque="NO" tag="1" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xu8-rO-3BP">
<rect key="frame" x="0.0" y="0.0" width="48" height="48"/>
<state key="normal" image="ic_rate_star_off">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="selected" image="rate-full"/>
<state key="selected" image="ic_rate_star_on"/>
<state key="highlighted" image="ic_rate_star_pressed"/>
<connections>
<action selector="oneStarTap:" destination="rvp-tn-CXj" eventType="touchUpInside" id="rmH-OL-c5T"/>
<action selector="starDragInside:" destination="xqS-d4-Cm7" eventType="touchDragInside" id="99m-Xy-hho"/>
<action selector="starHighlighted:" destination="xqS-d4-Cm7" eventType="touchDown" id="L02-GB-uCs"/>
<action selector="starTap:" destination="xqS-d4-Cm7" eventType="touchUpInside" id="yPA-9h-GTL"/>
<action selector="starTouchCanceled" destination="xqS-d4-Cm7" eventType="touchDragOutside" id="mBJ-ST-BKG"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Vh3-85-SXS">
<rect key="frame" x="65" y="4" width="50" height="50"/>
<gestureRecognizers/>
<state key="normal" image="rate-empty">
<button opaque="NO" tag="2" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VHf-Kq-sRr">
<rect key="frame" x="48" y="0.0" width="48" height="48"/>
<state key="normal" image="ic_rate_star_off">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="selected" image="rate-full"/>
<state key="selected" image="ic_rate_star_on"/>
<state key="highlighted" image="ic_rate_star_pressed"/>
<connections>
<action selector="twoStarTap:" destination="rvp-tn-CXj" eventType="touchUpInside" id="mK3-q0-iV4"/>
<action selector="starDragInside:" destination="xqS-d4-Cm7" eventType="touchDragInside" id="Dbf-SL-VyI"/>
<action selector="starHighlighted:" destination="xqS-d4-Cm7" eventType="touchDown" id="Ves-R9-ppR"/>
<action selector="starTap:" destination="xqS-d4-Cm7" eventType="touchUpInside" id="ICT-FI-avs"/>
<action selector="starTouchCanceled" destination="xqS-d4-Cm7" eventType="touchDragOutside" id="OeS-dr-LsK"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3hk-xb-v84">
<rect key="frame" x="115" y="4" width="50" height="50"/>
<gestureRecognizers/>
<state key="normal" image="rate-empty">
<button opaque="NO" tag="3" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gM3-vi-PTK">
<rect key="frame" x="96" y="0.0" width="48" height="48"/>
<state key="normal" image="ic_rate_star_off">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="selected" image="rate-full"/>
<state key="selected" image="ic_rate_star_on"/>
<state key="highlighted" image="ic_rate_star_pressed"/>
<connections>
<action selector="threeStarTap:" destination="rvp-tn-CXj" eventType="touchUpInside" id="zOD-32-gej"/>
<action selector="starDragInside:" destination="xqS-d4-Cm7" eventType="touchDragInside" id="wIn-Ty-2CX"/>
<action selector="starHighlighted:" destination="xqS-d4-Cm7" eventType="touchDown" id="5Uk-wg-dqb"/>
<action selector="starTap:" destination="xqS-d4-Cm7" eventType="touchUpInside" id="4yh-ag-YaF"/>
<action selector="starTouchCanceled" destination="xqS-d4-Cm7" eventType="touchDragOutside" id="a7T-Ir-WZj"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8s0-Kx-ndN">
<rect key="frame" x="165" y="4" width="50" height="50"/>
<gestureRecognizers/>
<state key="normal" image="rate-empty">
<button opaque="NO" tag="4" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="p68-lV-IVJ">
<rect key="frame" x="144" y="0.0" width="48" height="48"/>
<state key="normal" image="ic_rate_star_off">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="selected" image="rate-full"/>
<state key="selected" image="ic_rate_star_on"/>
<state key="highlighted" image="ic_rate_star_pressed"/>
<connections>
<action selector="fourStarTap:" destination="rvp-tn-CXj" eventType="touchUpInside" id="KcI-VF-TnQ"/>
<action selector="starDragInside:" destination="xqS-d4-Cm7" eventType="touchDragInside" id="bPm-GK-Ai5"/>
<action selector="starHighlighted:" destination="xqS-d4-Cm7" eventType="touchDown" id="Saf-Ix-UD7"/>
<action selector="starTap:" destination="xqS-d4-Cm7" eventType="touchUpInside" id="XVz-ak-XqB"/>
<action selector="starTouchCanceled" destination="xqS-d4-Cm7" eventType="touchDragOutside" id="x5k-sK-gij"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DMA-yH-vzI">
<rect key="frame" x="215" y="4" width="50" height="50"/>
<gestureRecognizers/>
<state key="normal" image="rate-empty">
<button opaque="NO" tag="5" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Nh7-Fc-Xxp">
<rect key="frame" x="192" y="0.0" width="48" height="48"/>
<state key="normal" image="ic_rate_star_off">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="selected" image="rate-full"/>
<state key="selected" image="ic_rate_star_on"/>
<state key="highlighted" image="ic_rate_star_pressed"/>
<connections>
<action selector="fiveStarTap:" destination="rvp-tn-CXj" eventType="touchUpInside" id="ZPU-8a-Bjn"/>
<action selector="starDragInside:" destination="xqS-d4-Cm7" eventType="touchDragInside" id="9JJ-Em-WZd"/>
<action selector="starHighlighted:" destination="xqS-d4-Cm7" eventType="touchDown" id="fG3-HM-YxH"/>
<action selector="starTap:" destination="xqS-d4-Cm7" eventType="touchUpInside" id="vyJ-qW-a9t"/>
<action selector="starTouchCanceled" destination="xqS-d4-Cm7" eventType="touchDragOutside" id="F0l-TP-SU2"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="1" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KUW-yV-lH2">
<rect key="frame" x="33" y="44" width="14" height="21"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
<color key="textColor" red="0.98823529409999999" green="0.59999999999999998" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="1" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xMo-h5-ZhH">
<rect key="frame" x="0.0" y="48" width="48" height="11"/>
<fontDescription key="fontDescription" type="system" pointSize="10"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular10"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="2" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OY6-XM-b7Q">
<rect key="frame" x="83" y="44" width="14" height="21"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
<color key="textColor" red="0.98823529409999999" green="0.59999999999999998" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="2" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="a6h-xZ-4kL">
<rect key="frame" x="48" y="48" width="48" height="11"/>
<fontDescription key="fontDescription" type="system" pointSize="10"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular10"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="3" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="to0-HX-tRH">
<rect key="frame" x="133" y="44" width="14" height="21"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
<color key="textColor" red="0.98823529409999999" green="0.59999999999999998" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="3" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u3c-7R-fKb">
<rect key="frame" x="96" y="48" width="48" height="11"/>
<fontDescription key="fontDescription" type="system" pointSize="10"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular10"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="4" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sT1-dc-By0">
<rect key="frame" x="183" y="44" width="14" height="21"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
<color key="textColor" red="0.98823529409999999" green="0.59999999999999998" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="4" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Chn-mM-h8X">
<rect key="frame" x="144" y="48" width="48" height="11"/>
<fontDescription key="fontDescription" type="system" pointSize="10"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular10"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="5" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YnV-Uf-9qR">
<rect key="frame" x="233" y="44" width="14" height="21"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="12"/>
<color key="textColor" red="0.98823529409999999" green="0.59999999999999998" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="5" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="s2o-QH-kdH">
<rect key="frame" x="192" y="48" width="48" height="11"/>
<fontDescription key="fontDescription" type="system" pointSize="10"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular10"/>
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="62" id="XVs-US-kU7"/>
<constraint firstAttribute="width" constant="280" id="mxe-2u-Eek"/>
<constraint firstAttribute="height" constant="59" id="2C4-0p-zGE"/>
<constraint firstAttribute="width" constant="240" id="4Ar-TF-nEe"/>
</constraints>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="t8f-AC-V2j" userLabel="left">
<rect key="frame" x="0.0" y="176" width="280" height="44"/>
<button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kfl-QR-Dkk" userLabel="Share">
<rect key="frame" x="20" y="220" width="240" height="44"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="kL9-Iu-9e1"/>
<constraint firstAttribute="height" constant="44" id="O3d-0W-SpN"/>
<constraint firstAttribute="width" constant="240" id="wTo-pg-6DX"/>
</constraints>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
<state key="normal" title="left">
<color key="titleColor" red="0.090196078430000007" green="0.61960784310000006" blue="0.30196078430000001" alpha="1" colorSpace="calibratedRGB"/>
<state key="normal" title="Leave a Review">
<color key="titleColor" red="0.01176470588" green="0.47843137250000001" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<state key="disabled" title="Оценить"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="later"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueDisabled"/>
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium17"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorHighlightedName" value="whiteColor"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
<integer key="value" value="8"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="string" keyPath="layer.borderColorName" value="buttonBlueDisabled"/>
<userDefinedRuntimeAttribute type="number" keyPath="layer.borderWidth">
<integer key="value" value="1"/>
</userDefinedRuntimeAttribute>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="rate_the_app"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="clearColor"/>
<userDefinedRuntimeAttribute type="string" keyPath="backgroundHighlightedColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="notNowTap" destination="rvp-tn-CXj" eventType="touchUpInside" id="C51-Jm-q13"/>
<action selector="rateTap" destination="xqS-d4-Cm7" eventType="touchUpInside" id="lqd-4T-LF7"/>
</connections>
</button>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="i6e-4W-VUG" userLabel="hDivider">
<rect key="frame" x="0.0" y="176" width="280" height="1"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.12" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="height" constant="1" id="EI0-kh-VrN"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="0.88" colorSpace="calibratedWhite"/>
<color key="backgroundColor" red="0.84705882349999995" green="0.84705882349999995" blue="0.84705882349999995" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstAttribute="centerX" secondItem="w1i-if-5aJ" secondAttribute="centerX" id="0cw-Qe-tNn"/>
<constraint firstAttribute="centerX" secondItem="NX8-QL-ibo" secondAttribute="centerX" id="2re-A3-YeS"/>
<constraint firstAttribute="width" secondItem="i6e-4W-VUG" secondAttribute="width" id="E03-1Z-vdL"/>
<constraint firstAttribute="centerX" secondItem="i6e-4W-VUG" secondAttribute="centerX" id="HVH-Nf-kkC"/>
<constraint firstAttribute="bottom" secondItem="t8f-AC-V2j" secondAttribute="bottom" id="IQC-Jl-mgX"/>
<constraint firstItem="w1i-if-5aJ" firstAttribute="top" secondItem="53Y-FR-tke" secondAttribute="bottom" constant="18" id="NiW-HN-BmD"/>
<constraint firstItem="53Y-FR-tke" firstAttribute="top" secondItem="NX8-QL-ibo" secondAttribute="bottom" constant="11.5" id="VuS-We-PlF"/>
<constraint firstAttribute="centerX" secondItem="t8f-AC-V2j" secondAttribute="centerX" id="VwE-ZJ-zdI"/>
<constraint firstAttribute="centerX" secondItem="53Y-FR-tke" secondAttribute="centerX" id="Y6Q-7d-ARs"/>
<constraint firstItem="NX8-QL-ibo" firstAttribute="top" secondItem="mBS-ry-31d" secondAttribute="top" constant="20" id="aTQ-O1-CKK"/>
<constraint firstItem="t8f-AC-V2j" firstAttribute="top" secondItem="i6e-4W-VUG" secondAttribute="bottom" constant="-1" id="dnL-vw-23k"/>
<constraint firstItem="i6e-4W-VUG" firstAttribute="top" secondItem="w1i-if-5aJ" secondAttribute="bottom" constant="23" id="msl-sh-BRc"/>
<constraint firstAttribute="width" constant="280" id="n2s-aN-5Yi"/>
<constraint firstItem="t8f-AC-V2j" firstAttribute="width" secondItem="mBS-ry-31d" secondAttribute="width" id="wWm-jj-zqO"/>
<constraint firstAttribute="centerX" secondItem="aP7-fq-KaH" secondAttribute="centerX" id="GI2-sL-76K"/>
<constraint firstAttribute="centerX" secondItem="pFt-mm-wUl" secondAttribute="centerX" id="Hq8-IR-S13"/>
<constraint firstItem="ftg-qc-aFl" firstAttribute="top" secondItem="aP7-fq-KaH" secondAttribute="bottom" constant="11" id="J6l-3E-sf0"/>
<constraint firstItem="8dQ-Vo-xwe" firstAttribute="top" secondItem="ecm-mK-5iV" secondAttribute="top" id="OY3-cW-0lX"/>
<constraint firstAttribute="centerX" secondItem="kfl-QR-Dkk" secondAttribute="centerX" id="Y5V-cP-MXg"/>
<constraint firstItem="pFt-mm-wUl" firstAttribute="top" secondItem="ecm-mK-5iV" secondAttribute="top" constant="12" id="Zvg-l6-vuI"/>
<constraint firstItem="aP7-fq-KaH" firstAttribute="top" secondItem="pFt-mm-wUl" secondAttribute="bottom" constant="11" id="cTd-t9-gKm"/>
<constraint firstItem="kfl-QR-Dkk" firstAttribute="top" secondItem="ftg-qc-aFl" secondAttribute="bottom" constant="24" id="ea5-e9-0jF"/>
<constraint firstAttribute="centerX" secondItem="ftg-qc-aFl" secondAttribute="centerX" id="l3c-Tr-Jcp"/>
<constraint firstAttribute="trailing" secondItem="8dQ-Vo-xwe" secondAttribute="trailing" id="nBF-K4-mMl"/>
<constraint firstAttribute="width" constant="280" id="oXG-YH-byd"/>
<constraint firstAttribute="bottom" secondItem="kfl-QR-Dkk" secondAttribute="bottom" constant="20" id="y6i-Ea-kjD"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="size" keyPath="layer.shadowOffset">
@ -215,34 +259,27 @@
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="centerY" secondItem="mBS-ry-31d" secondAttribute="centerY" id="KXM-VO-VBc"/>
<constraint firstAttribute="centerX" secondItem="mBS-ry-31d" secondAttribute="centerX" id="dce-Ev-FT5"/>
<constraint firstAttribute="centerX" secondItem="ecm-mK-5iV" secondAttribute="centerX" id="LYH-qW-kdN"/>
<constraint firstAttribute="centerY" secondItem="ecm-mK-5iV" secondAttribute="centerY" constant="0.5" id="un4-ij-LG6"/>
</constraints>
<connections>
<outlet property="fiveStarButton" destination="DMA-yH-vzI" id="3MI-GS-szf"/>
<outlet property="fiveStarLabel" destination="YnV-Uf-9qR" id="0cf-p8-BQG"/>
<outlet property="fiveStarPushImageView" destination="4I1-Fa-UdO" id="Crh-1W-b6w"/>
<outlet property="fourStarButton" destination="8s0-Kx-ndN" id="1BN-35-XgO"/>
<outlet property="fourStarLabel" destination="sT1-dc-By0" id="6CF-iu-7hx"/>
<outlet property="fourStarPushImageView" destination="bss-xQ-e01" id="1JJ-BS-4fO"/>
<outlet property="oneStarButton" destination="6Yd-zQ-8va" id="3Zv-CZ-6Y2"/>
<outlet property="oneStarLabel" destination="KUW-yV-lH2" id="Soj-bh-5xf"/>
<outlet property="oneStarPushImageView" destination="884-Es-BrM" id="EE5-v9-xBV"/>
<outlet property="threeStarButton" destination="3hk-xb-v84" id="tq0-cb-dpb"/>
<outlet property="threeStarLabel" destination="to0-HX-tRH" id="PRx-zq-4za"/>
<outlet property="threeStarPushImageView" destination="Shh-Gi-meU" id="5Y5-t4-yeM"/>
<outlet property="twoStarButton" destination="Vh3-85-SXS" id="cdp-J6-T1D"/>
<outlet property="twoStarLabel" destination="OY6-XM-b7Q" id="H7T-fo-4Wc"/>
<outlet property="twoStarPushImageView" destination="roJ-R8-N46" id="BQK-xT-U2w"/>
<outlet property="message" destination="aP7-fq-KaH" id="4wq-2c-cAB"/>
<outlet property="rateButton" destination="kfl-QR-Dkk" id="SPX-XQ-OlM"/>
<outlet property="title" destination="pFt-mm-wUl" id="ahg-gJ-R3w"/>
<outletCollection property="buttons" destination="xu8-rO-3BP" id="Ejn-zo-ZMt"/>
<outletCollection property="buttons" destination="VHf-Kq-sRr" id="ywN-VZ-K6c"/>
<outletCollection property="buttons" destination="gM3-vi-PTK" id="z3S-Fr-8h2"/>
<outletCollection property="buttons" destination="p68-lV-IVJ" id="RTF-SR-MR9"/>
<outletCollection property="buttons" destination="Nh7-Fc-Xxp" id="Zyf-tB-Lxs"/>
</connections>
<point key="canvasLocation" x="523" y="144"/>
</view>
</objects>
<resources>
<image name="bg_rate" width="58" height="58"/>
<image name="dialog_btn_press" width="280" height="44"/>
<image name="rate-empty" width="50" height="50"/>
<image name="rate-full" width="50" height="50"/>
<image name="ic_cancel" width="40" height="40"/>
<image name="ic_rate_star_off" width="29" height="29"/>
<image name="ic_rate_star_on" width="29" height="29"/>
<image name="ic_rate_star_pressed" width="29" height="29"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>

View file

@ -72,7 +72,7 @@
<state key="highlighted" backgroundImage="dialog_btn_press"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="ok"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonBlueText"/>
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="buttonEnabledBlueText"/>
</userDefinedRuntimeAttributes>
<connections>
<action selector="okTap" destination="Ie9-JJ-hnZ" eventType="touchUpInside" id="vfz-Rd-Kh6"/>

View file

@ -1,23 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "bg_rate.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "bg_rate@2x.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "bg_rate@3x.png"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View file

@ -3,17 +3,17 @@
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "rate-full.png"
"filename" : "ic_rate_star_off.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "rate-full@2x.png"
"filename" : "ic_rate_star_off@2x.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "rate-full@3x.png"
"filename" : "ic_rate_star_off@3x.png"
}
],
"info" : {

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

View file

@ -3,17 +3,17 @@
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "rate-empty.png"
"filename" : "ic_rate_star_on.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "rate-empty@2x.png"
"filename" : "ic_rate_star_on@2x.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "rate-empty@3x.png"
"filename" : "ic_rate_star_on@3x.png"
}
],
"info" : {

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

View file

@ -3,17 +3,17 @@
{
"idiom" : "universal",
"scale" : "1x",
"filename" : "rate-send.png"
"filename" : "ic_rate_star_pressed.png"
},
{
"idiom" : "universal",
"scale" : "2x",
"filename" : "rate-send@2x.png"
"filename" : "ic_rate_star_pressed@2x.png"
},
{
"idiom" : "universal",
"scale" : "3x",
"filename" : "rate-send@3x.png"
"filename" : "ic_rate_star_pressed@3x.png"
}
],
"info" : {

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 926 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 B

View file

@ -224,8 +224,6 @@
F66A8FB01B09F268001B9C97 /* MWMPlacePage.mm in Sources */ = {isa = PBXBuildFile; fileRef = F66A8FAF1B09F268001B9C97 /* MWMPlacePage.mm */; };
F66A8FB21B0A0954001B9C97 /* PlacePageView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F66A8FB11B0A0954001B9C97 /* PlacePageView.xib */; };
F672A6B71AD423A7009060C3 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F672A6B61AD423A7009060C3 /* Images.xcassets */; };
F67BBB571AC54A7800D162C7 /* MWMFeedbackAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = F67BBB551AC54A7800D162C7 /* MWMFeedbackAlert.mm */; };
F67BBB581AC54A7800D162C7 /* MWMFeedbackAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = F67BBB561AC54A7800D162C7 /* MWMFeedbackAlert.xib */; };
F67BC26F1B254B2000FE1D7B /* MWMPlacePageDescriptionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F67BC26E1B254B1F00FE1D7B /* MWMPlacePageDescriptionView.xib */; };
F67BC2751B254F5500FE1D7B /* MWMPlacePageTypeDescription.mm in Sources */ = {isa = PBXBuildFile; fileRef = F67BC2741B254F5500FE1D7B /* MWMPlacePageTypeDescription.mm */; };
F68CEF741AD8852A00563FBA /* MWMMapController.mm in Sources */ = {isa = PBXBuildFile; fileRef = F68CEF731AD8852A00563FBA /* MWMMapController.mm */; };
@ -450,10 +448,10 @@
4A7D89C31B2EBF3B00AC843E /* resources-xhdpi_dark */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "resources-xhdpi_dark"; path = "../../data/resources-xhdpi_dark"; sourceTree = "<group>"; };
4A7D89C41B2EBF3B00AC843E /* resources-xxhdpi_dark */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "resources-xxhdpi_dark"; path = "../../data/resources-xxhdpi_dark"; sourceTree = "<group>"; };
5605022E1B6211E100169CAD /* sound-strings */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "sound-strings"; path = "../../data/sound-strings"; sourceTree = "<group>"; };
6BA0BCCF1B74DDBA00CC9969 /* MWMCustomFacebookEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMCustomFacebookEvents.h; sourceTree = "<group>"; };
6BA0BCD01B74DDBA00CC9969 /* MWMCustomFacebookEvents.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMCustomFacebookEvents.mm; sourceTree = "<group>"; };
560634F01B78804C00F3D670 /* MWMTextToSpeech.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMTextToSpeech.h; sourceTree = "<group>"; };
560634F11B78806100F3D670 /* MWMTextToSpeech.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMTextToSpeech.mm; sourceTree = "<group>"; };
6BA0BCCF1B74DDBA00CC9969 /* MWMCustomFacebookEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMCustomFacebookEvents.h; sourceTree = "<group>"; };
6BA0BCD01B74DDBA00CC9969 /* MWMCustomFacebookEvents.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMCustomFacebookEvents.mm; sourceTree = "<group>"; };
6C24A3B01AD7D65500A47B99 /* MWMWatchEventInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMWatchEventInfo.h; sourceTree = "<group>"; };
6C24A3B11AD7D65500A47B99 /* MWMWatchEventInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMWatchEventInfo.mm; sourceTree = "<group>"; };
6C47C8C31AD6C78A000C52C1 /* MWMNoLocationInterfaceController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMNoLocationInterfaceController.h; sourceTree = "<group>"; };
@ -640,9 +638,6 @@
F66A8FB11B0A0954001B9C97 /* PlacePageView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PlacePageView.xib; sourceTree = "<group>"; };
F672A6B61AD423A7009060C3 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
F673E9151AD2B65B0064EB7F /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; };
F67BBB541AC54A7800D162C7 /* MWMFeedbackAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMFeedbackAlert.h; sourceTree = "<group>"; };
F67BBB551AC54A7800D162C7 /* MWMFeedbackAlert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMFeedbackAlert.mm; sourceTree = "<group>"; };
F67BBB561AC54A7800D162C7 /* MWMFeedbackAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMFeedbackAlert.xib; sourceTree = "<group>"; };
F67BC26E1B254B1F00FE1D7B /* MWMPlacePageDescriptionView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMPlacePageDescriptionView.xib; sourceTree = "<group>"; };
F67BC2731B254F5500FE1D7B /* MWMPlacePageTypeDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMPlacePageTypeDescription.h; sourceTree = "<group>"; };
F67BC2741B254F5500FE1D7B /* MWMPlacePageTypeDescription.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMPlacePageTypeDescription.mm; sourceTree = "<group>"; };
@ -1459,7 +1454,6 @@
F64F19801AB81A00006EAF7E /* AlertController */,
F6BC1E4F1ACBF97000EF0360 /* FacebookAlert */,
34B16C421B72653B000D3A0D /* PedestrianShareAlert */,
F67BBB531AC54A7800D162C7 /* FeedbackAlert */,
F64F19841AB81A00006EAF7E /* BaseAlert */,
F61579301AC2CE760032D8E9 /* RateAlert */,
F64F19871AB81A00006EAF7E /* DefaultAlert */,
@ -1593,16 +1587,6 @@
name = MWMiPadPlacePageView;
sourceTree = "<group>";
};
F67BBB531AC54A7800D162C7 /* FeedbackAlert */ = {
isa = PBXGroup;
children = (
F67BBB541AC54A7800D162C7 /* MWMFeedbackAlert.h */,
F67BBB551AC54A7800D162C7 /* MWMFeedbackAlert.mm */,
F67BBB561AC54A7800D162C7 /* MWMFeedbackAlert.xib */,
);
path = FeedbackAlert;
sourceTree = "<group>";
};
F69A16AB1AF24A9400EF43F0 /* MyTracker */ = {
isa = PBXGroup;
children = (
@ -2092,7 +2076,6 @@
F6FE2C111B03A016009814AA /* PlacePageNavigationBar.xib in Resources */,
FA140651162A6288002BC1ED /* empty@2x.png in Resources */,
F61579361AC2CEB60032D8E9 /* MWMRateAlert.xib in Resources */,
F67BBB581AC54A7800D162C7 /* MWMFeedbackAlert.xib in Resources */,
FA140653162A6288002BC1ED /* empty.png in Resources */,
FA140655162A6288002BC1ED /* eye.png in Resources */,
FA140657162A6288002BC1ED /* eye@2x.png in Resources */,
@ -2210,7 +2193,6 @@
977E26C219E31BCC00BA2219 /* ActiveMapsVC.mm in Sources */,
B08AA8CE1A24C7BC00810B1C /* LocalNotificationInfoProvider.m in Sources */,
1D3623260D0F684500981E51 /* MapsAppDelegate.mm in Sources */,
F67BBB571AC54A7800D162C7 /* MWMFeedbackAlert.mm in Sources */,
341522BF1B666A550077AA8F /* MWMAPIBarView.m in Sources */,
349A35831B53E967009677EE /* MWMDownloadMapRequest.mm in Sources */,
A32B6D4C1A14980500E54A65 /* iosOGLContext.mm in Sources */,

View file

@ -16,6 +16,7 @@
- (void)setLocalizedText:(NSString *)localizedText {
[self setTitle:L(localizedText) forState:UIControlStateNormal];
[self setTitle:L(localizedText) forState:UIControlStateDisabled];
}
- (NSString *)localizedText {

View file

@ -26,7 +26,8 @@
+ (UIColor *)whiteSecondaryText;
+ (UIColor *)whiteHintText;
+ (UIColor *)whiteDividers;
+ (UIColor *)buttonBlueText;
+ (UIColor *)buttonEnabledBlueText;
+ (UIColor *)buttonDisabledBlueText;
+ (UIColor *)buttonHighlightedBlueText;
+ (UIColor *)alertBackground;

View file

@ -103,11 +103,16 @@ static CGFloat const alpha100 = 1.;
return [[UIColor whiteColor] colorWithAlphaComponent:alpha12];
}
+ (UIColor *)buttonBlueText
+ (UIColor *)buttonEnabledBlueText
{
return [UIColor colorWithRed:scaled(3.) green:scaled(122.) blue:scaled(255.) alpha:alpha100];
}
+ (UIColor *)buttonDisabledBlueText
{
return [self.buttonEnabledBlueText colorWithAlphaComponent:alpha26];
}
+ (UIColor *)buttonHighlightedBlueText
{
return [UIColor colorWithRed:scaled(3.) green:scaled(122.) blue:scaled(255.) alpha:alpha54];