forked from organicmaps/organicmaps
Merge pull request #4247 from igrechuhin/MAPSME-2235
[ios] Updated UI to support route altitude images.
This commit is contained in:
commit
16a2be0f43
32 changed files with 621 additions and 551 deletions
|
@ -4,6 +4,7 @@ typedef NS_ENUM(NSUInteger, MWMButtonColoring)
|
|||
MWMButtonColoringBlue,
|
||||
MWMButtonColoringBlack,
|
||||
MWMButtonColoringWhite,
|
||||
MWMButtonColoringWhiteText,
|
||||
MWMButtonColoringGray
|
||||
};
|
||||
|
||||
|
|
|
@ -76,6 +76,9 @@ namespace
|
|||
case MWMButtonColoringGray:
|
||||
self.tintColor = [UIColor blackDividers];
|
||||
break;
|
||||
case MWMButtonColoringWhiteText:
|
||||
self.tintColor = [UIColor whitePrimaryTextHighlighted];
|
||||
break;
|
||||
case MWMButtonColoringWhite:
|
||||
case MWMButtonColoringOther:
|
||||
break;
|
||||
|
@ -103,6 +106,7 @@ namespace
|
|||
self.tintColor = [UIColor linkBlue];
|
||||
break;
|
||||
case MWMButtonColoringWhite:
|
||||
case MWMButtonColoringWhiteText:
|
||||
case MWMButtonColoringBlue:
|
||||
case MWMButtonColoringOther:
|
||||
case MWMButtonColoringGray:
|
||||
|
@ -125,6 +129,9 @@ namespace
|
|||
case MWMButtonColoringWhite:
|
||||
self.tintColor = [UIColor white];
|
||||
break;
|
||||
case MWMButtonColoringWhiteText:
|
||||
self.tintColor = [UIColor whitePrimaryText];
|
||||
break;
|
||||
case MWMButtonColoringBlue:
|
||||
self.tintColor = [UIColor linkBlue];
|
||||
break;
|
||||
|
@ -145,6 +152,8 @@ namespace
|
|||
self.coloring = MWMButtonColoringBlack;
|
||||
else if ([coloring isEqualToString:@"MWMWhite"])
|
||||
self.coloring = MWMButtonColoringWhite;
|
||||
else if ([coloring isEqualToString:@"MWMWhiteText"])
|
||||
self.coloring = MWMButtonColoringWhiteText;
|
||||
else if ([coloring isEqualToString:@"MWMOther"])
|
||||
self.coloring = MWMButtonColoringOther;
|
||||
else if ([coloring isEqualToString:@"MWMGray"])
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#import "MWMButton.h"
|
||||
#import "UIImageView+Coloring.h"
|
||||
|
||||
#include "std/vector.hpp"
|
||||
|
||||
typedef NS_ENUM(NSInteger, MWMCircularProgressState)
|
||||
{
|
||||
typedef NS_ENUM(NSInteger, MWMCircularProgressState) {
|
||||
MWMCircularProgressStateNormal,
|
||||
MWMCircularProgressStateSelected,
|
||||
MWMCircularProgressStateProgress,
|
||||
|
@ -16,7 +16,7 @@ using MWMCircularProgressStateVec = vector<MWMCircularProgressState>;
|
|||
|
||||
@class MWMCircularProgress;
|
||||
|
||||
@protocol MWMCircularProgressProtocol <NSObject>
|
||||
@protocol MWMCircularProgressProtocol<NSObject>
|
||||
|
||||
- (void)progressButtonPressed:(nonnull MWMCircularProgress *)progress;
|
||||
|
||||
|
@ -26,13 +26,16 @@ using MWMCircularProgressStateVec = vector<MWMCircularProgressState>;
|
|||
|
||||
+ (nonnull instancetype)downloaderProgressForParentView:(nonnull UIView *)parentView;
|
||||
|
||||
@property (nonatomic) CGFloat progress;
|
||||
@property (nonatomic) MWMCircularProgressState state;
|
||||
@property (weak, nonatomic) id<MWMCircularProgressProtocol> _Nullable delegate;
|
||||
@property(nonatomic) CGFloat progress;
|
||||
@property(nonatomic) MWMCircularProgressState state;
|
||||
@property(weak, nonatomic) id<MWMCircularProgressProtocol> _Nullable delegate;
|
||||
|
||||
- (void)setSpinnerColoring:(MWMImageColoring)coloring;
|
||||
- (void)setSpinnerBackgroundColor:(nonnull UIColor *)backgroundColor;
|
||||
- (void)setImage:(nonnull UIImage *)image forStates:(MWMCircularProgressStateVec const &)states;
|
||||
- (void)setColor:(nonnull UIColor *)color forStates:(MWMCircularProgressStateVec const &)states;
|
||||
- (void)setColoring:(MWMButtonColoring)coloring forStates:(MWMCircularProgressStateVec const &)states;
|
||||
- (void)setColoring:(MWMButtonColoring)coloring
|
||||
forStates:(MWMCircularProgressStateVec const &)states;
|
||||
- (void)setInvertColor:(BOOL)invertColor;
|
||||
|
||||
- (nonnull instancetype)init __attribute__((unavailable("init is not available")));
|
||||
|
|
|
@ -3,19 +3,20 @@
|
|||
|
||||
namespace
|
||||
{
|
||||
UINib * const progressViewNib = [UINib nibWithNibName:@"MWMCircularProgress" bundle:[NSBundle mainBundle]];
|
||||
} // namespace
|
||||
UINib * const progressViewNib =
|
||||
[UINib nibWithNibName:@"MWMCircularProgress" bundle:[NSBundle mainBundle]];
|
||||
} // namespace
|
||||
|
||||
@interface MWMCircularProgressView ()
|
||||
|
||||
@property (nonatomic) BOOL suspendRefreshProgress;
|
||||
@property(nonatomic) BOOL suspendRefreshProgress;
|
||||
|
||||
@end
|
||||
|
||||
@interface MWMCircularProgress ()
|
||||
|
||||
@property (nonatomic) IBOutlet MWMCircularProgressView * rootView;
|
||||
@property (nonatomic) NSNumber * nextProgressToAnimate;
|
||||
@property(nonatomic) IBOutlet MWMCircularProgressView * rootView;
|
||||
@property(nonatomic) NSNumber * nextProgressToAnimate;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -60,11 +61,7 @@ UINib * const progressViewNib = [UINib nibWithNibName:@"MWMCircularProgress" bun
|
|||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[self.rootView removeFromSuperview];
|
||||
}
|
||||
|
||||
- (void)dealloc { [self.rootView removeFromSuperview]; }
|
||||
- (void)reset
|
||||
{
|
||||
_progress = 0.;
|
||||
|
@ -72,6 +69,16 @@ UINib * const progressViewNib = [UINib nibWithNibName:@"MWMCircularProgress" bun
|
|||
self.nextProgressToAnimate = nil;
|
||||
}
|
||||
|
||||
- (void)setSpinnerColoring:(MWMImageColoring)coloring
|
||||
{
|
||||
[self.rootView setSpinnerColoring:coloring];
|
||||
}
|
||||
|
||||
- (void)setSpinnerBackgroundColor:(nonnull UIColor *)backgroundColor
|
||||
{
|
||||
[self.rootView setSpinnerBackgroundColor:backgroundColor];
|
||||
}
|
||||
|
||||
- (void)setImage:(nonnull UIImage *)image forStates:(MWMCircularProgressStateVec const &)states
|
||||
{
|
||||
for (auto const & state : states)
|
||||
|
@ -84,17 +91,14 @@ UINib * const progressViewNib = [UINib nibWithNibName:@"MWMCircularProgress" bun
|
|||
[self.rootView setColor:color forState:state];
|
||||
}
|
||||
|
||||
- (void)setColoring:(MWMButtonColoring)coloring forStates:(MWMCircularProgressStateVec const &)states
|
||||
- (void)setColoring:(MWMButtonColoring)coloring
|
||||
forStates:(MWMCircularProgressStateVec const &)states
|
||||
{
|
||||
for (auto const & state : states)
|
||||
[self.rootView setColoring:coloring forState:state];
|
||||
}
|
||||
|
||||
- (void)setInvertColor:(BOOL)invertColor
|
||||
{
|
||||
self.rootView.isInvertColor = invertColor;
|
||||
}
|
||||
|
||||
- (void)setInvertColor:(BOOL)invertColor { self.rootView.isInvertColor = invertColor; }
|
||||
#pragma mark - Animation
|
||||
|
||||
- (void)animationDidStop:(CABasicAnimation *)anim finished:(BOOL)flag
|
||||
|
@ -108,11 +112,7 @@ UINib * const progressViewNib = [UINib nibWithNibName:@"MWMCircularProgress" bun
|
|||
|
||||
#pragma mark - Actions
|
||||
|
||||
- (IBAction)buttonTouchUpInside:(UIButton *)sender
|
||||
{
|
||||
[self.delegate progressButtonPressed:self];
|
||||
}
|
||||
|
||||
- (IBAction)buttonTouchUpInside:(UIButton *)sender { [self.delegate progressButtonPressed:self]; }
|
||||
#pragma mark - Properties
|
||||
|
||||
- (void)setProgress:(CGFloat)progress
|
||||
|
@ -130,8 +130,7 @@ UINib * const progressViewNib = [UINib nibWithNibName:@"MWMCircularProgress" bun
|
|||
}
|
||||
else
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self.rootView animateFromValue:self->_progress toValue:progress];
|
||||
self->_progress = progress;
|
||||
});
|
||||
|
@ -140,16 +139,11 @@ UINib * const progressViewNib = [UINib nibWithNibName:@"MWMCircularProgress" bun
|
|||
|
||||
- (void)setState:(MWMCircularProgressState)state
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self reset];
|
||||
self.rootView.state = state;
|
||||
});
|
||||
}
|
||||
|
||||
- (MWMCircularProgressState)state
|
||||
{
|
||||
return self.rootView.state;
|
||||
}
|
||||
|
||||
- (MWMCircularProgressState)state { return self.rootView.state; }
|
||||
@end
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
#import "MWMButton.h"
|
||||
#import "MWMCircularProgress.h"
|
||||
|
||||
@interface MWMCircularProgressView : UIView
|
||||
|
||||
@property (nonatomic, readonly) BOOL animating;
|
||||
@property(nonatomic, readonly) BOOL animating;
|
||||
|
||||
@property (nonatomic) MWMCircularProgressState state;
|
||||
@property (nonatomic) BOOL isInvertColor;
|
||||
@property(nonatomic) MWMCircularProgressState state;
|
||||
@property(nonatomic) BOOL isInvertColor;
|
||||
|
||||
- (nonnull instancetype)initWithFrame:(CGRect)frame __attribute__((unavailable("initWithFrame is not available")));
|
||||
- (nonnull instancetype)initWithFrame:(CGRect)frame
|
||||
__attribute__((unavailable("initWithFrame is not available")));
|
||||
- (nonnull instancetype)init __attribute__((unavailable("init is not available")));
|
||||
|
||||
- (void)setSpinnerColoring:(MWMImageColoring)coloring;
|
||||
- (void)setSpinnerBackgroundColor:(nonnull UIColor *)backgroundColor;
|
||||
- (void)setImage:(nonnull UIImage *)image forState:(MWMCircularProgressState)state;
|
||||
- (void)setColor:(nonnull UIColor *)color forState:(MWMCircularProgressState)state;
|
||||
- (void)setColoring:(MWMButtonColoring)coloring forState:(MWMCircularProgressState)state;
|
||||
|
|
|
@ -1,35 +1,33 @@
|
|||
#import "Common.h"
|
||||
#import "MWMCircularProgress.h"
|
||||
#import "MWMCircularProgressView.h"
|
||||
#import "Common.h"
|
||||
#import "UIColor+MapsMeColor.h"
|
||||
#import "UIImageView+Coloring.h"
|
||||
|
||||
#include "std/map.hpp"
|
||||
|
||||
static CGFloat const kLineWidth = 2.0;
|
||||
static NSString * const kAnimationKey = @"CircleAnimation";
|
||||
|
||||
static inline CGFloat angleWithProgress(CGFloat progress)
|
||||
namespace
|
||||
{
|
||||
return 2.0 * M_PI * progress - M_PI_2;
|
||||
}
|
||||
CGFloat const kLineWidth = 2.0;
|
||||
NSString * const kAnimationKey = @"CircleAnimation";
|
||||
|
||||
CGFloat angleWithProgress(CGFloat progress) { return 2.0 * M_PI * progress - M_PI_2; }
|
||||
} // namespace
|
||||
@interface MWMCircularProgressView ()
|
||||
|
||||
@property (nonatomic) CAShapeLayer * backgroundLayer;
|
||||
@property (nonatomic) CAShapeLayer * progressLayer;
|
||||
@property(nonatomic) CAShapeLayer * backgroundLayer;
|
||||
@property(nonatomic) CAShapeLayer * progressLayer;
|
||||
|
||||
@property (nonatomic, readonly) CGColorRef backgroundLayerColor;
|
||||
@property (nonatomic, readonly) CGColorRef progressLayerColor;
|
||||
@property(nonatomic) UIColor * spinnerBackgroundColor;
|
||||
@property(nonatomic, readonly) CGColorRef progressLayerColor;
|
||||
|
||||
@property (nonatomic) NSMutableDictionary * images;
|
||||
@property (nonatomic) NSMutableDictionary * colors;
|
||||
@property(nonatomic) NSMutableDictionary * images;
|
||||
@property(nonatomic) NSMutableDictionary * colors;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet MWMCircularProgress * owner;
|
||||
@property (weak, nonatomic) IBOutlet UIImageView * spinner;
|
||||
@property (weak, nonatomic) IBOutlet MWMButton * button;
|
||||
@property(weak, nonatomic) IBOutlet MWMCircularProgress * owner;
|
||||
@property(weak, nonatomic) IBOutlet UIImageView * spinner;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton * button;
|
||||
|
||||
@property (nonatomic) BOOL suspendRefreshProgress;
|
||||
@property(nonatomic) BOOL suspendRefreshProgress;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -59,9 +57,11 @@ static inline CGFloat angleWithProgress(CGFloat progress)
|
|||
- (void)setupColors
|
||||
{
|
||||
self.colors = [NSMutableDictionary dictionary];
|
||||
self.spinner.mwm_coloring = MWMImageColoringGray;
|
||||
UIColor * progressColor = [UIColor linkBlue];
|
||||
UIColor * progressColor = [_spinnerBackgroundColor isEqual:[UIColor clearColor]]
|
||||
? [UIColor whiteColor]
|
||||
: [UIColor linkBlue];
|
||||
UIColor * clearColor = [UIColor clearColor];
|
||||
[self setSpinnerColoring:MWMImageColoringGray];
|
||||
[self setColor:clearColor forState:MWMCircularProgressStateNormal];
|
||||
[self setColor:clearColor forState:MWMCircularProgressStateSelected];
|
||||
[self setColor:progressColor forState:MWMCircularProgressStateProgress];
|
||||
|
@ -97,6 +97,7 @@ static inline CGFloat angleWithProgress(CGFloat progress)
|
|||
[self.layer addSublayer:self.progressLayer];
|
||||
}
|
||||
|
||||
- (void)setSpinnerColoring:(MWMImageColoring)coloring { self.spinner.mwm_coloring = coloring; }
|
||||
- (void)setImage:(nonnull UIImage *)image forState:(MWMCircularProgressState)state
|
||||
{
|
||||
self.images[@(state)] = image;
|
||||
|
@ -123,7 +124,7 @@ static inline CGFloat angleWithProgress(CGFloat progress)
|
|||
return;
|
||||
self.backgroundLayer.fillColor = self.progressLayer.fillColor = UIColor.clearColor.CGColor;
|
||||
self.backgroundLayer.lineWidth = self.progressLayer.lineWidth = kLineWidth;
|
||||
self.backgroundLayer.strokeColor = self.backgroundLayerColor;
|
||||
self.backgroundLayer.strokeColor = self.spinnerBackgroundColor.CGColor;
|
||||
self.progressLayer.strokeColor = self.progressLayerColor;
|
||||
CGRect rect = CGRectInset(self.bounds, kLineWidth, kLineWidth);
|
||||
self.backgroundLayer.path = [UIBezierPath bezierPathWithOvalInRect:rect].CGPath;
|
||||
|
@ -135,7 +136,8 @@ static inline CGFloat angleWithProgress(CGFloat progress)
|
|||
{
|
||||
if (progress > 0.0)
|
||||
{
|
||||
self.state = progress < 1.0 ? MWMCircularProgressStateProgress : MWMCircularProgressStateCompleted;
|
||||
self.state =
|
||||
progress < 1.0 ? MWMCircularProgressStateProgress : MWMCircularProgressStateCompleted;
|
||||
[self stopSpinner];
|
||||
}
|
||||
CGFloat const outerRadius = self.width / 2.0;
|
||||
|
@ -160,9 +162,14 @@ static inline CGFloat angleWithProgress(CGFloat progress)
|
|||
}
|
||||
NSUInteger const animationImagesCount = 12;
|
||||
NSMutableArray * animationImages = [NSMutableArray arrayWithCapacity:animationImagesCount];
|
||||
NSString * postfix = ([UIColor isNightMode] && !self.isInvertColor) || (![UIColor isNightMode] && self.isInvertColor) ? @"dark" : @"light";
|
||||
NSString * postfix = ([UIColor isNightMode] && !self.isInvertColor) ||
|
||||
(![UIColor isNightMode] && self.isInvertColor) ||
|
||||
_spinnerBackgroundColor
|
||||
? @"dark"
|
||||
: @"light";
|
||||
for (NSUInteger i = 0; i < animationImagesCount; ++i)
|
||||
animationImages[i] = [UIImage imageNamed:[NSString stringWithFormat:@"Spinner_%@_%@", @(i+1), postfix]];
|
||||
animationImages[i] =
|
||||
[UIImage imageNamed:[NSString stringWithFormat:@"Spinner_%@_%@", @(i + 1), postfix]];
|
||||
|
||||
self.spinner.animationDuration = 0.8;
|
||||
self.spinner.animationImages = animationImages;
|
||||
|
@ -188,7 +195,8 @@ static inline CGFloat angleWithProgress(CGFloat progress)
|
|||
animation.repeatCount = 1;
|
||||
animation.fromValue = @(fromValue / toValue);
|
||||
animation.toValue = @1;
|
||||
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
|
||||
animation.timingFunction =
|
||||
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
|
||||
animation.delegate = self.owner;
|
||||
[self.progressLayer addAnimation:animation forKey:kAnimationKey];
|
||||
}
|
||||
|
@ -207,14 +215,14 @@ static inline CGFloat angleWithProgress(CGFloat progress)
|
|||
[self refreshProgress];
|
||||
}
|
||||
|
||||
- (CGColorRef)backgroundLayerColor
|
||||
- (UIColor *)spinnerBackgroundColor
|
||||
{
|
||||
if (_spinnerBackgroundColor)
|
||||
return _spinnerBackgroundColor;
|
||||
switch (self.state)
|
||||
{
|
||||
case MWMCircularProgressStateProgress:
|
||||
return [UIColor pressBackground].CGColor;
|
||||
default:
|
||||
return [UIColor clearColor].CGColor;
|
||||
case MWMCircularProgressStateProgress: return [UIColor pressBackground];
|
||||
default: return [UIColor clearColor];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -232,11 +240,7 @@ static inline CGFloat angleWithProgress(CGFloat progress)
|
|||
[self refreshProgress];
|
||||
}
|
||||
|
||||
- (BOOL)animating
|
||||
{
|
||||
return [self.progressLayer animationForKey:kAnimationKey] != nil;
|
||||
}
|
||||
|
||||
- (BOOL)animating { return [self.progressLayer animationForKey:kAnimationKey] != nil; }
|
||||
- (void)setSuspendRefreshProgress:(BOOL)suspendRefreshProgress
|
||||
{
|
||||
_suspendRefreshProgress = suspendRefreshProgress;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#import "EAGLView.h"
|
||||
#import "MWMBottomMenuViewController.h"
|
||||
#import "MWMButton.h"
|
||||
#import "MWMRouter.h"
|
||||
#import "MapsAppDelegate.h"
|
||||
#import "UIButton+RuntimeAttributes.h"
|
||||
#import "UIColor+MapsMeColor.h"
|
||||
|
@ -17,6 +18,8 @@ namespace
|
|||
{
|
||||
CGFloat constexpr kAdditionalHeight = 64;
|
||||
CGFloat constexpr kDefaultMainButtonsHeight = 48;
|
||||
CGFloat constexpr kBicyclePlanningMainButtonsHeightLandscape = 62;
|
||||
CGFloat constexpr kBicyclePlanningMainButtonsHeightRegular = 94;
|
||||
CGFloat constexpr kDefaultMenuButtonWidth = 60;
|
||||
CGFloat constexpr kRoutingAdditionalButtonsOffsetCompact = 0;
|
||||
CGFloat constexpr kRoutingAdditionalButtonsOffsetRegular = 48;
|
||||
|
@ -30,6 +33,8 @@ CGFloat constexpr kSpeedDistanceOffsetRegular = 16;
|
|||
CGFloat constexpr kSpeedDistanceWidthCompact = 72;
|
||||
CGFloat constexpr kSpeedDistanceWidthLandscape = 128;
|
||||
CGFloat constexpr kSpeedDistanceWidthRegular = 88;
|
||||
CGFloat constexpr kGoButtonWidthLandscape = 128;
|
||||
CGFloat constexpr kGoButtonWidthRegular = 96;
|
||||
CGFloat constexpr kPageControlTopOffsetRegular = 0;
|
||||
CGFloat constexpr kPageControlTopOffsetLandscape = -8;
|
||||
CGFloat constexpr kPageControlScaleLandscape = 0.7;
|
||||
|
@ -76,12 +81,20 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
@property(weak, nonatomic) IBOutlet UILabel * distanceLegendLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel * speedWithLegendLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel * distanceWithLegendLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel * estimateLabel;
|
||||
@property(weak, nonatomic) IBOutlet UIView * heightProfileContainer;
|
||||
@property(weak, nonatomic) IBOutlet UIImageView * heightProfileImage;
|
||||
|
||||
@property(weak, nonatomic) IBOutlet UIPageControl * pageControl;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * pageControlTopOffset;
|
||||
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * speedDistanceWidth;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * timeWidth;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * goButtonWidth;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * estimateLabelTopOffset;
|
||||
@property(nonatomic) IBOutletCollection(NSLayoutConstraint)
|
||||
NSArray * heightProfileContainerVerticalOrientation;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * routingViewManuButtonPffset;
|
||||
|
||||
@property(nonatomic) CGFloat layoutDuration;
|
||||
|
||||
|
@ -97,6 +110,8 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
self.additionalButtons.hidden = YES;
|
||||
self.downloadBadge.hidden = YES;
|
||||
self.goButton.hidden = YES;
|
||||
self.estimateLabel.hidden = YES;
|
||||
self.heightProfileContainer.hidden = YES;
|
||||
self.toggleInfoButton.hidden = YES;
|
||||
self.speedView.hidden = YES;
|
||||
self.timeView.hidden = YES;
|
||||
|
@ -137,6 +152,7 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
}];
|
||||
((EAGLView *)self.superview).widgetsManager.bottomBound = self.mainButtonsHeight.constant;
|
||||
[self updateFonts];
|
||||
[self updateHeightProfile];
|
||||
[super layoutSubviews];
|
||||
}
|
||||
|
||||
|
@ -147,6 +163,7 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
case MWMBottomMenuStateHidden: break;
|
||||
case MWMBottomMenuStateInactive:
|
||||
self.backgroundColor = [UIColor menuBackground];
|
||||
self.menuButton.alpha = 1.0;
|
||||
self.bookmarksButton.alpha = 1.0;
|
||||
self.downloadBadge.alpha = 1.0;
|
||||
self.routingView.alpha = 0.0;
|
||||
|
@ -156,6 +173,7 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
break;
|
||||
case MWMBottomMenuStateActive:
|
||||
self.backgroundColor = [UIColor white];
|
||||
self.menuButton.alpha = 1.0;
|
||||
self.bookmarksButton.alpha = 1.0;
|
||||
self.downloadBadge.alpha = 0.0;
|
||||
self.routingView.alpha = 0.0;
|
||||
|
@ -171,6 +189,7 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
self.p2pButton.alpha = 0.0;
|
||||
self.searchButton.alpha = 0.0;
|
||||
}
|
||||
self.menuButton.alpha = 1.0;
|
||||
self.downloadBadge.alpha = 0.0;
|
||||
self.routingView.alpha = 0.0;
|
||||
self.routingAdditionalView.alpha = 0.0;
|
||||
|
@ -178,10 +197,13 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
case MWMBottomMenuStatePlanning:
|
||||
case MWMBottomMenuStateGo:
|
||||
self.backgroundColor = [UIColor white];
|
||||
self.menuButton.alpha = 0.0;
|
||||
self.downloadBadge.alpha = 1.0;
|
||||
self.bookmarksButton.alpha = 0.0;
|
||||
self.routingView.alpha = 1.0;
|
||||
self.goButton.alpha = 1.0;
|
||||
self.estimateLabel.alpha = 1.0;
|
||||
self.heightProfileContainer.alpha = 1.0;
|
||||
self.speedView.alpha = 0.0;
|
||||
self.timeView.alpha = 0.0;
|
||||
self.distanceView.alpha = 0.0;
|
||||
|
@ -193,10 +215,13 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
case MWMBottomMenuStateRouting:
|
||||
case MWMBottomMenuStateRoutingExpanded:
|
||||
self.backgroundColor = [UIColor white];
|
||||
self.menuButton.alpha = 1.0;
|
||||
self.downloadBadge.alpha = 0.0;
|
||||
self.bookmarksButton.alpha = 0.0;
|
||||
self.routingView.alpha = 1.0;
|
||||
self.goButton.alpha = 0.0;
|
||||
self.estimateLabel.alpha = 0.0;
|
||||
self.heightProfileContainer.alpha = 0.0;
|
||||
self.speedView.alpha = 1.0;
|
||||
self.timeView.alpha = 1.0;
|
||||
self.distanceView.alpha = 1.0;
|
||||
|
@ -222,6 +247,18 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
self.distanceLegendLabel.font = legendFont;
|
||||
}
|
||||
|
||||
- (void)updateHeightProfile
|
||||
{
|
||||
if (self.heightProfileContainer.hidden || ![MWMRouter hasRouteAltitude])
|
||||
return;
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[[MWMRouter router] routeAltitudeImageForSize:self.heightProfileImage.frame.size
|
||||
completion:^(UIImage * image) {
|
||||
self.heightProfileImage.image = image;
|
||||
}];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)updateVisibility
|
||||
{
|
||||
switch (self.state)
|
||||
|
@ -250,6 +287,7 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
break;
|
||||
case MWMBottomMenuStatePlanning:
|
||||
case MWMBottomMenuStateGo:
|
||||
self.menuButton.hidden = YES;
|
||||
self.bookmarksButton.hidden = YES;
|
||||
self.p2pButton.hidden = YES;
|
||||
self.searchButton.hidden = YES;
|
||||
|
@ -272,13 +310,36 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
self.additionalButtonsHeight.constant = 0.0;
|
||||
self.menuButtonWidth.constant = kDefaultMenuButtonWidth;
|
||||
self.mainButtonsHeight.constant = kDefaultMainButtonsHeight;
|
||||
self.routingViewManuButtonPffset.priority = UILayoutPriorityDefaultHigh;
|
||||
self.routingAdditionalViewHeight.constant = 0.0;
|
||||
switch (self.state)
|
||||
{
|
||||
case MWMBottomMenuStateHidden: self.minY = self.superview.height; return;
|
||||
case MWMBottomMenuStateInactive:
|
||||
case MWMBottomMenuStateInactive: break;
|
||||
case MWMBottomMenuStatePlanning:
|
||||
case MWMBottomMenuStateGo: break;
|
||||
[self layoutPlanningGeometry];
|
||||
self.mainButtonsHeight.constant = 0.0;
|
||||
break;
|
||||
case MWMBottomMenuStateGo:
|
||||
{
|
||||
[self layoutPlanningGeometry];
|
||||
if ([MWMRouter hasRouteAltitude])
|
||||
{
|
||||
BOOL const isLandscape = self.width > self.layoutThreshold;
|
||||
if (isLandscape)
|
||||
{
|
||||
self.mainButtonsHeight.constant = kBicyclePlanningMainButtonsHeightLandscape;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.estimateLabelTopOffset.priority = UILayoutPriorityDefaultHigh;
|
||||
for (NSLayoutConstraint * constraint in self.heightProfileContainerVerticalOrientation)
|
||||
constraint.priority = UILayoutPriorityDefaultHigh;
|
||||
self.mainButtonsHeight.constant = kBicyclePlanningMainButtonsHeightRegular;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MWMBottomMenuStateCompact:
|
||||
if (self.restoreState == MWMBottomMenuStateRouting && !IPAD &&
|
||||
UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
|
||||
|
@ -314,6 +375,16 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
self.frame = {{self.superview.width - width, self.superview.height - height}, {width, height}};
|
||||
}
|
||||
|
||||
- (void)layoutPlanningGeometry
|
||||
{
|
||||
BOOL const isLandscape = self.width > self.layoutThreshold;
|
||||
self.estimateLabelTopOffset.priority = UILayoutPriorityDefaultLow;
|
||||
self.routingViewManuButtonPffset.priority = UILayoutPriorityDefaultLow;
|
||||
for (NSLayoutConstraint * constraint in self.heightProfileContainerVerticalOrientation)
|
||||
constraint.priority = UILayoutPriorityDefaultLow;
|
||||
self.goButtonWidth.constant = isLandscape ? kGoButtonWidthLandscape : kGoButtonWidthRegular;
|
||||
}
|
||||
|
||||
- (void)layoutRoutingGeometry
|
||||
{
|
||||
auto layoutAdditionalButtonsOffset = ^(CGFloat offset) {
|
||||
|
@ -513,6 +584,7 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
_leftBound = 0.0;
|
||||
[self updateBadge];
|
||||
self.p2pButton.hidden = self.searchButton.hidden = self.bookmarksButton.hidden = NO;
|
||||
self.menuButton.hidden = NO;
|
||||
self.layoutDuration =
|
||||
(_state == MWMBottomMenuStateCompact && !IPAD) ? 0.0 : kDefaultAnimationDuration;
|
||||
break;
|
||||
|
@ -520,6 +592,7 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
case MWMBottomMenuStateActive:
|
||||
self.restoreState = _state;
|
||||
[self updateMenuButtonFromState:_state toState:state];
|
||||
self.menuButton.hidden = NO;
|
||||
self.additionalButtons.hidden = NO;
|
||||
self.bookmarksButton.hidden = NO;
|
||||
self.p2pButton.hidden = NO;
|
||||
|
@ -529,10 +602,13 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
if (_state == MWMBottomMenuStateGo)
|
||||
self.restoreState = _state;
|
||||
self.layoutDuration = IPAD ? kDefaultAnimationDuration : 0.0;
|
||||
self.menuButton.hidden = NO;
|
||||
break;
|
||||
case MWMBottomMenuStatePlanning:
|
||||
self.goButton.enabled = NO;
|
||||
self.goButton.hidden = NO;
|
||||
self.estimateLabel.hidden = YES;
|
||||
self.heightProfileContainer.hidden = YES;
|
||||
self.toggleInfoButton.hidden = YES;
|
||||
self.speedView.hidden = YES;
|
||||
self.timeView.hidden = YES;
|
||||
|
@ -544,6 +620,8 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
case MWMBottomMenuStateGo:
|
||||
self.goButton.enabled = YES;
|
||||
self.goButton.hidden = NO;
|
||||
self.estimateLabel.hidden = NO;
|
||||
self.heightProfileContainer.hidden = ![MWMRouter hasRouteAltitude];
|
||||
self.toggleInfoButton.hidden = YES;
|
||||
self.speedView.hidden = YES;
|
||||
self.timeView.hidden = YES;
|
||||
|
@ -553,7 +631,10 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
self.routingAdditionalView.hidden = YES;
|
||||
break;
|
||||
case MWMBottomMenuStateRouting:
|
||||
self.menuButton.hidden = NO;
|
||||
self.goButton.hidden = YES;
|
||||
self.estimateLabel.hidden = YES;
|
||||
self.heightProfileContainer.hidden = YES;
|
||||
self.toggleInfoButton.hidden = NO;
|
||||
self.speedView.hidden = NO;
|
||||
self.timeView.hidden = NO;
|
||||
|
@ -563,7 +644,10 @@ CGFloat constexpr kTimeWidthRegular = 128;
|
|||
self.routingAdditionalView.hidden = YES;
|
||||
break;
|
||||
case MWMBottomMenuStateRoutingExpanded:
|
||||
self.menuButton.hidden = NO;
|
||||
self.goButton.hidden = YES;
|
||||
self.estimateLabel.hidden = YES;
|
||||
self.heightProfileContainer.hidden = YES;
|
||||
self.toggleInfoButton.hidden = NO;
|
||||
self.speedView.hidden = NO;
|
||||
self.timeView.hidden = NO;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
@property(nonatomic) MWMBottomMenuState state;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton * p2pButton;
|
||||
@property(nonatomic) CGFloat leftBound;
|
||||
@property(nonatomic, readonly) CGFloat mainButtonsHeight;
|
||||
|
||||
- (instancetype)initWithParentController:(MapViewController *)controller
|
||||
delegate:(id<MWMBottomMenuControllerProtocol>)delegate;
|
||||
|
|
|
@ -80,6 +80,7 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) {
|
|||
@property(weak, nonatomic) IBOutlet UILabel * speedWithLegendLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel * distanceWithLegendLabel;
|
||||
@property(weak, nonatomic) IBOutlet UIPageControl * routingInfoPageControl;
|
||||
@property(weak, nonatomic) IBOutlet UILabel * estimateLabel;
|
||||
|
||||
@property(weak, nonatomic) IBOutlet UIView * progressView;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * routingProgress;
|
||||
|
@ -149,6 +150,7 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) {
|
|||
NSFontAttributeName : [UIFont bold14]
|
||||
};
|
||||
|
||||
self.estimateLabel.attributedText = info.estimate;
|
||||
self.navigationInfo = info;
|
||||
if (self.routingInfoPageControl.currentPage == 0)
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
|
||||
|
@ -13,6 +13,7 @@
|
|||
<outlet property="distanceLabel" destination="LBZ-kD-25J" id="mBJ-kK-1Af"/>
|
||||
<outlet property="distanceLegendLabel" destination="5ad-tg-al9" id="KFC-sq-rNA"/>
|
||||
<outlet property="distanceWithLegendLabel" destination="LOZ-cm-r9V" id="H0T-Dh-0Q0"/>
|
||||
<outlet property="estimateLabel" destination="EQy-vz-gyi" id="gJq-I7-TaC"/>
|
||||
<outlet property="p2pButton" destination="xQ0-ZK-UXk" id="LdY-Rt-Dh4"/>
|
||||
<outlet property="progressView" destination="qvF-jY-5Gi" id="vS9-Cr-K1S"/>
|
||||
<outlet property="routingInfoPageControl" destination="7hO-Gk-BGJ" id="gDI-Bk-PCb"/>
|
||||
|
@ -79,14 +80,34 @@
|
|||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="c75-ZF-hKn">
|
||||
<rect key="frame" x="0.0" y="0.0" width="260" height="48"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="48"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="33 мин • 7.0 км" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EQy-vz-gyi">
|
||||
<rect key="frame" x="16" y="14" width="122" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Xc-Kl-hAm">
|
||||
<rect key="frame" x="154" y="12" width="54" height="24"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="150" verticalHuggingPriority="150" horizontalCompressionResistancePriority="240" verticalCompressionResistancePriority="240" translatesAutoresizingMaskIntoConstraints="NO" id="ViI-p6-hUf">
|
||||
<rect key="frame" x="0.0" y="0.0" width="54" height="24"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="ViI-p6-hUf" firstAttribute="leading" secondItem="4Xc-Kl-hAm" secondAttribute="leading" id="4Rl-3k-ej1"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ViI-p6-hUf" secondAttribute="bottom" id="YtA-RO-fmc"/>
|
||||
<constraint firstItem="ViI-p6-hUf" firstAttribute="top" secondItem="4Xc-Kl-hAm" secondAttribute="top" id="gHG-Ij-huG"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ViI-p6-hUf" secondAttribute="trailing" id="tnv-Fq-At9"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button hidden="YES" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pLD-sZ-ejH" userLabel="Go" customClass="MWMStartButton">
|
||||
<rect key="frame" x="100" y="8" width="120" height="32"/>
|
||||
<rect key="frame" x="224" y="0.0" width="96" height="48"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="goButton"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" priority="750" constant="120" id="mDy-2S-lW3"/>
|
||||
<constraint firstAttribute="height" priority="750" constant="32" id="pPq-7v-L5J"/>
|
||||
<constraint firstAttribute="width" constant="96" id="ZHw-Ha-INX"/>
|
||||
</constraints>
|
||||
<inset key="contentEdgeInsets" minX="8" minY="0.0" maxX="8" maxY="0.0"/>
|
||||
<state key="normal" title="Start"/>
|
||||
|
@ -95,9 +116,6 @@
|
|||
</state>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="4"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="p2p_start"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="white"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="linkBlue"/>
|
||||
|
@ -148,7 +166,7 @@
|
|||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Z68-6z-5Ph">
|
||||
<rect key="frame" x="74" y="0.0" width="112" height="48"/>
|
||||
<rect key="frame" x="104" y="0.0" width="112" height="48"/>
|
||||
<subviews>
|
||||
<pageControl opaque="NO" contentMode="scaleToFill" verticalCompressionResistancePriority="100" contentHorizontalAlignment="center" contentVerticalAlignment="center" numberOfPages="2" translatesAutoresizingMaskIntoConstraints="NO" id="7hO-Gk-BGJ">
|
||||
<rect key="frame" x="44" y="4" width="23" height="13"/>
|
||||
|
@ -176,7 +194,7 @@
|
|||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mab-rl-ueg">
|
||||
<rect key="frame" x="188" y="0.0" width="72" height="48"/>
|
||||
<rect key="frame" x="248" y="0.0" width="72" height="48"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LOZ-cm-r9V">
|
||||
<rect key="frame" x="36" y="4" width="0.0" height="0.0"/>
|
||||
|
@ -237,7 +255,7 @@
|
|||
</constraints>
|
||||
</view>
|
||||
<button contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3oJ-Rv-JS7" userLabel="ToggleInfo">
|
||||
<rect key="frame" x="0.0" y="0.0" width="260" height="48"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="48"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<connections>
|
||||
<action selector="toggleInfoTouchUpInside" destination="-1" eventType="touchUpInside" id="kuP-Ue-Syq"/>
|
||||
|
@ -252,16 +270,28 @@
|
|||
<constraint firstItem="5ad-tg-al9" firstAttribute="centerY" secondItem="7hO-Gk-BGJ" secondAttribute="centerY" priority="500" id="6Q9-vO-V4W"/>
|
||||
<constraint firstItem="Z68-6z-5Ph" firstAttribute="centerX" secondItem="c75-ZF-hKn" secondAttribute="centerX" id="AcE-Sk-hhd"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Z68-6z-5Ph" secondAttribute="bottom" id="BlR-TS-xJa"/>
|
||||
<constraint firstAttribute="trailing" secondItem="pLD-sZ-ejH" secondAttribute="trailing" id="E7k-Dh-qE5"/>
|
||||
<constraint firstAttribute="bottom" secondItem="4Xc-Kl-hAm" secondAttribute="bottom" constant="12" id="IBg-Su-7fT"/>
|
||||
<constraint firstAttribute="bottom" secondItem="3oJ-Rv-JS7" secondAttribute="bottom" id="QSK-8y-lMm"/>
|
||||
<constraint firstAttribute="bottom" secondItem="mab-rl-ueg" secondAttribute="bottom" id="RM8-hF-4fE"/>
|
||||
<constraint firstItem="mab-rl-ueg" firstAttribute="width" secondItem="UhW-en-7qq" secondAttribute="width" id="RsJ-Zl-Sbw"/>
|
||||
<constraint firstItem="4Xc-Kl-hAm" firstAttribute="leading" secondItem="EQy-vz-gyi" secondAttribute="trailing" priority="500" constant="16" id="S6n-p8-BQM"/>
|
||||
<constraint firstAttribute="bottom" secondItem="pLD-sZ-ejH" secondAttribute="bottom" id="SWA-4d-AZp"/>
|
||||
<constraint firstItem="UhW-en-7qq" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="SX8-Al-kd6"/>
|
||||
<constraint firstItem="pLD-sZ-ejH" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="XO3-hI-QYl"/>
|
||||
<constraint firstItem="3oJ-Rv-JS7" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="leading" id="Y2N-5d-l3x"/>
|
||||
<constraint firstItem="UhW-en-7qq" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="leading" id="ZCC-xJ-5Vg"/>
|
||||
<constraint firstItem="4Xc-Kl-hAm" firstAttribute="top" secondItem="EQy-vz-gyi" secondAttribute="bottom" priority="250" constant="8" id="ZCb-We-WNy"/>
|
||||
<constraint firstItem="EQy-vz-gyi" firstAttribute="centerY" secondItem="c75-ZF-hKn" secondAttribute="centerY" priority="500" id="ZKG-5z-sra"/>
|
||||
<constraint firstItem="Z68-6z-5Ph" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="cpY-Wy-lyr"/>
|
||||
<constraint firstItem="EQy-vz-gyi" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="leading" constant="16" id="fIE-wa-hE8"/>
|
||||
<constraint firstItem="EQy-vz-gyi" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" priority="250" constant="14" id="fOa-qL-A5d"/>
|
||||
<constraint firstItem="pLD-sZ-ejH" firstAttribute="leading" secondItem="4Xc-Kl-hAm" secondAttribute="trailing" constant="16" id="h3c-E6-aX6"/>
|
||||
<constraint firstItem="P9v-a6-EaA" firstAttribute="centerY" secondItem="7hO-Gk-BGJ" secondAttribute="centerY" priority="500" id="hEB-H2-4WJ"/>
|
||||
<constraint firstItem="4Xc-Kl-hAm" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="leading" priority="250" constant="12" id="mac-YL-Cyx"/>
|
||||
<constraint firstItem="3oJ-Rv-JS7" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" id="plc-KQ-Bxg"/>
|
||||
<constraint firstAttribute="bottom" secondItem="UhW-en-7qq" secondAttribute="bottom" id="tF2-H2-VBe"/>
|
||||
<constraint firstItem="4Xc-Kl-hAm" firstAttribute="top" secondItem="c75-ZF-hKn" secondAttribute="top" priority="500" constant="12" id="vt3-dc-Ngf"/>
|
||||
<constraint firstAttribute="trailing" secondItem="mab-rl-ueg" secondAttribute="trailing" id="w4c-fR-znA"/>
|
||||
</constraints>
|
||||
</view>
|
||||
|
@ -298,20 +328,19 @@
|
|||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="qvF-jY-5Gi" firstAttribute="leading" secondItem="kbJ-If-gUR" secondAttribute="leading" id="4FM-cc-hga"/>
|
||||
<constraint firstItem="YLY-C4-SBu" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="trailing" priority="250" id="4e2-YH-he6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="YLY-C4-SBu" secondAttribute="trailing" identifier="menuTrailing" id="Ade-MQ-41P"/>
|
||||
<constraint firstItem="c75-ZF-hKn" firstAttribute="leading" secondItem="kbJ-If-gUR" secondAttribute="leading" id="B1y-C3-Q6g"/>
|
||||
<constraint firstItem="WLn-2O-Ivv" firstAttribute="centerY" secondItem="YLY-C4-SBu" secondAttribute="centerY" constant="-8" id="CjF-ja-g56"/>
|
||||
<constraint firstItem="YLY-C4-SBu" firstAttribute="leading" secondItem="c75-ZF-hKn" secondAttribute="trailing" id="H9a-7s-eqN"/>
|
||||
<constraint firstItem="YLY-C4-SBu" firstAttribute="centerY" secondItem="kbJ-If-gUR" secondAttribute="centerY" id="Hly-tK-GHj"/>
|
||||
<constraint firstAttribute="height" constant="48" id="HtR-j8-Qpc"/>
|
||||
<constraint firstItem="IzQ-aQ-aPH" firstAttribute="height" secondItem="kbJ-If-gUR" secondAttribute="height" id="JFI-3b-72w"/>
|
||||
<constraint firstItem="pLD-sZ-ejH" firstAttribute="centerY" secondItem="kbJ-If-gUR" secondAttribute="centerY" id="MRS-a0-NHj"/>
|
||||
<constraint firstAttribute="trailing" secondItem="c75-ZF-hKn" secondAttribute="trailing" priority="500" id="L0y-Zo-LJu"/>
|
||||
<constraint firstItem="c75-ZF-hKn" firstAttribute="top" secondItem="kbJ-If-gUR" secondAttribute="top" id="OyE-mG-Zi1"/>
|
||||
<constraint firstItem="xQ0-ZK-UXk" firstAttribute="centerX" secondItem="kbJ-If-gUR" secondAttribute="centerX" multiplier="22:30" id="RMv-Kx-9s6"/>
|
||||
<constraint firstItem="qVh-dm-DDH" firstAttribute="centerY" secondItem="kbJ-If-gUR" secondAttribute="centerY" id="Rgu-Ok-h30"/>
|
||||
<constraint firstItem="xQ0-ZK-UXk" firstAttribute="height" secondItem="kbJ-If-gUR" secondAttribute="height" id="WRQ-HY-d1P"/>
|
||||
<constraint firstItem="qVh-dm-DDH" firstAttribute="centerX" secondItem="kbJ-If-gUR" secondAttribute="centerX" multiplier="385:300" id="Wda-vl-hB4"/>
|
||||
<constraint firstItem="pLD-sZ-ejH" firstAttribute="centerX" secondItem="kbJ-If-gUR" secondAttribute="centerX" id="c08-Te-hPQ"/>
|
||||
<constraint firstItem="qVh-dm-DDH" firstAttribute="height" secondItem="kbJ-If-gUR" secondAttribute="height" id="d2K-hv-PmH"/>
|
||||
<constraint firstAttribute="bottom" secondItem="c75-ZF-hKn" secondAttribute="bottom" id="f6U-e7-mij"/>
|
||||
<constraint firstItem="WLn-2O-Ivv" firstAttribute="centerX" secondItem="YLY-C4-SBu" secondAttribute="centerX" constant="8" id="lUQ-gw-psA"/>
|
||||
|
@ -441,7 +470,12 @@
|
|||
<outlet property="distanceView" destination="mab-rl-ueg" id="wnH-29-JDU"/>
|
||||
<outlet property="distanceWithLegendLabel" destination="LOZ-cm-r9V" id="Cdx-SJ-kAY"/>
|
||||
<outlet property="downloadBadge" destination="WLn-2O-Ivv" id="f9u-k6-l9u"/>
|
||||
<outlet property="estimateLabel" destination="EQy-vz-gyi" id="lVV-FW-8AJ"/>
|
||||
<outlet property="estimateLabelTopOffset" destination="fOa-qL-A5d" id="7eJ-Go-MBm"/>
|
||||
<outlet property="goButton" destination="pLD-sZ-ejH" id="Txw-4S-mwR"/>
|
||||
<outlet property="goButtonWidth" destination="ZHw-Ha-INX" id="H3K-lh-Iyx"/>
|
||||
<outlet property="heightProfileContainer" destination="4Xc-Kl-hAm" id="ovY-lT-vrD"/>
|
||||
<outlet property="heightProfileImage" destination="ViI-p6-hUf" id="8b8-rT-Hpc"/>
|
||||
<outlet property="mainButtons" destination="kbJ-If-gUR" id="1sk-bi-6xl"/>
|
||||
<outlet property="mainButtonsHeight" destination="HtR-j8-Qpc" id="eF8-KH-F9n"/>
|
||||
<outlet property="menuButton" destination="YLY-C4-SBu" id="A5G-Bc-IlQ"/>
|
||||
|
@ -454,6 +488,7 @@
|
|||
<outlet property="routingAdditionalView" destination="Z8y-bh-6dN" id="mI8-4T-Rbi"/>
|
||||
<outlet property="routingAdditionalViewHeight" destination="7YS-h4-f40" id="24L-Xv-Z9V"/>
|
||||
<outlet property="routingView" destination="c75-ZF-hKn" id="OdE-md-8FJ"/>
|
||||
<outlet property="routingViewManuButtonPffset" destination="4e2-YH-he6" id="nie-j7-P27"/>
|
||||
<outlet property="searchButton" destination="IzQ-aQ-aPH" id="2dy-QI-T39"/>
|
||||
<outlet property="separator" destination="nYy-JN-hGA" id="z8u-tH-WGu"/>
|
||||
<outlet property="separatorHeight" destination="Kgm-bO-O6Q" id="RGg-dL-lKg"/>
|
||||
|
@ -470,6 +505,8 @@
|
|||
<outletCollection property="routingAdditionalButtonsOffset" destination="1Zb-qW-cfl" id="gnD-xP-k5z"/>
|
||||
<outletCollection property="speedDistanceOffset" destination="ZCC-xJ-5Vg" id="IfJ-Mb-OUw"/>
|
||||
<outletCollection property="speedDistanceOffset" destination="w4c-fR-znA" id="q0p-e4-syx"/>
|
||||
<outletCollection property="heightProfileContainerVerticalOrientation" destination="mac-YL-Cyx" id="L7C-H0-A6R"/>
|
||||
<outletCollection property="heightProfileContainerVerticalOrientation" destination="ZCb-We-WNy" id="uzJ-Eb-Epe"/>
|
||||
</connections>
|
||||
</view>
|
||||
</objects>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
#import "MWMSideButtonsView.h"
|
||||
#import "Common.h"
|
||||
#import "MWMButton.h"
|
||||
#import "MWMMapViewControlsCommon.h"
|
||||
#import "MWMSideButtonsView.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
CGFloat constexpr kZoomOutToLayoutPortraitOffset = 52;
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
@interface MWMSideButtonsView()
|
||||
@interface MWMSideButtonsView ()
|
||||
|
||||
@property (nonatomic) CGRect defaultBounds;
|
||||
@property(nonatomic) CGRect defaultBounds;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet MWMButton * zoomIn;
|
||||
@property (weak, nonatomic) IBOutlet MWMButton * zoomOut;
|
||||
@property (weak, nonatomic) IBOutlet MWMButton * location;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton * zoomIn;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton * zoomOut;
|
||||
@property(weak, nonatomic) IBOutlet MWMButton * location;
|
||||
|
||||
@property (nonatomic) BOOL isPortrait;
|
||||
@property(nonatomic) BOOL isPortrait;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -57,27 +57,23 @@ CGFloat constexpr kZoomOutToLayoutPortraitOffset = 52;
|
|||
self.maxX = self.superview.width - kViewControlsOffsetToBounds;
|
||||
}
|
||||
|
||||
- (void)layoutYPosition
|
||||
{
|
||||
self.maxY = self.bottomBound;
|
||||
}
|
||||
|
||||
- (void)layoutYPosition { self.maxY = self.bottomBound; }
|
||||
- (void)fadeZoomButtonsShow:(BOOL)show
|
||||
{
|
||||
CGFloat const alpha = show ? 1.0 : 0.0;
|
||||
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount) animations:^
|
||||
{
|
||||
self.zoomIn.alpha = alpha;
|
||||
self.zoomOut.alpha = alpha;
|
||||
}];
|
||||
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount)
|
||||
animations:^{
|
||||
self.zoomIn.alpha = alpha;
|
||||
self.zoomOut.alpha = alpha;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)fadeLocationButtonShow:(BOOL)show
|
||||
{
|
||||
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount) animations:^
|
||||
{
|
||||
self.location.alpha = show ? 1.0 : 0.0;
|
||||
}];
|
||||
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount)
|
||||
animations:^{
|
||||
self.location.alpha = show ? 1.0 : 0.0;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)animate
|
||||
|
@ -131,15 +127,14 @@ CGFloat constexpr kZoomOutToLayoutPortraitOffset = 52;
|
|||
if (!hidden)
|
||||
self.hidden = NO;
|
||||
[self layoutXPosition:!hidden];
|
||||
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount) animations:^
|
||||
{
|
||||
[self layoutXPosition:hidden];
|
||||
}
|
||||
completion:^(BOOL finished)
|
||||
{
|
||||
if (hidden)
|
||||
self.hidden = YES;
|
||||
}];
|
||||
[UIView animateWithDuration:framesDuration(kMenuViewHideFramesCount)
|
||||
animations:^{
|
||||
[self layoutXPosition:hidden];
|
||||
}
|
||||
completion:^(BOOL finished) {
|
||||
if (hidden)
|
||||
self.hidden = YES;
|
||||
}];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -157,11 +152,7 @@ CGFloat constexpr kZoomOutToLayoutPortraitOffset = 52;
|
|||
[self animate];
|
||||
}
|
||||
|
||||
- (CGFloat)topBound
|
||||
{
|
||||
return MAX(0.0, _topBound);
|
||||
}
|
||||
|
||||
- (CGFloat)topBound { return MAX(0.0, _topBound); }
|
||||
@synthesize bottomBound = _bottomBound;
|
||||
|
||||
- (void)setBottomBound:(CGFloat)bottomBound
|
||||
|
@ -176,8 +167,7 @@ CGFloat constexpr kZoomOutToLayoutPortraitOffset = 52;
|
|||
{
|
||||
if (!self.superview)
|
||||
return _bottomBound;
|
||||
CGFloat const bottomBoundLimit =
|
||||
(self.superview.height - self.zoomOut.maxY) / 2 - (self.location.maxY - self.zoomOut.maxY);
|
||||
CGFloat const bottomBoundLimit = (self.superview.height - self.location.maxY) / 2;
|
||||
return MIN(self.superview.height - bottomBoundLimit, _bottomBound);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
@property(nonatomic, readonly) CGFloat progress;
|
||||
//@property (nonatomic, readonly) vector<location::FollowingInfo::SingleLaneInfoClient> lanes;
|
||||
@property(nonatomic, readonly) BOOL isPedestrian;
|
||||
@property(nonatomic, readonly) NSAttributedString * estimate;
|
||||
|
||||
- (void)updateFollowingInfo:(location::FollowingInfo const &)info;
|
||||
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#import "MWMLocationManager.h"
|
||||
#import "MWMSettings.h"
|
||||
#import "MapsAppDelegate.h"
|
||||
#import "TimeUtils.h"
|
||||
#import "UIColor+MapsMeColor.h"
|
||||
#import "UIFont+MapsMeFonts.h"
|
||||
|
||||
#include "Framework.h"
|
||||
#include "geometry/distance_on_sphere.hpp"
|
||||
|
@ -51,6 +54,18 @@ using namespace routing::turns;
|
|||
_nextTurnImage = image(info.m_nextTurn, true);
|
||||
}
|
||||
|
||||
NSDictionary * etaAttributes = @{
|
||||
NSForegroundColorAttributeName : UIColor.blackPrimaryText,
|
||||
NSFontAttributeName : UIFont.medium17
|
||||
};
|
||||
NSString * eta = [NSDateFormatter estimatedArrivalTimeWithSeconds:_timeToTarget];
|
||||
NSString * resultString =
|
||||
[NSString stringWithFormat:@"%@ • %@ %@", eta, _targetDistance, _targetUnits];
|
||||
NSMutableAttributedString * result =
|
||||
[[NSMutableAttributedString alloc] initWithString:resultString];
|
||||
[result addAttributes:etaAttributes range:NSMakeRange(0, eta.length)];
|
||||
_estimate = [result copy];
|
||||
|
||||
TurnDirection const turn = info.m_turn;
|
||||
_turnImage = image(turn, false);
|
||||
BOOL const isRound = turn == TurnDirection::EnterRoundAbout ||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#import "Common.h"
|
||||
#import "MWMNavigationView.h"
|
||||
#import "Common.h"
|
||||
|
||||
@interface MWMNavigationView ()
|
||||
|
||||
@property (nonatomic) BOOL isVisible;
|
||||
@property(nonatomic) BOOL isVisible;
|
||||
|
||||
@property (weak, nonatomic, readwrite) IBOutlet UIView * contentView;
|
||||
@property(weak, nonatomic, readwrite) IBOutlet UIView * contentView;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -28,32 +28,24 @@
|
|||
NSAssert(superview != nil, @"Superview can't be nil");
|
||||
if ([superview.subviews containsObject:self])
|
||||
return;
|
||||
if (IPAD)
|
||||
[superview addSubview:self];
|
||||
else
|
||||
[superview insertSubview:self atIndex:0];
|
||||
}
|
||||
|
||||
- (void)remove
|
||||
{
|
||||
self.isVisible = NO;
|
||||
[superview addSubview:self];
|
||||
}
|
||||
|
||||
- (void)remove { self.isVisible = NO; }
|
||||
- (void)layoutSubviews
|
||||
{
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration animations:^
|
||||
{
|
||||
if (!CGRectEqualToRect(self.frame, self.defaultFrame))
|
||||
self.frame = self.defaultFrame;
|
||||
CGFloat const sbHeight = statusBarHeight();
|
||||
self.statusbarBackground.frame = CGRectMake(0.0, -sbHeight, self.width, sbHeight);
|
||||
[self.delegate navigationDashBoardDidUpdate];
|
||||
}
|
||||
completion:^(BOOL finished)
|
||||
{
|
||||
if (!self.isVisible)
|
||||
[self removeFromSuperview];
|
||||
}];
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration
|
||||
animations:^{
|
||||
if (!CGRectEqualToRect(self.frame, self.defaultFrame))
|
||||
self.frame = self.defaultFrame;
|
||||
CGFloat const sbHeight = statusBarHeight();
|
||||
self.statusbarBackground.frame = CGRectMake(0.0, -sbHeight, self.width, sbHeight);
|
||||
[self.delegate navigationDashBoardDidUpdate];
|
||||
}
|
||||
completion:^(BOOL finished) {
|
||||
if (!self.isVisible)
|
||||
[self removeFromSuperview];
|
||||
}];
|
||||
[super layoutSubviews];
|
||||
}
|
||||
|
||||
|
|
|
@ -6,10 +6,7 @@
|
|||
#import "MWMRoutePointLayout.h"
|
||||
#import "MWMRouter.h"
|
||||
#import "Statistics.h"
|
||||
#import "TimeUtils.h"
|
||||
#import "UIButton+Orientation.h"
|
||||
#import "UIColor+MapsMeColor.h"
|
||||
#import "UIFont+MapsMeFonts.h"
|
||||
|
||||
static CGFloat constexpr kAdditionalHeight = 20.;
|
||||
|
||||
|
@ -20,7 +17,6 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
@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;
|
||||
@property(weak, nonatomic) IBOutlet UIButton * goButton;
|
||||
@property(weak, nonatomic) IBOutlet UICollectionView * collectionView;
|
||||
|
@ -29,11 +25,15 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
@property(weak, nonatomic) IBOutlet UIView * statusBox;
|
||||
@property(weak, nonatomic) IBOutlet UIView * planningBox;
|
||||
@property(weak, nonatomic) IBOutlet UIView * resultsBox;
|
||||
@property(weak, nonatomic) IBOutlet UIView * heightBox;
|
||||
@property(weak, nonatomic) IBOutlet UIView * errorBox;
|
||||
@property(weak, nonatomic) IBOutlet UILabel * resultLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel * arriveLabel;
|
||||
@property(weak, nonatomic) IBOutlet UIImageView * completeImageView;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * statusBoxHeight;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * resultsBoxHeight;
|
||||
@property(weak, nonatomic) IBOutlet NSLayoutConstraint * heightBoxHeight;
|
||||
@property(weak, nonatomic) IBOutlet UIImageView * heightProfileImage;
|
||||
|
||||
@property(nonatomic) UIImageView * movingCellImage;
|
||||
|
||||
@property(nonatomic) BOOL isNeedToMove;
|
||||
|
@ -75,21 +75,28 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
routerType:(routing::RouterType)routerType
|
||||
{
|
||||
MWMCircularProgress * progress = [[MWMCircularProgress alloc] initWithParentView:parentView];
|
||||
[progress setImage:[UIImage imageNamed:imageName]
|
||||
forStates:{MWMCircularProgressStateNormal, MWMCircularProgressStateFailed,
|
||||
MWMCircularProgressStateSelected, MWMCircularProgressStateProgress,
|
||||
MWMCircularProgressStateSpinner, MWMCircularProgressStateCompleted}];
|
||||
MWMCircularProgressStateVec const imageStates = {
|
||||
MWMCircularProgressStateNormal, MWMCircularProgressStateFailed,
|
||||
MWMCircularProgressStateSelected, MWMCircularProgressStateProgress,
|
||||
MWMCircularProgressStateSpinner, MWMCircularProgressStateCompleted};
|
||||
[progress setImage:[UIImage imageNamed:imageName] forStates:imageStates];
|
||||
|
||||
[progress setColoring:MWMButtonColoringGray forStates:{MWMCircularProgressStateNormal}];
|
||||
|
||||
[progress setColoring:MWMButtonColoringWhiteText
|
||||
forStates:{MWMCircularProgressStateFailed, MWMCircularProgressStateSelected,
|
||||
MWMCircularProgressStateProgress, MWMCircularProgressStateSpinner,
|
||||
MWMCircularProgressStateCompleted}];
|
||||
|
||||
[progress setSpinnerBackgroundColor:[UIColor clearColor]];
|
||||
[progress setColor:[UIColor whiteColor]
|
||||
forStates:{MWMCircularProgressStateProgress, MWMCircularProgressStateSpinner}];
|
||||
|
||||
progress.delegate = self;
|
||||
m_progresses[routerType] = progress;
|
||||
}
|
||||
|
||||
- (void)didMoveToSuperview { [self setupActualHeight]; }
|
||||
- (void)addToView:(UIView *)superview
|
||||
{
|
||||
[super addToView:superview];
|
||||
[superview bringSubviewToFront:superview];
|
||||
}
|
||||
|
||||
- (void)statePrepare
|
||||
{
|
||||
for (auto const & progress : m_progresses)
|
||||
|
@ -103,6 +110,7 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
[self.layout invalidateLayout];
|
||||
self.statusBox.hidden = YES;
|
||||
self.resultsBox.hidden = YES;
|
||||
self.heightBox.hidden = YES;
|
||||
self.planningBox.hidden = YES;
|
||||
self.errorBox.hidden = YES;
|
||||
}
|
||||
|
@ -114,6 +122,7 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
self.goButton.enabled = NO;
|
||||
self.statusBox.hidden = NO;
|
||||
self.resultsBox.hidden = YES;
|
||||
self.heightBox.hidden = YES;
|
||||
self.errorBox.hidden = YES;
|
||||
self.planningBox.hidden = NO;
|
||||
[self reloadData];
|
||||
|
@ -128,6 +137,7 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
self.statusBox.hidden = NO;
|
||||
self.planningBox.hidden = YES;
|
||||
self.resultsBox.hidden = YES;
|
||||
self.heightBox.hidden = YES;
|
||||
self.errorBox.hidden = NO;
|
||||
if (IPAD)
|
||||
[self iPadNotReady];
|
||||
|
@ -141,6 +151,7 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
self.planningBox.hidden = YES;
|
||||
self.errorBox.hidden = YES;
|
||||
self.resultsBox.hidden = NO;
|
||||
self.heightBox.hidden = ![MWMRouter hasRouteAltitude];
|
||||
if (IPAD)
|
||||
[self iPadReady];
|
||||
}
|
||||
|
@ -148,7 +159,9 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
- (void)iPadReady
|
||||
{
|
||||
[self layoutIfNeeded];
|
||||
self.statusBoxHeight.constant = 76.;
|
||||
self.statusBoxHeight.constant =
|
||||
self.resultsBoxHeight.constant +
|
||||
([MWMRouter hasRouteAltitude] ? self.heightBoxHeight.constant : 0);
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration
|
||||
animations:^{
|
||||
[self layoutIfNeeded];
|
||||
|
@ -159,17 +172,28 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
self.arriveLabel.alpha = 1.;
|
||||
}
|
||||
completion:^(BOOL finished) {
|
||||
self.completeImageView.hidden = NO;
|
||||
[self updateHeightProfile];
|
||||
}];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)updateHeightProfile
|
||||
{
|
||||
if (![MWMRouter hasRouteAltitude])
|
||||
return;
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[[MWMRouter router] routeAltitudeImageForSize:self.heightProfileImage.frame.size
|
||||
completion:^(UIImage * image) {
|
||||
self.heightProfileImage.image = image;
|
||||
}];
|
||||
});
|
||||
}
|
||||
|
||||
- (void)iPadNotReady
|
||||
{
|
||||
self.completeImageView.hidden = YES;
|
||||
self.arriveLabel.alpha = 0.;
|
||||
[self layoutIfNeeded];
|
||||
self.statusBoxHeight.constant = 56.;
|
||||
self.statusBoxHeight.constant = self.resultsBoxHeight.constant;
|
||||
[UIView animateWithDuration:kDefaultAnimationDuration
|
||||
animations:^{
|
||||
[self layoutIfNeeded];
|
||||
|
@ -188,8 +212,7 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
{
|
||||
[super layoutSubviews];
|
||||
[self setupActualHeight];
|
||||
if (IPAD)
|
||||
[self.delegate routePreviewDidChangeFrame:self.frame];
|
||||
[self.delegate routePreviewDidChangeFrame:self.frame];
|
||||
[super layoutSubviews];
|
||||
}
|
||||
|
||||
|
@ -251,12 +274,7 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
return {{origin, self.topBound}, {width, self.superview.height - kAdditionalHeight}};
|
||||
}
|
||||
|
||||
- (CGFloat)visibleHeight
|
||||
{
|
||||
return self.planningRouteViewHeight.constant + self.planningContainerHeight.constant +
|
||||
kAdditionalHeight;
|
||||
}
|
||||
|
||||
- (CGFloat)visibleHeight { return self.planningRouteViewHeight.constant + kAdditionalHeight; }
|
||||
- (IBAction)extendTap
|
||||
{
|
||||
BOOL const isExtended = !self.extendButton.selected;
|
||||
|
@ -287,13 +305,10 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
}
|
||||
BOOL const isPortrait = self.superview.height > self.superview.width;
|
||||
CGFloat const height = isPortrait ? 140. : 96.;
|
||||
CGFloat const planningRouteViewHeight = self.extendButton.selected ? height : 44.;
|
||||
self.planningRouteViewHeight.constant = planningRouteViewHeight;
|
||||
CGFloat const selfHeight = planningRouteViewHeight + self.planningContainerHeight.constant;
|
||||
CGFloat const selfHeight = self.extendButton.selected ? height : 44.;
|
||||
self.planningRouteViewHeight.constant = selfHeight;
|
||||
self.defaultHeight = selfHeight;
|
||||
self.height = selfHeight;
|
||||
[self.dashboardManager.delegate
|
||||
routePreviewDidChangeFrame:{self.origin, {self.width, selfHeight + kAdditionalHeight}}];
|
||||
}
|
||||
|
||||
- (void)snapshotCell:(MWMRoutePointCell *)cell
|
||||
|
@ -315,25 +330,11 @@ static CGFloat constexpr kAdditionalHeight = 20.;
|
|||
l.rasterizationScale = [[UIScreen mainScreen] scale];
|
||||
}
|
||||
|
||||
- (NSDictionary *)etaAttributes
|
||||
{
|
||||
return @{
|
||||
NSForegroundColorAttributeName : UIColor.blackPrimaryText,
|
||||
NSFontAttributeName : UIFont.medium17
|
||||
};
|
||||
}
|
||||
|
||||
#pragma mark - MWMNavigationDashboardInfoProtocol
|
||||
|
||||
- (void)updateNavigationInfo:(MWMNavigationDashboardEntity *)info
|
||||
{
|
||||
NSString * eta = [NSDateFormatter estimatedArrivalTimeWithSeconds:info.timeToTarget];
|
||||
NSString * resultString =
|
||||
[NSString stringWithFormat:@"%@ • %@ %@", eta, info.targetDistance, info.targetUnits];
|
||||
NSMutableAttributedString * result =
|
||||
[[NSMutableAttributedString alloc] initWithString:resultString];
|
||||
[result addAttributes:self.etaAttributes range:NSMakeRange(0, eta.length)];
|
||||
self.resultLabel.attributedText = result;
|
||||
self.resultLabel.attributedText = info.estimate;
|
||||
if (!IPAD)
|
||||
return;
|
||||
|
||||
|
|
|
@ -1,14 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
|
||||
</dependencies>
|
||||
<customFonts key="customFonts">
|
||||
<mutableArray key="HelveticaNeue.ttc">
|
||||
<string>HelveticaNeue-Medium</string>
|
||||
</mutableArray>
|
||||
</customFonts>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MWMNavigationDashboardManager">
|
||||
<connections>
|
||||
|
@ -17,7 +12,7 @@
|
|||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="aNH-vh-DPz" customClass="MWMRoutePreview">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="188"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="140"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WqK-Yb-PmP" customClass="SolidTouchView">
|
||||
|
@ -34,47 +29,55 @@
|
|||
<action selector="routingStopTouchUpInside" destination="-1" eventType="touchUpInside" id="Gvl-qB-zAN"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="DMt-LJ-mzn" userLabel="Title Box">
|
||||
<rect key="frame" x="92" y="12" width="136" height="22"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oQc-l8-sZH" userLabel="Buttons Box">
|
||||
<rect key="frame" x="81" y="0.0" width="158" height="44"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Planning Route" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pge-2d-3UB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="120" height="22"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cZF-Ha-2tB">
|
||||
<rect key="frame" x="6" y="3" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="10" id="Aqu-Er-6Tx"/>
|
||||
<constraint firstAttribute="height" constant="22" id="ywO-T8-W4N"/>
|
||||
<constraint firstAttribute="width" constant="38" id="m6k-uU-yOl"/>
|
||||
<constraint firstAttribute="height" constant="38" id="mp7-b4-xot"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="p2p_route_planning"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="whitePrimaryText"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium17"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_arrow_up_and_down" translatesAutoresizingMaskIntoConstraints="NO" id="y8P-JL-riK">
|
||||
<rect key="frame" x="128" y="9" width="8" height="8"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FuO-c6-y9C" userLabel="Bicycle">
|
||||
<rect key="frame" x="60" y="3" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="8" id="LtD-Tz-US7"/>
|
||||
<constraint firstAttribute="height" constant="8" id="uez-1b-JG5"/>
|
||||
<constraint firstAttribute="width" constant="38" id="9fe-fw-05J"/>
|
||||
<constraint firstAttribute="height" constant="38" id="gbm-NL-zgv"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6D3-QF-6wm">
|
||||
<rect key="frame" x="114" y="3" 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>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="y8P-JL-riK" firstAttribute="leading" secondItem="Pge-2d-3UB" secondAttribute="trailing" constant="8" id="2ns-ZL-f1m"/>
|
||||
<constraint firstItem="Pge-2d-3UB" firstAttribute="top" secondItem="DMt-LJ-mzn" secondAttribute="top" id="Kkx-M5-3w7"/>
|
||||
<constraint firstItem="y8P-JL-riK" firstAttribute="top" secondItem="DMt-LJ-mzn" secondAttribute="top" constant="9" id="LJ4-hh-HBz"/>
|
||||
<constraint firstAttribute="height" constant="22" id="NBM-Ui-Cp5"/>
|
||||
<constraint firstItem="Pge-2d-3UB" firstAttribute="leading" secondItem="DMt-LJ-mzn" secondAttribute="leading" id="RxG-1s-Hyp"/>
|
||||
<constraint firstAttribute="trailing" secondItem="y8P-JL-riK" secondAttribute="trailing" id="q4E-gi-eja"/>
|
||||
<constraint firstItem="FuO-c6-y9C" firstAttribute="centerY" secondItem="oQc-l8-sZH" secondAttribute="centerY" id="1De-4s-V8t"/>
|
||||
<constraint firstItem="6D3-QF-6wm" firstAttribute="leading" secondItem="FuO-c6-y9C" secondAttribute="trailing" constant="16" id="91z-iC-oKp"/>
|
||||
<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="44" id="Mws-KZ-ghs"/>
|
||||
<constraint firstItem="FuO-c6-y9C" firstAttribute="leading" secondItem="cZF-Ha-2tB" secondAttribute="trailing" constant="16" id="Z6M-UV-6x2"/>
|
||||
<constraint firstAttribute="trailing" secondItem="6D3-QF-6wm" secondAttribute="trailing" constant="6" id="bZ7-zn-TAn"/>
|
||||
<constraint firstItem="6D3-QF-6wm" firstAttribute="centerY" secondItem="oQc-l8-sZH" secondAttribute="centerY" id="vXO-6g-q4L"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0YR-3a-ucN">
|
||||
<rect key="frame" x="92" y="12" width="136" height="28"/>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_arrow_up_and_down" translatesAutoresizingMaskIntoConstraints="NO" id="y8P-JL-riK">
|
||||
<rect key="frame" x="292" y="18" width="13" height="8"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="28" id="2lP-gs-1Bd"/>
|
||||
<constraint firstAttribute="width" constant="13" id="LtD-Tz-US7"/>
|
||||
<constraint firstAttribute="height" constant="8" id="uez-1b-JG5"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0YR-3a-ucN">
|
||||
<rect key="frame" x="276" y="0.0" width="44" height="44"/>
|
||||
<connections>
|
||||
<action selector="extendTap" destination="aNH-vh-DPz" eventType="touchUpInside" id="oYh-e3-3Ln"/>
|
||||
</connections>
|
||||
|
@ -99,175 +102,28 @@
|
|||
<color key="backgroundColor" red="0.12156862745098039" green="0.59999999999999998" blue="0.32156862745098036" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="140" id="2SX-TZ-tS3"/>
|
||||
<constraint firstItem="DrK-vI-WkO" firstAttribute="top" secondItem="DMt-LJ-mzn" secondAttribute="bottom" constant="14" id="Ln4-6f-0un"/>
|
||||
<constraint firstItem="0YR-3a-ucN" firstAttribute="centerX" secondItem="WqK-Yb-PmP" secondAttribute="centerX" id="MiR-4r-70K"/>
|
||||
<constraint firstItem="0YR-3a-ucN" firstAttribute="top" secondItem="WqK-Yb-PmP" secondAttribute="top" id="DyS-8t-eoF"/>
|
||||
<constraint firstItem="0YR-3a-ucN" firstAttribute="width" secondItem="wpf-tw-Coz" secondAttribute="width" id="IM7-F1-Enm"/>
|
||||
<constraint firstItem="oQc-l8-sZH" firstAttribute="centerY" secondItem="wpf-tw-Coz" secondAttribute="centerY" id="NwC-Dq-AAM"/>
|
||||
<constraint firstItem="0YR-3a-ucN" firstAttribute="height" secondItem="wpf-tw-Coz" secondAttribute="height" id="Of6-Cq-FHu"/>
|
||||
<constraint firstItem="wpf-tw-Coz" firstAttribute="leading" secondItem="WqK-Yb-PmP" secondAttribute="leading" id="bK5-4Q-Rv9"/>
|
||||
<constraint firstItem="wpf-tw-Coz" firstAttribute="top" secondItem="WqK-Yb-PmP" secondAttribute="top" id="cPc-fO-vAa"/>
|
||||
<constraint firstItem="0YR-3a-ucN" firstAttribute="width" secondItem="DMt-LJ-mzn" secondAttribute="width" id="evf-UV-KzK"/>
|
||||
<constraint firstItem="y8P-JL-riK" firstAttribute="centerY" secondItem="0YR-3a-ucN" secondAttribute="centerY" id="dYT-xy-0Dq"/>
|
||||
<constraint firstAttribute="trailing" secondItem="DrK-vI-WkO" secondAttribute="trailing" priority="999" constant="8" id="jom-uc-MN0"/>
|
||||
<constraint firstItem="DrK-vI-WkO" firstAttribute="leading" secondItem="WqK-Yb-PmP" secondAttribute="leading" priority="999" constant="8" id="kYp-Bb-6dW"/>
|
||||
<constraint firstItem="DMt-LJ-mzn" firstAttribute="top" secondItem="WqK-Yb-PmP" secondAttribute="top" constant="12" id="qWW-1y-zZG"/>
|
||||
<constraint firstItem="0YR-3a-ucN" firstAttribute="top" secondItem="WqK-Yb-PmP" secondAttribute="top" constant="12" id="zKm-WW-91Y"/>
|
||||
<constraint firstItem="DrK-vI-WkO" firstAttribute="top" secondItem="wpf-tw-Coz" secondAttribute="bottom" constant="4" id="kb4-z8-KAi"/>
|
||||
<constraint firstItem="oQc-l8-sZH" firstAttribute="centerX" secondItem="WqK-Yb-PmP" secondAttribute="centerX" id="ltA-tm-z3P"/>
|
||||
<constraint firstItem="y8P-JL-riK" firstAttribute="centerX" secondItem="0YR-3a-ucN" secondAttribute="centerX" id="ohd-Ye-gQA"/>
|
||||
<constraint firstAttribute="trailing" secondItem="0YR-3a-ucN" secondAttribute="trailing" id="qTd-74-BP9"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="primary"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sr7-UO-G0z" userLabel="PlanningContainer" customClass="SolidTouchView">
|
||||
<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="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="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"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="p2p_planning"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackHintText"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Yzu-Z9-ZiH" firstAttribute="leading" secondItem="OOA-K7-ybj" secondAttribute="leading" id="I6U-Dn-Qk6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Yzu-Z9-ZiH" secondAttribute="trailing" id="bDH-Ez-RfC"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Yzu-Z9-ZiH" secondAttribute="bottom" id="isZ-Xy-wy3"/>
|
||||
<constraint firstItem="Yzu-Z9-ZiH" firstAttribute="top" secondItem="OOA-K7-ybj" secondAttribute="top" id="jTM-VI-Bjn"/>
|
||||
<constraint firstAttribute="height" constant="20" id="jwW-im-ZcM"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Fm-p4-iHv" userLabel="Error box">
|
||||
<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="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"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="routing_planning_error"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="red"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="Ii5-tP-LwY"/>
|
||||
<constraint firstAttribute="trailing" secondItem="bZb-KY-Y9r" secondAttribute="trailing" id="MQM-kE-YfO"/>
|
||||
<constraint firstAttribute="bottom" secondItem="bZb-KY-Y9r" secondAttribute="bottom" id="e8n-MD-IUX"/>
|
||||
<constraint firstItem="bZb-KY-Y9r" firstAttribute="top" secondItem="8Fm-p4-iHv" secondAttribute="top" id="iOX-Kd-geg"/>
|
||||
<constraint firstItem="bZb-KY-Y9r" firstAttribute="leading" secondItem="8Fm-p4-iHv" secondAttribute="leading" id="oiU-lf-i60"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tjE-md-mqu" userLabel="Result box">
|
||||
<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="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"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="blackSecondaryText"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="v46-iC-Qyb" secondAttribute="trailing" id="Abv-X7-oJu"/>
|
||||
<constraint firstAttribute="height" constant="20" id="Utj-Ne-3Oj"/>
|
||||
<constraint firstItem="v46-iC-Qyb" firstAttribute="top" secondItem="tjE-md-mqu" secondAttribute="top" id="Zpy-r2-q2u"/>
|
||||
<constraint firstItem="v46-iC-Qyb" firstAttribute="leading" secondItem="tjE-md-mqu" secondAttribute="leading" id="hdC-c8-ywq"/>
|
||||
<constraint firstAttribute="bottom" secondItem="v46-iC-Qyb" secondAttribute="bottom" id="x8q-ZY-4Yv"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="oQc-l8-sZH" userLabel="Buttons Box">
|
||||
<rect key="frame" x="8" y="0.0" width="134" height="48"/>
|
||||
<subviews>
|
||||
<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" 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 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>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="8Fm-p4-iHv" firstAttribute="centerY" secondItem="Sr7-UO-G0z" secondAttribute="centerY" id="6Bj-GR-HOL"/>
|
||||
<constraint firstItem="OOA-K7-ybj" firstAttribute="centerY" secondItem="Sr7-UO-G0z" secondAttribute="centerY" id="6Uv-dg-Un3"/>
|
||||
<constraint firstAttribute="trailing" secondItem="tjE-md-mqu" secondAttribute="trailing" priority="999" constant="12" id="99x-Ja-4UF"/>
|
||||
<constraint firstItem="OOA-K7-ybj" firstAttribute="leading" secondItem="oQc-l8-sZH" secondAttribute="trailing" id="TAE-ae-pa6"/>
|
||||
<constraint firstItem="tjE-md-mqu" firstAttribute="centerY" secondItem="Sr7-UO-G0z" secondAttribute="centerY" id="ikK-X1-3S9"/>
|
||||
<constraint firstItem="oQc-l8-sZH" firstAttribute="centerY" secondItem="Sr7-UO-G0z" secondAttribute="centerY" id="jmL-Ol-DwJ"/>
|
||||
<constraint firstItem="oQc-l8-sZH" firstAttribute="leading" secondItem="Sr7-UO-G0z" secondAttribute="leading" priority="999" constant="8" id="kJx-Hv-da4"/>
|
||||
<constraint firstItem="8Fm-p4-iHv" firstAttribute="leading" secondItem="oQc-l8-sZH" secondAttribute="trailing" id="pPr-SX-Yd8"/>
|
||||
<constraint firstAttribute="height" constant="48" id="tZt-LS-raP"/>
|
||||
<constraint firstAttribute="trailing" secondItem="OOA-K7-ybj" secondAttribute="trailing" priority="999" constant="12" id="uFe-u5-hEf"/>
|
||||
<constraint firstAttribute="trailing" secondItem="8Fm-p4-iHv" secondAttribute="trailing" priority="999" constant="12" id="wk4-wb-LAg"/>
|
||||
<constraint firstItem="tjE-md-mqu" firstAttribute="leading" secondItem="oQc-l8-sZH" secondAttribute="trailing" id="yVc-kD-ck6"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.shadowRadius">
|
||||
<integer key="value" value="2"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="layer.shadowUIColor">
|
||||
<color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.23999999999999999" colorSpace="calibratedRGB"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.shadowOpacity">
|
||||
<integer key="value" value="1"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="size" keyPath="layer.shadowOffset">
|
||||
<size key="value" width="0.0" height="1"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="Sr7-UO-G0z" secondAttribute="trailing" id="9Kt-v8-h57"/>
|
||||
<constraint firstItem="DMt-LJ-mzn" firstAttribute="centerX" secondItem="aNH-vh-DPz" secondAttribute="centerX" id="KO8-f0-6R5"/>
|
||||
<constraint firstItem="Sr7-UO-G0z" firstAttribute="leading" secondItem="aNH-vh-DPz" secondAttribute="leading" id="cTv-Jh-D3E"/>
|
||||
<constraint firstAttribute="trailing" secondItem="WqK-Yb-PmP" secondAttribute="trailing" id="hui-oa-rbV"/>
|
||||
<constraint firstItem="Sr7-UO-G0z" firstAttribute="top" secondItem="WqK-Yb-PmP" secondAttribute="bottom" id="jw5-OD-IF0"/>
|
||||
<constraint firstItem="WqK-Yb-PmP" firstAttribute="leading" secondItem="aNH-vh-DPz" secondAttribute="leading" id="rQB-KG-9Kg"/>
|
||||
<constraint firstItem="WqK-Yb-PmP" firstAttribute="top" secondItem="aNH-vh-DPz" secondAttribute="top" id="u9l-Q9-28D"/>
|
||||
</constraints>
|
||||
|
@ -279,22 +135,17 @@
|
|||
<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"/>
|
||||
<outlet property="extendButton" destination="0YR-3a-ucN" id="fJG-ts-aGf"/>
|
||||
<outlet property="layout" destination="R9u-Qo-R0Y" id="cqs-S1-d4J"/>
|
||||
<outlet property="pedestrian" destination="6D3-QF-6wm" id="bdh-zx-9LW"/>
|
||||
<outlet property="planningBox" destination="OOA-K7-ybj" id="kh6-F2-aBF"/>
|
||||
<outlet property="planningContainerHeight" destination="tZt-LS-raP" id="jsB-Vh-6KP"/>
|
||||
<outlet property="planningRouteViewHeight" destination="2SX-TZ-tS3" id="IwX-TA-FxL"/>
|
||||
<outlet property="resultLabel" destination="v46-iC-Qyb" id="RtF-Gr-uQC"/>
|
||||
<outlet property="resultsBox" destination="tjE-md-mqu" id="eiV-ww-oCE"/>
|
||||
<outlet property="vehicle" destination="cZF-Ha-2tB" id="QP3-tU-nfO"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="448" y="341"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="ic_arrow_up_and_down" width="9" height="9"/>
|
||||
<image name="ic_arrow_up_and_down" width="13" height="8"/>
|
||||
<image name="ic_nav_bar_back" width="14" height="22"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
|
||||
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
|
||||
</dependencies>
|
||||
<customFonts key="customFonts">
|
||||
<mutableArray key="HelveticaNeue.ttc">
|
||||
<string>HelveticaNeue-Medium</string>
|
||||
<string>HelveticaNeue-Medium</string>
|
||||
</mutableArray>
|
||||
</customFonts>
|
||||
<objects>
|
||||
|
@ -35,17 +35,45 @@
|
|||
<action selector="routingStopTouchUpInside" destination="-1" eventType="touchUpInside" id="DWh-ls-fCL"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Planning Route" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8Q7-PE-2D9">
|
||||
<rect key="frame" x="100" y="12" width="120" height="21"/>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="p2p_route_planning"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="colorName" value="whitePrimaryText"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium17"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sXu-tl-a0m" userLabel="Buttons Box">
|
||||
<rect key="frame" x="75" y="0.0" width="170" height="44"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jDl-pu-eov">
|
||||
<rect key="frame" x="6" y="0.0" width="44" height="44"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="jDl-pu-eov" secondAttribute="height" multiplier="1:1" id="o1x-sd-13z"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yiM-fM-sSS" userLabel="Bicycle">
|
||||
<rect key="frame" x="66" y="0.0" width="44" height="44"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="yiM-fM-sSS" secondAttribute="height" multiplier="1:1" id="rnk-51-Cjg"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VhE-hA-Leo">
|
||||
<rect key="frame" x="126" y="3" width="38" height="38"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="VhE-hA-Leo" secondAttribute="height" multiplier="1:1" id="V4H-0m-WCy"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="jDl-pu-eov" firstAttribute="leading" secondItem="sXu-tl-a0m" secondAttribute="leading" constant="6" id="4B3-wd-Hli"/>
|
||||
<constraint firstItem="VhE-hA-Leo" firstAttribute="leading" secondItem="yiM-fM-sSS" secondAttribute="trailing" constant="16" id="5aG-G0-kVn"/>
|
||||
<constraint firstItem="VhE-hA-Leo" firstAttribute="top" secondItem="sXu-tl-a0m" secondAttribute="top" constant="3" id="HM9-PQ-ys1"/>
|
||||
<constraint firstAttribute="bottom" secondItem="jDl-pu-eov" secondAttribute="bottom" id="Icg-Vj-GvT"/>
|
||||
<constraint firstItem="yiM-fM-sSS" firstAttribute="leading" secondItem="jDl-pu-eov" secondAttribute="trailing" constant="16" id="Ig8-ez-IpI"/>
|
||||
<constraint firstAttribute="bottom" secondItem="VhE-hA-Leo" secondAttribute="bottom" constant="3" id="Sod-o1-NpK"/>
|
||||
<constraint firstItem="yiM-fM-sSS" firstAttribute="top" secondItem="sXu-tl-a0m" secondAttribute="top" id="f3J-LS-7YL"/>
|
||||
<constraint firstAttribute="bottom" secondItem="yiM-fM-sSS" secondAttribute="bottom" id="ipg-GT-aKH"/>
|
||||
<constraint firstItem="jDl-pu-eov" firstAttribute="top" secondItem="sXu-tl-a0m" secondAttribute="top" id="kzv-U2-zJG"/>
|
||||
<constraint firstAttribute="trailing" secondItem="VhE-hA-Leo" secondAttribute="trailing" constant="6" id="u9b-RO-eMG"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<collectionView multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="TC0-58-PO9">
|
||||
<rect key="frame" x="8" y="48" width="304" height="80"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
|
@ -70,11 +98,12 @@
|
|||
</subviews>
|
||||
<color key="backgroundColor" red="0.1215686275" green="0.59999999999999998" blue="0.32156862749999998" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="sXu-tl-a0m" firstAttribute="bottom" secondItem="a4n-5I-PN3" secondAttribute="bottom" id="4NN-cC-Tsg"/>
|
||||
<constraint firstAttribute="height" constant="140" id="7e9-gc-Y07"/>
|
||||
<constraint firstItem="8Q7-PE-2D9" firstAttribute="centerY" secondItem="a4n-5I-PN3" secondAttribute="centerY" id="I38-hd-pky"/>
|
||||
<constraint firstItem="sXu-tl-a0m" firstAttribute="top" secondItem="a4n-5I-PN3" secondAttribute="top" id="J7w-8N-vlf"/>
|
||||
<constraint firstAttribute="bottom" secondItem="TC0-58-PO9" secondAttribute="bottom" constant="12" id="O8H-Ui-wI9"/>
|
||||
<constraint firstItem="sXu-tl-a0m" firstAttribute="centerX" secondItem="3s2-BV-X5i" secondAttribute="centerX" id="OeL-MY-Mn5"/>
|
||||
<constraint firstItem="TC0-58-PO9" firstAttribute="leading" secondItem="3s2-BV-X5i" secondAttribute="leading" constant="8" id="Qnm-Iy-DdA"/>
|
||||
<constraint firstItem="8Q7-PE-2D9" firstAttribute="centerX" secondItem="3s2-BV-X5i" secondAttribute="centerX" id="TFE-Df-Eri"/>
|
||||
<constraint firstItem="a4n-5I-PN3" firstAttribute="leading" secondItem="3s2-BV-X5i" secondAttribute="leading" id="Wxp-Yl-6SC"/>
|
||||
<constraint firstItem="a4n-5I-PN3" firstAttribute="top" secondItem="3s2-BV-X5i" secondAttribute="top" id="ppW-Pq-6rh"/>
|
||||
<constraint firstAttribute="trailing" secondItem="TC0-58-PO9" secondAttribute="trailing" constant="8" id="yA7-YN-yHs"/>
|
||||
|
@ -83,84 +112,14 @@
|
|||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="primary"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dCk-ko-ZXf" customClass="SolidTouchView">
|
||||
<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="70" y="0.0" width="180" height="48"/>
|
||||
<subviews>
|
||||
<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" 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 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>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="sXu-tl-a0m" firstAttribute="centerX" secondItem="dCk-ko-ZXf" secondAttribute="centerX" id="I21-lN-FTQ"/>
|
||||
<constraint firstItem="sXu-tl-a0m" firstAttribute="centerY" secondItem="dCk-ko-ZXf" secondAttribute="centerY" id="PZW-eT-JxN"/>
|
||||
<constraint firstAttribute="height" constant="48" id="tiT-C1-uCe"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.shadowRadius">
|
||||
<integer key="value" value="2"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="layer.shadowUIColor">
|
||||
<color key="value" red="0.0" green="0.0" blue="0.0" alpha="0.23999999999999999" colorSpace="calibratedRGB"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.shadowOpacity">
|
||||
<integer key="value" value="1"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="size" keyPath="layer.shadowOffset">
|
||||
<size key="value" width="0.0" height="1"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="white"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="87p-Qg-8f3" userLabel="Status Box">
|
||||
<rect key="frame" x="0.0" y="208" width="320" height="56"/>
|
||||
<rect key="frame" x="0.0" y="176" width="320" height="64"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tdV-a8-fmG" userLabel="Planning Box">
|
||||
<rect key="frame" x="56" y="18" width="240" height="24"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="64"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Planning..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="a7v-h1-j52">
|
||||
<rect key="frame" x="0.0" y="0.0" width="240" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="kce-Z6-Dgg"/>
|
||||
</constraints>
|
||||
<rect key="frame" x="120" y="22" width="80" 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"/>
|
||||
|
@ -173,20 +132,15 @@
|
|||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="a7v-h1-j52" firstAttribute="leading" secondItem="tdV-a8-fmG" secondAttribute="leading" id="DTZ-EA-SCl"/>
|
||||
<constraint firstItem="a7v-h1-j52" firstAttribute="top" secondItem="tdV-a8-fmG" secondAttribute="top" id="JtI-PP-1bF"/>
|
||||
<constraint firstAttribute="trailing" secondItem="a7v-h1-j52" secondAttribute="trailing" id="sD2-h3-W7d"/>
|
||||
<constraint firstAttribute="height" constant="24" id="urN-wh-uDh"/>
|
||||
<constraint firstItem="a7v-h1-j52" firstAttribute="centerX" secondItem="tdV-a8-fmG" secondAttribute="centerX" id="L9h-b7-iGd"/>
|
||||
<constraint firstItem="a7v-h1-j52" firstAttribute="centerY" secondItem="tdV-a8-fmG" secondAttribute="centerY" id="PGc-Ph-A2k"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QEP-6s-YTM" userLabel="Error Box">
|
||||
<rect key="frame" x="56" y="18" width="240" height="24"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="64"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Planning..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="VNi-4g-9gz" userLabel="Error">
|
||||
<rect key="frame" x="0.0" y="0.0" width="240" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="cgc-k8-8fa"/>
|
||||
</constraints>
|
||||
<rect key="frame" x="120" y="22" width="80" height="20"/>
|
||||
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="17"/>
|
||||
<color key="textColor" red="0.95686274510000002" green="0.26274509800000001" blue="0.21176470589999999" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
|
@ -199,20 +153,15 @@
|
|||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="VNi-4g-9gz" firstAttribute="top" secondItem="QEP-6s-YTM" secondAttribute="top" id="D4E-VN-nEs"/>
|
||||
<constraint firstAttribute="height" constant="24" id="VAv-Yd-uYh"/>
|
||||
<constraint firstItem="VNi-4g-9gz" firstAttribute="leading" secondItem="QEP-6s-YTM" secondAttribute="leading" id="Vj2-Td-djJ"/>
|
||||
<constraint firstAttribute="trailing" secondItem="VNi-4g-9gz" secondAttribute="trailing" id="j6r-43-O3n"/>
|
||||
<constraint firstItem="VNi-4g-9gz" firstAttribute="centerY" secondItem="QEP-6s-YTM" secondAttribute="centerY" id="bfa-sc-ifi"/>
|
||||
<constraint firstItem="VNi-4g-9gz" firstAttribute="centerX" secondItem="QEP-6s-YTM" secondAttribute="centerX" id="iKJ-3u-Al9"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rqr-bu-crx" userLabel="Results Box">
|
||||
<rect key="frame" x="16" y="18" width="280" height="44"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="64"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="results" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zml-eW-DsI">
|
||||
<rect key="frame" x="40" y="0.0" width="240" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="hNE-av-oYA"/>
|
||||
</constraints>
|
||||
<rect key="frame" x="16" y="14" width="288" 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"/>
|
||||
|
@ -221,8 +170,8 @@
|
|||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
|
||||
</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"/>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Arrive at 12:24" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oec-Ee-6ha">
|
||||
<rect key="frame" x="16" y="38" width="288" 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"/>
|
||||
|
@ -231,34 +180,64 @@
|
|||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="medium14"/>
|
||||
</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"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="coloring" value="MWMBlue"/>
|
||||
</userDefinedRuntimeAttributes>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="zml-eW-DsI" firstAttribute="top" secondItem="Rqr-bu-crx" secondAttribute="top" id="64F-ka-3rg"/>
|
||||
<constraint firstAttribute="trailing" secondItem="zml-eW-DsI" secondAttribute="trailing" id="jkC-ab-eb2"/>
|
||||
<constraint firstItem="zml-eW-DsI" firstAttribute="leading" secondItem="Rqr-bu-crx" secondAttribute="leading" constant="40" id="qVK-7N-2cB"/>
|
||||
<constraint firstAttribute="height" constant="44" id="xv6-UW-2NC"/>
|
||||
<constraint firstItem="oec-Ee-6ha" firstAttribute="leading" secondItem="zml-eW-DsI" secondAttribute="leading" id="Am2-25-Zn9"/>
|
||||
<constraint firstAttribute="trailing" secondItem="zml-eW-DsI" secondAttribute="trailing" constant="16" id="DRW-GJ-PG9"/>
|
||||
<constraint firstItem="zml-eW-DsI" firstAttribute="leading" secondItem="Rqr-bu-crx" secondAttribute="leading" constant="16" id="QNo-az-LlD"/>
|
||||
<constraint firstAttribute="height" constant="64" id="bHW-iR-rAA"/>
|
||||
<constraint firstItem="zml-eW-DsI" firstAttribute="top" secondItem="Rqr-bu-crx" secondAttribute="top" constant="14" id="c1k-EY-nwQ"/>
|
||||
<constraint firstItem="oec-Ee-6ha" firstAttribute="top" secondItem="zml-eW-DsI" secondAttribute="bottom" constant="4" id="lV9-S0-yy4"/>
|
||||
<constraint firstItem="oec-Ee-6ha" firstAttribute="trailing" secondItem="zml-eW-DsI" secondAttribute="trailing" id="rfO-2Z-g12"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6iM-A6-4JK" userLabel="Height Box">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="68"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Apa-nH-KWJ">
|
||||
<rect key="frame" x="16" y="14" width="288" height="40"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="zhI-92-6JG">
|
||||
<rect key="frame" x="0.0" y="0.0" width="288" height="40"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="zhI-92-6JG" firstAttribute="top" secondItem="Apa-nH-KWJ" secondAttribute="top" id="7CP-bg-Id3"/>
|
||||
<constraint firstAttribute="bottom" secondItem="zhI-92-6JG" secondAttribute="bottom" id="LeB-Rl-mPU"/>
|
||||
<constraint firstItem="zhI-92-6JG" firstAttribute="leading" secondItem="Apa-nH-KWJ" secondAttribute="leading" id="OuL-Na-mKo"/>
|
||||
<constraint firstAttribute="trailing" secondItem="zhI-92-6JG" secondAttribute="trailing" id="y82-L8-vTL"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="Apa-nH-KWJ" secondAttribute="bottom" constant="14" id="8P4-RM-XZb"/>
|
||||
<constraint firstAttribute="height" constant="68" id="Fl4-Tb-OER"/>
|
||||
<constraint firstItem="Apa-nH-KWJ" firstAttribute="top" secondItem="6iM-A6-4JK" secondAttribute="top" constant="14" id="TNG-pv-uE8"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Apa-nH-KWJ" secondAttribute="trailing" constant="16" id="XSN-g6-2W4"/>
|
||||
<constraint firstItem="Apa-nH-KWJ" firstAttribute="leading" secondItem="6iM-A6-4JK" secondAttribute="leading" constant="16" id="cR5-Kq-pEJ"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="QEP-6s-YTM" secondAttribute="trailing" constant="24" id="3j3-fg-BQI"/>
|
||||
<constraint firstAttribute="height" constant="56" id="4qT-ha-p75"/>
|
||||
<constraint firstItem="tdV-a8-fmG" firstAttribute="top" secondItem="87p-Qg-8f3" secondAttribute="top" constant="18" id="9k0-qk-CIy"/>
|
||||
<constraint firstItem="Rqr-bu-crx" firstAttribute="leading" secondItem="87p-Qg-8f3" secondAttribute="leading" constant="16" id="QE7-5e-hao"/>
|
||||
<constraint firstItem="tdV-a8-fmG" firstAttribute="leading" secondItem="87p-Qg-8f3" secondAttribute="leading" constant="56" id="eId-mI-aTk"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Rqr-bu-crx" secondAttribute="trailing" constant="24" id="eWu-5d-rwV"/>
|
||||
<constraint firstItem="Rqr-bu-crx" firstAttribute="top" secondItem="87p-Qg-8f3" secondAttribute="top" constant="18" id="gCE-au-jty"/>
|
||||
<constraint firstItem="QEP-6s-YTM" firstAttribute="top" secondItem="87p-Qg-8f3" secondAttribute="top" constant="18" id="pQh-mf-RQ7"/>
|
||||
<constraint firstAttribute="trailing" secondItem="tdV-a8-fmG" secondAttribute="trailing" constant="24" id="wOw-dF-lsK"/>
|
||||
<constraint firstItem="QEP-6s-YTM" firstAttribute="leading" secondItem="87p-Qg-8f3" secondAttribute="leading" constant="56" id="xIy-mT-cu9"/>
|
||||
<constraint firstItem="tdV-a8-fmG" firstAttribute="leading" secondItem="Rqr-bu-crx" secondAttribute="leading" id="1s7-bh-347"/>
|
||||
<constraint firstAttribute="height" constant="64" id="4qT-ha-p75"/>
|
||||
<constraint firstItem="QEP-6s-YTM" firstAttribute="top" secondItem="Rqr-bu-crx" secondAttribute="top" id="7qG-zS-yqf"/>
|
||||
<constraint firstItem="6iM-A6-4JK" firstAttribute="trailing" secondItem="Rqr-bu-crx" secondAttribute="trailing" id="BdC-p6-tnB"/>
|
||||
<constraint firstItem="Rqr-bu-crx" firstAttribute="leading" secondItem="87p-Qg-8f3" secondAttribute="leading" id="Fkj-U2-xyQ"/>
|
||||
<constraint firstItem="6iM-A6-4JK" firstAttribute="leading" secondItem="Rqr-bu-crx" secondAttribute="leading" id="K40-dq-JmP"/>
|
||||
<constraint firstItem="Rqr-bu-crx" firstAttribute="top" secondItem="87p-Qg-8f3" secondAttribute="top" id="N7H-ZL-K7y"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Rqr-bu-crx" secondAttribute="trailing" id="QH4-pv-oKn"/>
|
||||
<constraint firstItem="QEP-6s-YTM" firstAttribute="bottom" secondItem="Rqr-bu-crx" secondAttribute="bottom" id="SmI-QQ-bUn"/>
|
||||
<constraint firstItem="QEP-6s-YTM" firstAttribute="trailing" secondItem="Rqr-bu-crx" secondAttribute="trailing" id="Ttu-kY-vjH"/>
|
||||
<constraint firstItem="tdV-a8-fmG" firstAttribute="top" secondItem="Rqr-bu-crx" secondAttribute="top" id="axQ-FJ-jAM"/>
|
||||
<constraint firstItem="tdV-a8-fmG" firstAttribute="bottom" secondItem="Rqr-bu-crx" secondAttribute="bottom" id="d05-rK-0iZ"/>
|
||||
<constraint firstItem="tdV-a8-fmG" firstAttribute="trailing" secondItem="Rqr-bu-crx" secondAttribute="trailing" id="fP8-Fd-bYt"/>
|
||||
<constraint firstItem="6iM-A6-4JK" firstAttribute="top" secondItem="Rqr-bu-crx" secondAttribute="bottom" id="gCd-UZ-my5"/>
|
||||
<constraint firstItem="QEP-6s-YTM" firstAttribute="leading" secondItem="Rqr-bu-crx" secondAttribute="leading" id="tfA-kG-wTD"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="layer.borderUIColor">
|
||||
|
@ -273,8 +252,8 @@
|
|||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gcR-zj-b7P">
|
||||
<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"/>
|
||||
<button hidden="YES" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4IJ-pR-Ztp" userLabel="Go" customClass="MWMStartButton">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="48"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="goButton"/>
|
||||
<inset key="contentEdgeInsets" minX="8" minY="0.0" maxX="8" maxY="0.0"/>
|
||||
<state key="normal" title="Start"/>
|
||||
|
@ -283,9 +262,6 @@
|
|||
</state>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="fontName" value="regular17"/>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="4"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="localizedText" value="p2p_start"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="textColorName" value="white"/>
|
||||
<userDefinedRuntimeAttribute type="string" keyPath="backgroundColorName" value="linkBlue"/>
|
||||
|
@ -299,6 +275,10 @@
|
|||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="0.80000000000000004" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="48" id="5GN-4g-vV1"/>
|
||||
<constraint firstAttribute="trailing" secondItem="4IJ-pR-Ztp" secondAttribute="trailing" id="ML1-Xc-dlH"/>
|
||||
<constraint firstItem="4IJ-pR-Ztp" firstAttribute="top" secondItem="gcR-zj-b7P" secondAttribute="top" id="O3s-Ji-gI9"/>
|
||||
<constraint firstItem="4IJ-pR-Ztp" firstAttribute="leading" secondItem="gcR-zj-b7P" secondAttribute="leading" id="VKp-pp-FKT"/>
|
||||
<constraint firstAttribute="bottom" secondItem="4IJ-pR-Ztp" secondAttribute="bottom" id="iof-B4-bI3"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="color" keyPath="layer.borderUIColor">
|
||||
|
@ -316,15 +296,12 @@
|
|||
<constraint firstItem="gcR-zj-b7P" firstAttribute="leading" secondItem="u2u-Vb-2eH" secondAttribute="leading" id="1RD-kG-W2O"/>
|
||||
<constraint firstAttribute="trailing" secondItem="87p-Qg-8f3" secondAttribute="trailing" id="5wh-lx-rUz"/>
|
||||
<constraint firstItem="3s2-BV-X5i" firstAttribute="top" secondItem="u2u-Vb-2eH" secondAttribute="top" id="8Qb-GY-2hU"/>
|
||||
<constraint firstItem="87p-Qg-8f3" firstAttribute="top" secondItem="3s2-BV-X5i" secondAttribute="bottom" constant="36" id="8nt-tf-wyq"/>
|
||||
<constraint firstItem="87p-Qg-8f3" firstAttribute="leading" secondItem="u2u-Vb-2eH" secondAttribute="leading" id="9bA-9R-pwq"/>
|
||||
<constraint firstAttribute="bottom" secondItem="gcR-zj-b7P" secondAttribute="bottom" id="QYs-r4-Jyl"/>
|
||||
<constraint firstItem="87p-Qg-8f3" firstAttribute="top" secondItem="dCk-ko-ZXf" secondAttribute="bottom" constant="20" id="Wdh-lF-PT4"/>
|
||||
<constraint firstAttribute="trailing" secondItem="dCk-ko-ZXf" secondAttribute="trailing" id="ZuD-Xf-f8d"/>
|
||||
<constraint firstItem="3s2-BV-X5i" firstAttribute="leading" secondItem="u2u-Vb-2eH" secondAttribute="leading" id="e90-R4-YQR"/>
|
||||
<constraint firstAttribute="trailing" secondItem="3s2-BV-X5i" secondAttribute="trailing" id="lnu-7l-aPG"/>
|
||||
<constraint firstAttribute="trailing" secondItem="gcR-zj-b7P" secondAttribute="trailing" id="n9j-dG-kOB"/>
|
||||
<constraint firstItem="dCk-ko-ZXf" firstAttribute="leading" secondItem="u2u-Vb-2eH" secondAttribute="leading" id="t6m-zB-7rK"/>
|
||||
<constraint firstItem="dCk-ko-ZXf" firstAttribute="top" secondItem="3s2-BV-X5i" secondAttribute="bottom" id="uv5-No-Ghd"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
|
@ -348,24 +325,26 @@
|
|||
<outlet property="backButton" destination="a4n-5I-PN3" id="42W-5B-Z8i"/>
|
||||
<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"/>
|
||||
<outlet property="errorBox" destination="QEP-6s-YTM" id="kH0-yP-1Gk"/>
|
||||
<outlet property="goButton" destination="4IJ-pR-Ztp" id="48a-At-Nqq"/>
|
||||
<outlet property="heightBox" destination="6iM-A6-4JK" id="cav-Cj-Aqr"/>
|
||||
<outlet property="heightBoxHeight" destination="Fl4-Tb-OER" id="MEr-ms-WF4"/>
|
||||
<outlet property="heightProfileImage" destination="zhI-92-6JG" id="BAQ-2W-WFu"/>
|
||||
<outlet property="layout" destination="YwC-vB-4LF" id="Hta-la-OdY"/>
|
||||
<outlet property="pedestrian" destination="VhE-hA-Leo" id="R3O-th-Jw0"/>
|
||||
<outlet property="planningBox" destination="tdV-a8-fmG" id="dR4-f7-H2J"/>
|
||||
<outlet property="resultLabel" destination="zml-eW-DsI" id="GaF-AU-thr"/>
|
||||
<outlet property="resultsBox" destination="Rqr-bu-crx" id="MgA-Aj-m5e"/>
|
||||
<outlet property="resultsBoxHeight" destination="bHW-iR-rAA" id="gtD-94-xk7"/>
|
||||
<outlet property="statusBox" destination="87p-Qg-8f3" id="mSF-4e-CPU"/>
|
||||
<outlet property="statusBoxHeight" destination="4qT-ha-p75" id="Ias-po-Adc"/>
|
||||
<outlet property="statusBoxHeight" destination="4qT-ha-p75" id="e6i-4p-0cu"/>
|
||||
<outlet property="vehicle" destination="jDl-pu-eov" id="awM-KI-2xO"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="448" y="574"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="ic_checkmark" width="28" height="28"/>
|
||||
<image name="ic_nav_bar_back" width="14" height="22"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
typedef void (^TMWMVoidBlock)();
|
||||
typedef void (^MWMStringBlock)(NSString *);
|
||||
typedef void (^MWMImageBlock)(UIImage *);
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
|
||||
+ (MWMRouter *)router;
|
||||
|
||||
+ (BOOL)hasRouteAltitude;
|
||||
|
||||
@property(nonatomic, readonly) MWMRoutePoint startPoint;
|
||||
@property(nonatomic, readonly) MWMRoutePoint finishPoint;
|
||||
@property(nonatomic) routing::RouterType type;
|
||||
|
@ -19,6 +21,7 @@
|
|||
- (void)rebuildWithBestRouter:(BOOL)bestRouter;
|
||||
- (void)start;
|
||||
- (void)stop;
|
||||
- (void)routeAltitudeImageForSize:(CGSize)size completion:(MWMImageBlock)block;
|
||||
|
||||
- (instancetype)init __attribute__((unavailable("call +router instead")));
|
||||
- (instancetype)copy __attribute__((unavailable("call +router instead")));
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#import "MapViewController.h"
|
||||
#import "MapsAppDelegate.h"
|
||||
#import "Statistics.h"
|
||||
#import "UIImage+RGBAData.h"
|
||||
|
||||
#include "Framework.h"
|
||||
|
||||
|
@ -23,6 +24,8 @@ using namespace routing;
|
|||
|
||||
namespace
|
||||
{
|
||||
char const * kRenderAltitudeImagesQueueLabel = "mapsme.mwmrouter.renderAltitudeImagesQueue";
|
||||
|
||||
MWMRoutePoint lastLocationPoint()
|
||||
{
|
||||
CLLocation * lastLocation = [MWMLocationManager lastLocation];
|
||||
|
@ -37,6 +40,9 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
|
|||
@property(nonatomic, readwrite) MWMRoutePoint startPoint;
|
||||
@property(nonatomic, readwrite) MWMRoutePoint finishPoint;
|
||||
|
||||
@property(nonatomic) NSMutableDictionary<NSValue *, NSData *> * altitudeImagesData;
|
||||
@property(nonatomic) dispatch_queue_t renderAltitudeImagesQueue;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMRouter
|
||||
|
@ -51,11 +57,15 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
|
|||
return router;
|
||||
}
|
||||
|
||||
+ (BOOL)hasRouteAltitude { return GetFramework().HasRouteAltitude(); }
|
||||
- (instancetype)initRouter
|
||||
{
|
||||
self = [super init];
|
||||
if (self)
|
||||
{
|
||||
self.altitudeImagesData = [@{} mutableCopy];
|
||||
self.renderAltitudeImagesQueue =
|
||||
dispatch_queue_create(kRenderAltitudeImagesQueueLabel, DISPATCH_QUEUE_SERIAL);
|
||||
[self resetPoints];
|
||||
[MWMLocationManager addObserver:self];
|
||||
[MWMFrameworkListener addObserver:self];
|
||||
|
@ -119,6 +129,8 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
|
|||
|
||||
- (void)rebuildWithBestRouter:(BOOL)bestRouter
|
||||
{
|
||||
[self clearAltitudeImagesData];
|
||||
|
||||
if (self.startPoint.IsMyPosition())
|
||||
{
|
||||
[Statistics logEvent:kStatPointToPoint
|
||||
|
@ -237,6 +249,7 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
|
|||
|
||||
- (void)doStop
|
||||
{
|
||||
[self clearAltitudeImagesData];
|
||||
GetFramework().CloseRouting();
|
||||
MapsAppDelegate * app = [MapsAppDelegate theApp];
|
||||
app.routingPlaneMode = MWMRoutingPlaneModeNone;
|
||||
|
@ -257,6 +270,49 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi
|
|||
[[MWMNavigationDashboardManager manager] updateFollowingInfo:info];
|
||||
}
|
||||
|
||||
- (void)routeAltitudeImageForSize:(CGSize)size completion:(MWMImageBlock)block
|
||||
{
|
||||
dispatch_async(self.renderAltitudeImagesQueue, ^{
|
||||
if (![MWMRouter hasRouteAltitude])
|
||||
return;
|
||||
CGFloat const screenScale = [UIScreen mainScreen].scale;
|
||||
CGSize const scaledSize = {.width = size.width * screenScale,
|
||||
.height = size.height * screenScale};
|
||||
uint32_t const width = static_cast<uint32_t>(scaledSize.width);
|
||||
uint32_t const height = static_cast<uint32_t>(scaledSize.height);
|
||||
if (width == 0 || height == 0)
|
||||
return;
|
||||
|
||||
NSValue * sizeValue = [NSValue valueWithCGSize:scaledSize];
|
||||
NSData * imageData = self.altitudeImagesData[sizeValue];
|
||||
if (!imageData)
|
||||
{
|
||||
vector<uint8_t> imageRGBAData;
|
||||
if (!GetFramework().GenerateRouteAltitudeChart(width, height, imageRGBAData))
|
||||
return;
|
||||
if (imageRGBAData.empty())
|
||||
return;
|
||||
imageData = [NSData dataWithBytes:imageRGBAData.data() length:imageRGBAData.size()];
|
||||
self.altitudeImagesData[sizeValue] = imageData;
|
||||
}
|
||||
|
||||
UIImage * altitudeImage = [UIImage imageWithRGBAData:imageData width:width height:height];
|
||||
if (altitudeImage)
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
block(altitudeImage);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
- (void)clearAltitudeImagesData
|
||||
{
|
||||
dispatch_async(self.renderAltitudeImagesQueue, ^{
|
||||
[self.altitudeImagesData removeAllObjects];
|
||||
});
|
||||
}
|
||||
|
||||
#pragma mark - MWMLocationObserver
|
||||
|
||||
- (void)onLocationUpdate:(location::GpsInfo const &)info
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_arrow_up_and_down.png",
|
||||
"filename" : "icArrowDown.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_arrow_up_and_down@2x.png",
|
||||
"filename" : "icArrowDown@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_arrow_up_and_down@3x.png",
|
||||
"filename" : "icArrowDown@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
|
|
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_arrow_up_and_down.imageset/icArrowDown.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_arrow_up_and_down.imageset/icArrowDown.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 160 B |
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_arrow_up_and_down.imageset/icArrowDown@2x.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_arrow_up_and_down.imageset/icArrowDown@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 219 B |
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_arrow_up_and_down.imageset/icArrowDown@3x.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/NavigationDashboard/ic_arrow_up_and_down.imageset/icArrowDown@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 290 B |
Binary file not shown.
Before Width: | Height: | Size: 131 B |
Binary file not shown.
Before Width: | Height: | Size: 177 B |
Binary file not shown.
Before Width: | Height: | Size: 225 B |
|
@ -313,6 +313,8 @@
|
|||
34DCDE3B1C75CE1F00652CAC /* MWMOpeningHoursDeleteScheduleTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 347FD85A1C60B2CE002FB65E /* MWMOpeningHoursDeleteScheduleTableViewCell.mm */; };
|
||||
34DDD5341BFDB0B600407F2F /* MWMMapDownloaderViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 342AF0DF1BE24E9A0016F3AE /* MWMMapDownloaderViewController.mm */; };
|
||||
34DDD5351BFDB0C600407F2F /* MWMBaseMapDownloaderViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 341223BA1BEB58FA007227E9 /* MWMBaseMapDownloaderViewController.mm */; };
|
||||
34E0B8491D7EED0C00735786 /* UIImage+RGBAData.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34E0B8481D7EED0C00735786 /* UIImage+RGBAData.mm */; };
|
||||
34E0B84A1D7EED0C00735786 /* UIImage+RGBAData.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34E0B8481D7EED0C00735786 /* UIImage+RGBAData.mm */; };
|
||||
34E0EECE1CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34E0EECC1CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.mm */; };
|
||||
34E0EECF1CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34E0EECC1CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.mm */; };
|
||||
34E0EED01CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34E0EECD1CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.xib */; };
|
||||
|
@ -1206,6 +1208,8 @@
|
|||
34D37E151CD2373C001DEFC3 /* MWMMapDownloaderCellHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderCellHeader.h; sourceTree = "<group>"; };
|
||||
34D37E161CD2373C001DEFC3 /* MWMMapDownloaderCellHeader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderCellHeader.mm; sourceTree = "<group>"; };
|
||||
34DCDE3D1C76195F00652CAC /* MWMMapDownloaderProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderProtocol.h; sourceTree = "<group>"; };
|
||||
34E0B8471D7EEC2A00735786 /* UIImage+RGBAData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImage+RGBAData.h"; sourceTree = "<group>"; };
|
||||
34E0B8481D7EED0C00735786 /* UIImage+RGBAData.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "UIImage+RGBAData.mm"; sourceTree = "<group>"; };
|
||||
34E0EECA1CC4F36B008E4919 /* MWMMapDownloaderTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderTypes.h; sourceTree = "<group>"; };
|
||||
34E0EECB1CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapDownloaderButtonTableViewCell.h; sourceTree = "<group>"; };
|
||||
34E0EECC1CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapDownloaderButtonTableViewCell.mm; sourceTree = "<group>"; };
|
||||
|
@ -2566,6 +2570,8 @@
|
|||
F64DA8011C524BDE00330E9E /* UISwitch+RuntimeAttributes.m */,
|
||||
34FED54E1D21121000183B1B /* CLLocation+Mercator.h */,
|
||||
34FED54F1D21121000183B1B /* CLLocation+Mercator.mm */,
|
||||
34E0B8471D7EEC2A00735786 /* UIImage+RGBAData.h */,
|
||||
34E0B8481D7EED0C00735786 /* UIImage+RGBAData.mm */,
|
||||
);
|
||||
name = Categories;
|
||||
sourceTree = "<group>";
|
||||
|
@ -3663,6 +3669,7 @@
|
|||
342EE4111C43DAA7009F6A49 /* MWMAuthorizationWebViewLoginViewController.mm in Sources */,
|
||||
3438CDFC1B862F5C0051AA78 /* MWMSearchContentView.mm in Sources */,
|
||||
34479C7C1C60C6130065D261 /* MWMFrameworkListener.mm in Sources */,
|
||||
34E0B8491D7EED0C00735786 /* UIImage+RGBAData.mm in Sources */,
|
||||
3485C0121B85C20E00F7712D /* MWMSearchTableViewController.mm in Sources */,
|
||||
345A2DCB1D0B0EB600A7DD39 /* MWMWhatsNewBookingBicycleRoutingController.mm in Sources */,
|
||||
34D37E171CD2373C001DEFC3 /* MWMMapDownloaderCellHeader.mm in Sources */,
|
||||
|
@ -3891,6 +3898,7 @@
|
|||
F6791B141C43DF0B007A8A6E /* MWMStartButton.mm in Sources */,
|
||||
34DDD5351BFDB0C600407F2F /* MWMBaseMapDownloaderViewController.mm in Sources */,
|
||||
6741A9CE1BF340DE002C974C /* MWMSearchManager.mm in Sources */,
|
||||
34E0B84A1D7EED0C00735786 /* UIImage+RGBAData.mm in Sources */,
|
||||
F64D9CA01C899C350063FA30 /* MWMEditorViralAlert.mm in Sources */,
|
||||
345A2DCC1D0B0EB600A7DD39 /* MWMWhatsNewBookingBicycleRoutingController.mm in Sources */,
|
||||
34D37E181CD2373C001DEFC3 /* MWMMapDownloaderCellHeader.mm in Sources */,
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
+ (UIColor *)blackDividers;
|
||||
+ (UIColor *)white;
|
||||
+ (UIColor *)whitePrimaryText;
|
||||
+ (UIColor *)whitePrimaryTextHighlighted;
|
||||
+ (UIColor *)whiteSecondaryText;
|
||||
+ (UIColor *)whiteHintText;
|
||||
+ (UIColor *)whiteDividers;
|
||||
|
|
5
iphone/Maps/UIImage+RGBAData.h
Normal file
5
iphone/Maps/UIImage+RGBAData.h
Normal file
|
@ -0,0 +1,5 @@
|
|||
@interface UIImage (RGBAData)
|
||||
|
||||
+ (UIImage *)imageWithRGBAData:(NSData *)data width:(size_t)width height:(size_t)height;
|
||||
|
||||
@end
|
28
iphone/Maps/UIImage+RGBAData.mm
Normal file
28
iphone/Maps/UIImage+RGBAData.mm
Normal file
|
@ -0,0 +1,28 @@
|
|||
#import "UIImage+RGBAData.h"
|
||||
|
||||
@implementation UIImage (RGBAData)
|
||||
|
||||
+ (UIImage *)imageWithRGBAData:(NSData *)data width:(size_t)width height:(size_t)height
|
||||
{
|
||||
size_t constexpr bytesPerPixel = 4;
|
||||
size_t constexpr bitsPerComponent = 8;
|
||||
size_t constexpr bitsPerPixel = bitsPerComponent * bytesPerPixel;
|
||||
size_t const bytesPerRow = bytesPerPixel * width;
|
||||
bool constexpr shouldInterpolate = true;
|
||||
CGBitmapInfo constexpr bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaLast;
|
||||
|
||||
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, data.bytes, height * bytesPerRow, NULL);
|
||||
|
||||
CGImageRef cgImage = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitmapInfo, provider, NULL, shouldInterpolate, kCGRenderingIntentDefault);
|
||||
|
||||
UIImage * image = [UIImage imageWithCGImage:cgImage];
|
||||
|
||||
CGColorSpaceRelease(colorSpace);
|
||||
CGDataProviderRelease(provider);
|
||||
CGImageRelease(cgImage);
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
@end
|
|
@ -11,6 +11,8 @@
|
|||
342D833B1D5233E8000D8AEA /* displacement_mode_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 342D83391D5233E8000D8AEA /* displacement_mode_manager.hpp */; };
|
||||
34583BCF1C88556800F94664 /* place_page_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 34583BCD1C88556800F94664 /* place_page_info.cpp */; };
|
||||
34583BD01C88556800F94664 /* place_page_info.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34583BCE1C88556800F94664 /* place_page_info.hpp */; };
|
||||
348AB57C1D7EE0C6009F8301 /* chart_generator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 348AB57A1D7EE0C6009F8301 /* chart_generator.cpp */; };
|
||||
348AB57D1D7EE0C6009F8301 /* chart_generator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 348AB57B1D7EE0C6009F8301 /* chart_generator.hpp */; };
|
||||
34921F661BFA0A6900737D6E /* api_mark_point.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34921F611BFA0A6900737D6E /* api_mark_point.hpp */; };
|
||||
45201E931CE4AC90008A4842 /* api_mark_point.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45201E921CE4AC90008A4842 /* api_mark_point.cpp */; };
|
||||
670E39401C46C5C700E9C0A6 /* gps_tracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670E393E1C46C5C700E9C0A6 /* gps_tracker.cpp */; };
|
||||
|
@ -100,14 +102,6 @@
|
|||
F6B283081C1B03320081957A /* gps_track_storage.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F6B283001C1B03320081957A /* gps_track_storage.hpp */; };
|
||||
F6B283091C1B03320081957A /* gps_track.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F6B283011C1B03320081957A /* gps_track.cpp */; };
|
||||
F6B2830A1C1B03320081957A /* gps_track.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F6B283021C1B03320081957A /* gps_track.hpp */; };
|
||||
F6DA2A951CCE24DA00F087B5 /* libdrape.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 674A29F61B26FE62001A525C /* libdrape.a */; };
|
||||
F6DA2A971CCE24DB00F087B5 /* libdrape_frontend.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DA2A961CCE24DB00F087B5 /* libdrape_frontend.a */; };
|
||||
F6DA2A9E1CCE252600F087B5 /* libeditor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DA2A981CCE252600F087B5 /* libeditor.a */; };
|
||||
F6DA2A9F1CCE252600F087B5 /* liboauthcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DA2A991CCE252600F087B5 /* liboauthcpp.a */; };
|
||||
F6DA2AA01CCE252600F087B5 /* libplatform_tests_support.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DA2A9A1CCE252600F087B5 /* libplatform_tests_support.a */; };
|
||||
F6DA2AA11CCE252600F087B5 /* libpugixml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DA2A9B1CCE252600F087B5 /* libpugixml.a */; };
|
||||
F6DA2AA21CCE252600F087B5 /* libsdf_image.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DA2A9C1CCE252600F087B5 /* libsdf_image.a */; };
|
||||
F6DA2AA31CCE252600F087B5 /* libstb_image.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DA2A9D1CCE252600F087B5 /* libstb_image.a */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
|
@ -127,6 +121,8 @@
|
|||
342D83391D5233E8000D8AEA /* displacement_mode_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = displacement_mode_manager.hpp; sourceTree = "<group>"; };
|
||||
34583BCD1C88556800F94664 /* place_page_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = place_page_info.cpp; sourceTree = "<group>"; };
|
||||
34583BCE1C88556800F94664 /* place_page_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = place_page_info.hpp; sourceTree = "<group>"; };
|
||||
348AB57A1D7EE0C6009F8301 /* chart_generator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chart_generator.cpp; sourceTree = "<group>"; };
|
||||
348AB57B1D7EE0C6009F8301 /* chart_generator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = chart_generator.hpp; sourceTree = "<group>"; };
|
||||
34921F611BFA0A6900737D6E /* api_mark_point.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = api_mark_point.hpp; sourceTree = "<group>"; };
|
||||
45201E921CE4AC90008A4842 /* api_mark_point.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = api_mark_point.cpp; sourceTree = "<group>"; };
|
||||
670D05A41B0DF4250013A7AC /* defaults.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = defaults.xcconfig; path = ../defaults.xcconfig; sourceTree = "<group>"; };
|
||||
|
@ -389,6 +385,8 @@
|
|||
675345BD1A4054AD00A0A8C3 /* map */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
348AB57A1D7EE0C6009F8301 /* chart_generator.cpp */,
|
||||
348AB57B1D7EE0C6009F8301 /* chart_generator.hpp */,
|
||||
342D83381D5233E8000D8AEA /* displacement_mode_manager.cpp */,
|
||||
342D83391D5233E8000D8AEA /* displacement_mode_manager.hpp */,
|
||||
34583BCD1C88556800F94664 /* place_page_info.cpp */,
|
||||
|
@ -451,6 +449,7 @@
|
|||
34921F661BFA0A6900737D6E /* api_mark_point.hpp in Headers */,
|
||||
675346751A4054E800A0A8C3 /* mwm_url.hpp in Headers */,
|
||||
6753464B1A4054E800A0A8C3 /* bookmark.hpp in Headers */,
|
||||
348AB57D1D7EE0C6009F8301 /* chart_generator.hpp in Headers */,
|
||||
6753469E1A4054E800A0A8C3 /* user_mark_container.hpp in Headers */,
|
||||
675346491A4054E800A0A8C3 /* bookmark_manager.hpp in Headers */,
|
||||
F6B2830A1C1B03320081957A /* gps_track.hpp in Headers */,
|
||||
|
@ -575,6 +574,7 @@
|
|||
674C38621BFF3095000D603B /* user_mark.cpp in Sources */,
|
||||
675346641A4054E800A0A8C3 /* framework.cpp in Sources */,
|
||||
6753466A1A4054E800A0A8C3 /* geourl_process.cpp in Sources */,
|
||||
348AB57C1D7EE0C6009F8301 /* chart_generator.cpp in Sources */,
|
||||
342D833A1D5233E8000D8AEA /* displacement_mode_manager.cpp in Sources */,
|
||||
45201E931CE4AC90008A4842 /* api_mark_point.cpp in Sources */,
|
||||
675346661A4054E800A0A8C3 /* ge0_parser.cpp in Sources */,
|
||||
|
|
Loading…
Add table
Reference in a new issue