forked from organicmaps/organicmaps
Merge pull request #3373 from igrechuhin/MAPSME-1374
[ios] Added bicycle routing support.
This commit is contained in:
commit
6a844a067e
11 changed files with 195 additions and 135 deletions
|
@ -30,7 +30,7 @@ typedef NS_ENUM(NSUInteger, MWMNavigationDashboardState)
|
|||
|
||||
@class MWMNavigationDashboardEntity;
|
||||
|
||||
@interface MWMNavigationDashboardManager : NSObject <LocationObserver, MWMCircularProgressProtocol>
|
||||
@interface MWMNavigationDashboardManager : NSObject <LocationObserver>
|
||||
|
||||
@property (nonatomic, readonly) MWMNavigationDashboardEntity * entity;
|
||||
@property (weak, nonatomic, readonly) MWMRoutePreview * routePreview;
|
||||
|
@ -47,6 +47,7 @@ typedef NS_ENUM(NSUInteger, MWMNavigationDashboardState)
|
|||
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation;
|
||||
- (void)viewWillTransitionToSize:(CGSize)size
|
||||
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator;
|
||||
- (void)setActiveRouter:(routing::RouterType)routerType;
|
||||
- (void)setRouteBuilderProgress:(CGFloat)progress;
|
||||
- (void)showHelperPanels;
|
||||
- (void)hideHelperPanels;
|
||||
|
|
|
@ -27,7 +27,7 @@ extern NSString * const kTTSStatusWasChangedNotification;
|
|||
@property (nonatomic) IBOutlet MWMNavigationDashboard * navigationDashboardLandscape;
|
||||
@property (nonatomic) IBOutlet MWMNavigationDashboard * navigationDashboardPortrait;
|
||||
@property (weak, nonatomic) MWMNavigationDashboard * navigationDashboard;
|
||||
@property (weak, nonatomic) MWMCircularProgress * activeRouteTypeButton;
|
||||
@property (nonatomic) routing::RouterType activeRouterType;
|
||||
|
||||
@property (weak, nonatomic) UIView * ownerView;
|
||||
|
||||
|
@ -160,7 +160,7 @@ extern NSString * const kTTSStatusWasChangedNotification;
|
|||
- (void)handleError
|
||||
{
|
||||
[self.routePreview stateError];
|
||||
self.activeRouteTypeButton.state = MWMCircularProgressStateFailed;
|
||||
[self.routePreview router:self.activeRouterType setState:MWMCircularProgressStateFailed];
|
||||
}
|
||||
|
||||
- (void)updateDashboard
|
||||
|
@ -228,41 +228,18 @@ extern NSString * const kTTSStatusWasChangedNotification;
|
|||
panel.hidden = YES;
|
||||
}
|
||||
|
||||
#pragma mark - MWMCircularProgressDelegate
|
||||
#pragma mark - MWMRoutePreviewProtocol
|
||||
|
||||
- (void)progressButtonPressed:(nonnull MWMCircularProgress *)progress
|
||||
- (void)setActiveRouter:(routing::RouterType)routerType
|
||||
{
|
||||
[Statistics logEvent:kStatEventName(kStatNavigationDashboard, kStatButton)
|
||||
withParameters:@{kStatValue : kStatProgress}];
|
||||
MWMCircularProgressState const s = progress.state;
|
||||
if (s == MWMCircularProgressStateSelected || s == MWMCircularProgressStateCompleted)
|
||||
return;
|
||||
self.activeRouteTypeButton = progress;
|
||||
self.activeRouterType = routerType;
|
||||
auto & f = GetFramework();
|
||||
routing::RouterType type;
|
||||
if ([progress isEqual:self.routePreview.pedestrianProgress])
|
||||
{
|
||||
[Statistics
|
||||
logEvent:kStatPointToPoint
|
||||
withParameters:@{kStatAction : kStatChangeRoutingMode, kStatValue : kStatPedestrian}];
|
||||
self.routePreview.vehicleProgress.state = MWMCircularProgressStateNormal;
|
||||
type = routing::RouterType::Pedestrian;
|
||||
}
|
||||
else
|
||||
{
|
||||
[Statistics
|
||||
logEvent:kStatPointToPoint
|
||||
withParameters:@{kStatAction : kStatChangeRoutingMode, kStatValue : kStatVehicle}];
|
||||
self.routePreview.pedestrianProgress.state = MWMCircularProgressStateNormal;
|
||||
type = routing::RouterType::Vehicle;
|
||||
}
|
||||
f.CloseRouting();
|
||||
f.SetRouter(type);
|
||||
f.SetLastUsedRouter(type);
|
||||
[self.routePreview selectProgress:progress];
|
||||
f.SetRouter(routerType);
|
||||
f.SetLastUsedRouter(routerType);
|
||||
if (!self.delegate.isPossibleToBuildRoute)
|
||||
return;
|
||||
progress.state = MWMCircularProgressStateSpinner;
|
||||
[self.routePreview router:routerType setState:MWMCircularProgressStateSpinner];
|
||||
[self.delegate buildRoute];
|
||||
}
|
||||
|
||||
|
@ -270,7 +247,7 @@ extern NSString * const kTTSStatusWasChangedNotification;
|
|||
|
||||
- (void)setRouteBuilderProgress:(CGFloat)progress
|
||||
{
|
||||
[self.activeRouteTypeButton setProgress:progress / 100.];
|
||||
[self.routePreview router:self.activeRouterType setProgress:progress / 100.];
|
||||
}
|
||||
|
||||
#pragma mark - MWMNavigationDashboard
|
||||
|
@ -333,7 +310,7 @@ extern NSString * const kTTSStatusWasChangedNotification;
|
|||
[self removePanel:self.nextTurnPanel];
|
||||
// [self removePanel:self.lanesPanel];
|
||||
[self setupActualRoute];
|
||||
self.activeRouteTypeButton.state = MWMCircularProgressStateSpinner;
|
||||
[self.routePreview router:self.activeRouterType setState:MWMCircularProgressStateSpinner];
|
||||
}
|
||||
|
||||
- (void)showStateReady
|
||||
|
@ -359,18 +336,8 @@ extern NSString * const kTTSStatusWasChangedNotification;
|
|||
|
||||
- (void)setupActualRoute
|
||||
{
|
||||
switch (GetFramework().GetRouter())
|
||||
{
|
||||
case routing::RouterType::Pedestrian:
|
||||
self.activeRouteTypeButton = self.routePreview.pedestrianProgress;
|
||||
break;
|
||||
case routing::RouterType::Vehicle:
|
||||
self.activeRouteTypeButton = self.routePreview.vehicleProgress;
|
||||
break;
|
||||
case routing::RouterType::Bicycle:
|
||||
break;
|
||||
}
|
||||
[self.routePreview selectProgress:self.activeRouteTypeButton];
|
||||
self.activeRouterType = GetFramework().GetRouter();
|
||||
[self.routePreview selectRouter:self.activeRouterType];
|
||||
}
|
||||
|
||||
- (void)mwm_refreshUI
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#import "MWMNavigationView.h"
|
||||
|
||||
#include "routing/router.hpp"
|
||||
|
||||
@protocol MWMRoutePreviewDataSource <NSObject>
|
||||
|
||||
@required
|
||||
|
@ -19,15 +21,14 @@
|
|||
@property (weak, nonatomic) id<MWMRoutePreviewDataSource> dataSource;
|
||||
@property (weak, nonatomic) MWMNavigationDashboardManager * dashboardManager;
|
||||
|
||||
- (MWMCircularProgress *)pedestrianProgress;
|
||||
- (MWMCircularProgress *)vehicleProgress;
|
||||
|
||||
- (void)configureWithEntity:(MWMNavigationDashboardEntity *)entity;
|
||||
- (void)statePrepare;
|
||||
- (void)statePlanning;
|
||||
- (void)stateError;
|
||||
- (void)stateReady;
|
||||
- (void)reloadData;
|
||||
- (void)selectProgress:(MWMCircularProgress *)progress;
|
||||
- (void)selectRouter:(routing::RouterType)routerType;
|
||||
- (void)router:(routing::RouterType)routerType setState:(MWMCircularProgressState)state;
|
||||
- (void)router:(routing::RouterType)routerType setProgress:(CGFloat)progress;
|
||||
|
||||
@end
|
||||
|
|
|
@ -12,10 +12,11 @@
|
|||
|
||||
static CGFloat const kAdditionalHeight = 20.;
|
||||
|
||||
@interface MWMRoutePreview () <MWMRoutePointCellDelegate>
|
||||
@interface MWMRoutePreview () <MWMRoutePointCellDelegate, MWMCircularProgressProtocol>
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView * pedestrian;
|
||||
@property (weak, nonatomic) IBOutlet UIView * vehicle;
|
||||
@property (weak, nonatomic) IBOutlet UIView * bicycle;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint * planningRouteViewHeight;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint * planningContainerHeight;
|
||||
@property (weak, nonatomic, readwrite) IBOutlet UIButton * extendButton;
|
||||
|
@ -36,12 +37,12 @@ static CGFloat const kAdditionalHeight = 20.;
|
|||
@property (nonatomic) BOOL isNeedToMove;
|
||||
@property (nonatomic) NSIndexPath * indexPathOfMovingCell;
|
||||
|
||||
@property (nonatomic, readwrite) MWMCircularProgress * pedestrianProgress;
|
||||
@property (nonatomic, readwrite) MWMCircularProgress * vehicleProgress;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMRoutePreview
|
||||
{
|
||||
map<routing::RouterType, MWMCircularProgress *> m_progresses;
|
||||
}
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
|
@ -51,7 +52,26 @@ static CGFloat const kAdditionalHeight = 20.;
|
|||
self.layer.rasterizationScale = UIScreen.mainScreen.scale;
|
||||
[self.collectionView registerNib:[UINib nibWithNibName:[MWMRoutePointCell className] bundle:nil]
|
||||
forCellWithReuseIdentifier:[MWMRoutePointCell className]];
|
||||
[self setupProgresses];
|
||||
}
|
||||
|
||||
- (void)setupProgresses
|
||||
{
|
||||
[self addProgress:self.vehicle imageName:@"ic_drive" routerType:routing::RouterType::Vehicle];
|
||||
[self addProgress:self.pedestrian imageName:@"ic_walk" routerType:routing::RouterType::Pedestrian];
|
||||
[self addProgress:self.bicycle imageName:@"ic_bike_route" routerType:routing::RouterType::Bicycle];
|
||||
}
|
||||
|
||||
- (void)addProgress:(UIView *)parentView imageName:(NSString *)imageName routerType:(routing::RouterType)routerType
|
||||
{
|
||||
MWMCircularProgress * progress = [[MWMCircularProgress alloc] initWithParentView:parentView];
|
||||
[progress
|
||||
setImage:[UIImage imageNamed:imageName]
|
||||
forStates:{MWMCircularProgressStateNormal, MWMCircularProgressStateFailed,
|
||||
MWMCircularProgressStateSelected, MWMCircularProgressStateProgress,
|
||||
MWMCircularProgressStateSpinner, MWMCircularProgressStateCompleted}];
|
||||
progress.delegate = self;
|
||||
m_progresses[routerType] = progress;
|
||||
}
|
||||
|
||||
- (void)didMoveToSuperview
|
||||
|
@ -87,8 +107,8 @@ static CGFloat const kAdditionalHeight = 20.;
|
|||
|
||||
- (void)statePrepare
|
||||
{
|
||||
self.pedestrianProgress.state = MWMCircularProgressStateNormal;
|
||||
self.vehicleProgress.state = MWMCircularProgressStateNormal;
|
||||
for (auto const & progress : m_progresses)
|
||||
progress.second.state = MWMCircularProgressStateNormal;
|
||||
self.arrowImageView.transform = CGAffineTransformMakeRotation(M_PI);
|
||||
self.goButton.hidden = NO;
|
||||
self.goButton.enabled = NO;
|
||||
|
@ -178,28 +198,11 @@ static CGFloat const kAdditionalHeight = 20.;
|
|||
[self.collectionView reloadData];
|
||||
}
|
||||
|
||||
- (void)deselectPedestrian
|
||||
- (void)selectRouter:(routing::RouterType)routerType
|
||||
{
|
||||
self.pedestrianProgress.state = MWMCircularProgressStateNormal;
|
||||
}
|
||||
|
||||
- (void)selectProgress:(MWMCircularProgress *)progress;
|
||||
{
|
||||
if ([progress isEqual:self.pedestrianProgress])
|
||||
{
|
||||
self.vehicleProgress.state = MWMCircularProgressStateNormal;
|
||||
self.pedestrianProgress.state = MWMCircularProgressStateSelected;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.pedestrianProgress.state = MWMCircularProgressStateNormal;
|
||||
self.vehicleProgress.state = MWMCircularProgressStateSelected;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)deselectVehicle
|
||||
{
|
||||
self.vehicleProgress.state = MWMCircularProgressStateNormal;
|
||||
for (auto const & progress : m_progresses)
|
||||
progress.second.state = MWMCircularProgressStateNormal;
|
||||
m_progresses[routerType].state = MWMCircularProgressStateSelected;
|
||||
}
|
||||
|
||||
- (void)layoutSubviews
|
||||
|
@ -211,6 +214,54 @@ static CGFloat const kAdditionalHeight = 20.;
|
|||
[super layoutSubviews];
|
||||
}
|
||||
|
||||
- (void)router:(routing::RouterType)routerType setState:(MWMCircularProgressState)state
|
||||
{
|
||||
m_progresses[routerType].state = state;
|
||||
}
|
||||
|
||||
- (void)router:(routing::RouterType)routerType setProgress:(CGFloat)progress
|
||||
{
|
||||
m_progresses[routerType].progress = progress;
|
||||
}
|
||||
|
||||
#pragma mark - MWMCircularProgressProtocol
|
||||
|
||||
- (void)progressButtonPressed:(nonnull MWMCircularProgress *)progress
|
||||
{
|
||||
[Statistics logEvent:kStatEventName(kStatNavigationDashboard, kStatButton)
|
||||
withParameters:@{kStatValue : kStatProgress}];
|
||||
MWMCircularProgressState const s = progress.state;
|
||||
if (s == MWMCircularProgressStateSelected || s == MWMCircularProgressStateCompleted)
|
||||
return;
|
||||
|
||||
for (auto const & prg : m_progresses)
|
||||
{
|
||||
if (prg.second != progress)
|
||||
continue;
|
||||
routing::RouterType const router = prg.first;
|
||||
[self.dashboardManager setActiveRouter:router];
|
||||
[self selectRouter:router];
|
||||
switch (router)
|
||||
{
|
||||
case routing::RouterType::Vehicle:
|
||||
[Statistics
|
||||
logEvent:kStatPointToPoint
|
||||
withParameters:@{kStatAction : kStatChangeRoutingMode, kStatValue : kStatVehicle}];
|
||||
break;
|
||||
case routing::RouterType::Pedestrian:
|
||||
[Statistics
|
||||
logEvent:kStatPointToPoint
|
||||
withParameters:@{kStatAction : kStatChangeRoutingMode, kStatValue : kStatPedestrian}];
|
||||
break;
|
||||
case routing::RouterType::Bicycle:
|
||||
[Statistics
|
||||
logEvent:kStatPointToPoint
|
||||
withParameters:@{kStatAction : kStatChangeRoutingMode, kStatValue : kStatBicycle}];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
- (CGRect)defaultFrame
|
||||
|
@ -375,38 +426,6 @@ static CGFloat const kAdditionalHeight = 20.;
|
|||
}
|
||||
}
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
- (MWMCircularProgress *)pedestrianProgress
|
||||
{
|
||||
if (!_pedestrianProgress)
|
||||
{
|
||||
_pedestrianProgress = [[MWMCircularProgress alloc] initWithParentView:self.pedestrian];
|
||||
[_pedestrianProgress
|
||||
setImage:[UIImage imageNamed:@"ic_walk"]
|
||||
forStates:{MWMCircularProgressStateNormal, MWMCircularProgressStateFailed,
|
||||
MWMCircularProgressStateSelected, MWMCircularProgressStateProgress,
|
||||
MWMCircularProgressStateSpinner, MWMCircularProgressStateCompleted}];
|
||||
_pedestrianProgress.delegate = self.dashboardManager;
|
||||
}
|
||||
return _pedestrianProgress;
|
||||
}
|
||||
|
||||
- (MWMCircularProgress *)vehicleProgress
|
||||
{
|
||||
if (!_vehicleProgress)
|
||||
{
|
||||
_vehicleProgress = [[MWMCircularProgress alloc] initWithParentView:self.vehicle];
|
||||
[_vehicleProgress
|
||||
setImage:[UIImage imageNamed:@"ic_drive"]
|
||||
forStates:{MWMCircularProgressStateNormal, MWMCircularProgressStateFailed,
|
||||
MWMCircularProgressStateSelected, MWMCircularProgressStateProgress,
|
||||
MWMCircularProgressStateSpinner, MWMCircularProgressStateCompleted}];
|
||||
_vehicleProgress.delegate = self.dashboardManager;
|
||||
}
|
||||
return _vehicleProgress;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark - UICollectionView
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15A284" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
|
||||
</dependencies>
|
||||
<customFonts key="customFonts">
|
||||
<mutableArray key="HelveticaNeue.ttc">
|
||||
|
@ -117,10 +117,10 @@
|
|||
<rect key="frame" x="0.0" y="140" width="320" height="48"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OOA-K7-ybj" userLabel="Planning box">
|
||||
<rect key="frame" x="104" y="14" width="204" height="20"/>
|
||||
<rect key="frame" x="142" y="14" width="166" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Planning..." textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="Yzu-Z9-ZiH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="204" height="20"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="166" height="20"/>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.26000000000000001" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
|
@ -141,10 +141,10 @@
|
|||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Fm-p4-iHv" userLabel="Error box">
|
||||
<rect key="frame" x="104" y="14" width="204" height="20"/>
|
||||
<rect key="frame" x="142" y="14" width="166" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Planning..." textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="bZb-KY-Y9r" userLabel="Error">
|
||||
<rect key="frame" x="0.0" y="0.0" width="204" height="20"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="166" height="20"/>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
|
||||
<color key="textColor" red="0.95686274509803915" green="0.2627450980392157" blue="0.21176470588235294" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
|
@ -165,10 +165,10 @@
|
|||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tjE-md-mqu" userLabel="Result box">
|
||||
<rect key="frame" x="104" y="14" width="204" height="20"/>
|
||||
<rect key="frame" x="142" y="14" width="166" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="results" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="v46-iC-Qyb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="204" height="20"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="166" height="20"/>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.54000000000000004" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
|
@ -188,21 +188,44 @@
|
|||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oQc-l8-sZH" userLabel="Buttons Box">
|
||||
<rect key="frame" x="8" y="0.0" width="96" height="48"/>
|
||||
<rect key="frame" x="8" y="0.0" width="134" height="48"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cZF-Ha-2tB">
|
||||
<rect key="frame" x="6" y="6" width="38" height="38"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cZF-Ha-2tB">
|
||||
<rect key="frame" x="6" y="5" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="38" id="m6k-uU-yOl"/>
|
||||
<constraint firstAttribute="height" constant="38" id="mp7-b4-xot"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6D3-QF-6wm">
|
||||
<rect key="frame" x="48" y="6" width="38" height="38"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6D3-QF-6wm">
|
||||
<rect key="frame" x="48" y="5" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="38" id="815-LJ-2tk"/>
|
||||
<constraint firstAttribute="height" constant="38" id="hXi-E7-GUb"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FuO-c6-y9C" userLabel="Bicycle">
|
||||
<rect key="frame" x="90" y="5" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="38" id="9fe-fw-05J"/>
|
||||
<constraint firstAttribute="height" constant="38" id="gbm-NL-zgv"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="96" id="3TM-BU-wVs"/>
|
||||
<constraint firstItem="FuO-c6-y9C" firstAttribute="centerY" secondItem="oQc-l8-sZH" secondAttribute="centerY" id="1De-4s-V8t"/>
|
||||
<constraint firstItem="cZF-Ha-2tB" firstAttribute="centerY" secondItem="oQc-l8-sZH" secondAttribute="centerY" id="MQh-op-cpN"/>
|
||||
<constraint firstItem="cZF-Ha-2tB" firstAttribute="leading" secondItem="oQc-l8-sZH" secondAttribute="leading" constant="6" id="MjU-UA-Kax"/>
|
||||
<constraint firstAttribute="height" constant="48" id="Mws-KZ-ghs"/>
|
||||
<constraint firstItem="FuO-c6-y9C" firstAttribute="leading" secondItem="6D3-QF-6wm" secondAttribute="trailing" constant="4" id="kiZ-0X-ufX"/>
|
||||
<constraint firstItem="6D3-QF-6wm" firstAttribute="leading" secondItem="cZF-Ha-2tB" secondAttribute="trailing" constant="4" id="s0r-iE-aBu"/>
|
||||
<constraint firstItem="6D3-QF-6wm" firstAttribute="centerY" secondItem="oQc-l8-sZH" secondAttribute="centerY" id="vXO-6g-q4L"/>
|
||||
<constraint firstAttribute="trailing" secondItem="FuO-c6-y9C" secondAttribute="trailing" constant="6" id="xOE-cB-5a5"/>
|
||||
<constraint firstItem="6D3-QF-6wm" firstAttribute="centerX" secondItem="oQc-l8-sZH" secondAttribute="centerX" id="zcU-mY-JYz"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
|
@ -252,6 +275,7 @@
|
|||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<connections>
|
||||
<outlet property="arrowImageView" destination="y8P-JL-riK" id="rzP-ce-6f0"/>
|
||||
<outlet property="bicycle" destination="FuO-c6-y9C" id="UR2-pF-Amb"/>
|
||||
<outlet property="collectionView" destination="DrK-vI-WkO" id="IRr-R5-WIS"/>
|
||||
<outlet property="contentView" destination="WqK-Yb-PmP" id="4ph-Dm-EFr"/>
|
||||
<outlet property="errorBox" destination="8Fm-p4-iHv" id="wTj-tn-NrE"/>
|
||||
|
@ -270,6 +294,6 @@
|
|||
</objects>
|
||||
<resources>
|
||||
<image name="ic_arrow_up_and_down" width="9" height="9"/>
|
||||
<image name="ic_nav_bar_back" width="44" height="44"/>
|
||||
<image name="ic_nav_bar_back" width="14" height="22"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
|
||||
|
@ -87,21 +87,44 @@
|
|||
<rect key="frame" x="0.0" y="140" width="320" height="48"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sXu-tl-a0m" userLabel="Buttons Box">
|
||||
<rect key="frame" x="100" y="0.0" width="120" height="48"/>
|
||||
<rect key="frame" x="70" y="0.0" width="180" height="48"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jDl-pu-eov">
|
||||
<rect key="frame" x="6" y="6" width="36" height="36"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jDl-pu-eov">
|
||||
<rect key="frame" x="6" y="5" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="38" id="20g-vX-5Jf"/>
|
||||
<constraint firstAttribute="width" constant="38" id="glR-Pu-Wba"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="VhE-hA-Leo">
|
||||
<rect key="frame" x="72" y="6" width="36" height="36"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VhE-hA-Leo">
|
||||
<rect key="frame" x="71" y="5" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="38" id="Mjq-9J-kR6"/>
|
||||
<constraint firstAttribute="height" constant="38" id="mo7-IQ-2Iq"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yiM-fM-sSS" userLabel="Bicycle">
|
||||
<rect key="frame" x="136" y="5" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="38" id="fmv-op-qsf"/>
|
||||
<constraint firstAttribute="width" constant="38" id="lNf-AN-ghl"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="120" id="L2G-Qu-tAj"/>
|
||||
<constraint firstItem="jDl-pu-eov" firstAttribute="leading" secondItem="sXu-tl-a0m" secondAttribute="leading" constant="6" id="4B3-wd-Hli"/>
|
||||
<constraint firstItem="jDl-pu-eov" firstAttribute="centerY" secondItem="sXu-tl-a0m" secondAttribute="centerY" id="4dN-qr-d8x"/>
|
||||
<constraint firstItem="yiM-fM-sSS" firstAttribute="leading" secondItem="VhE-hA-Leo" secondAttribute="trailing" constant="27" id="4dV-co-loq"/>
|
||||
<constraint firstItem="VhE-hA-Leo" firstAttribute="leading" secondItem="jDl-pu-eov" secondAttribute="trailing" constant="27" id="Dhr-7d-Tja"/>
|
||||
<constraint firstAttribute="height" constant="48" id="VKo-hu-3qN"/>
|
||||
<constraint firstAttribute="trailing" secondItem="yiM-fM-sSS" secondAttribute="trailing" constant="6" id="Z9O-Lt-RWP"/>
|
||||
<constraint firstItem="VhE-hA-Leo" firstAttribute="centerY" secondItem="sXu-tl-a0m" secondAttribute="centerY" id="fIv-2J-AaU"/>
|
||||
<constraint firstItem="VhE-hA-Leo" firstAttribute="centerX" secondItem="sXu-tl-a0m" secondAttribute="centerX" id="n21-Af-MJF"/>
|
||||
<constraint firstItem="yiM-fM-sSS" firstAttribute="centerY" secondItem="sXu-tl-a0m" secondAttribute="centerY" id="pyj-0F-ss9"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
|
@ -199,7 +222,7 @@
|
|||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Arrive at 12:24" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oec-Ee-6ha">
|
||||
<rect key="frame" x="40" y="28" width="240" height="16"/>
|
||||
<rect key="frame" x="-16" y="-226" width="93" height="17"/>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" 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"/>
|
||||
|
@ -209,7 +232,7 @@
|
|||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="ic_checkmark" translatesAutoresizingMaskIntoConstraints="NO" id="pQb-pb-L88">
|
||||
<rect key="frame" x="0.0" y="10" width="24" height="24"/>
|
||||
<rect key="frame" x="-16" y="-226" width="28" height="28"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="coloring" value="MWMBlue"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
|
@ -251,7 +274,7 @@
|
|||
<rect key="frame" x="0.0" y="607" width="320" height="48"/>
|
||||
<subviews>
|
||||
<button hidden="YES" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4IJ-pR-Ztp" userLabel="Go" customClass="MWMStartButton">
|
||||
<rect key="frame" x="100" y="8" width="120" height="32"/>
|
||||
<rect key="frame" x="0.0" y="-607" width="56" height="22"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="goButton"/>
|
||||
<inset key="contentEdgeInsets" minX="8" minY="0.0" maxX="8" maxY="0.0"/>
|
||||
<state key="normal" title="Start"/>
|
||||
|
@ -322,6 +345,7 @@
|
|||
</userDefinedRuntimeAttributes>
|
||||
<connections>
|
||||
<outlet property="arriveLabel" destination="oec-Ee-6ha" id="7Ep-ck-NSQ"/>
|
||||
<outlet property="bicycle" destination="yiM-fM-sSS" id="pMf-6J-9Gd"/>
|
||||
<outlet property="collectionView" destination="TC0-58-PO9" id="Onv-Ld-JPp"/>
|
||||
<outlet property="completeImageView" destination="pQb-pb-L88" id="FAi-yN-HNc"/>
|
||||
<outlet property="contentView" destination="3s2-BV-X5i" id="mp7-Qq-drU"/>
|
||||
|
@ -336,7 +360,7 @@
|
|||
<outlet property="statusBoxHeight" destination="4qT-ha-p75" id="Ias-po-Adc"/>
|
||||
<outlet property="vehicle" destination="jDl-pu-eov" id="awM-KI-2xO"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="448" y="574.5"/>
|
||||
<point key="canvasLocation" x="448" y="574"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
|
|
23
iphone/Maps/Images.xcassets/NavigationDashboard/ic_bike_route.imageset/Contents.json
vendored
Normal file
23
iphone/Maps/Images.xcassets/NavigationDashboard/ic_bike_route.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_bike_route.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_bike_route@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_bike_route@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_bike_route.imageset/ic_bike_route.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_bike_route.imageset/ic_bike_route.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 798 B |
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_bike_route.imageset/ic_bike_route@2x.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_bike_route.imageset/ic_bike_route@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_bike_route.imageset/ic_bike_route@3x.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_bike_route.imageset/ic_bike_route@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 3 KiB |
|
@ -17,6 +17,7 @@ static NSString * const kStatAutoDownload = @"Auto download";
|
|||
static NSString * const kStatBack = @"Back";
|
||||
static NSString * const kStatBannerDescription = @"Banner description";
|
||||
static NSString * const kStatBannerTitle = @"Banner title";
|
||||
static NSString * const kStatBicycle = @"Bicycle";
|
||||
static NSString * const kStatBookmarks = @"Bookmarks";
|
||||
static NSString * const kStatBuildRoute = @"Build route";
|
||||
static NSString * const kStatButton = @"Button";
|
||||
|
|
Loading…
Add table
Reference in a new issue