[MAPSME-3077] [ios] Added traffic button to map screen.

This commit is contained in:
Ilya Grechuhin 2016-11-25 15:17:29 +03:00
parent 4eebd6989d
commit e85d581213
7 changed files with 238 additions and 6 deletions

View file

@ -28,7 +28,6 @@
delegate:(id<MWMBottomMenuControllerProtocol>)delegate;
- (void)mwm_refreshUI;
- (void)refreshLayout;
- (MWMTaxiCollectionView *)taxiCollectionView;
- (void)setRoutingErrorMessage:(NSString *)routingErrorMessage;

View file

@ -17,6 +17,7 @@
@property(nonatomic) BOOL hidden;
@property(nonatomic) BOOL zoomHidden;
@property(nonatomic) BOOL sideButtonsHidden;
@property(nonatomic) BOOL trafficButtonHidden;
@property(nonatomic) MWMBottomMenuState menuState;
@property(nonatomic) MWMBottomMenuState menuRestoreState;
@property(nonatomic, readonly) MWMNavigationDashboardState navigationState;
@ -30,7 +31,6 @@
#pragma mark - Layout
- (void)refreshLayout;
- (void)mwm_refreshUI;
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

View file

@ -15,6 +15,7 @@
#import "MWMSearchManager.h"
#import "MWMSideButtons.h"
#import "MWMTaxiPreviewDataSource.h"
#import "MWMTrafficButtonViewController.h"
#import "MapViewController.h"
#import "MapsAppDelegate.h"
#import "Statistics.h"
@ -39,6 +40,7 @@ extern NSString * const kAlohalyticsTapEventKey;
MWMBottomMenuControllerProtocol>
@property(nonatomic) MWMSideButtons * sideButtons;
@property(nonatomic) MWMTrafficButtonViewController * trafficButton;
@property(nonatomic) MWMBottomMenuViewController * menuController;
@property(nonatomic) id<MWMPlacePageProtocol> placePageManager;
@property(nonatomic) MWMNavigationDashboardManager * navigationManager;
@ -66,6 +68,7 @@ extern NSString * const kAlohalyticsTapEventKey;
self.ownerController = controller;
self.hidden = NO;
self.sideButtonsHidden = NO;
self.trafficButtonHidden = NO;
self.isDirectionViewHidden = YES;
self.menuState = MWMBottomMenuStateInactive;
self.menuRestoreState = MWMBottomMenuStateInactive;
@ -99,9 +102,9 @@ extern NSString * const kAlohalyticsTapEventKey;
#pragma mark - Layout
- (void)refreshLayout { [self.menuController refreshLayout]; }
- (void)mwm_refreshUI
{
[self.trafficButton mwm_refreshUI];
[self.sideButtons mwm_refreshUI];
[self.navigationManager mwm_refreshUI];
[self.searchManager mwm_refreshUI];
@ -121,6 +124,7 @@ extern NSString * const kAlohalyticsTapEventKey;
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[self.trafficButton viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[self.menuController viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Workaround needs for setting correct left bound while landscape place page is open.
self.navigationManager.leftBound = 0;
@ -309,8 +313,10 @@ extern NSString * const kAlohalyticsTapEventKey;
CGFloat const bound = newFrame.origin.x + newFrame.size.width;
if (self.searchManager.state == MWMSearchManagerStateHidden)
{
self.placePageManager.leftBound = self.menuController.leftBound =
newFrame.origin.x + newFrame.size.width;
CGFloat const leftBound = newFrame.origin.x + newFrame.size.width;
self.placePageManager.leftBound = leftBound;
self.menuController.leftBound = leftBound;
self.trafficButton.leftBound = leftBound;
}
else
{
@ -429,6 +435,13 @@ extern NSString * const kAlohalyticsTapEventKey;
return _sideButtons;
}
- (MWMTrafficButtonViewController *)trafficButton
{
if (!_trafficButton)
_trafficButton = [[MWMTrafficButtonViewController alloc] init];
return _trafficButton;
}
- (MWMBottomMenuViewController *)menuController
{
if (!_menuController)
@ -472,6 +485,7 @@ extern NSString * const kAlohalyticsTapEventKey;
return;
_hidden = hidden;
self.sideButtonsHidden = _sideButtonsHidden;
self.trafficButtonHidden = _trafficButtonHidden;
self.menuState = _menuState;
EAGLView * glView = (EAGLView *)self.ownerController.view;
glView.widgetsManager.fullScreen = hidden;
@ -489,6 +503,12 @@ extern NSString * const kAlohalyticsTapEventKey;
self.sideButtons.hidden = self.hidden || sideButtonsHidden;
}
- (void)setTrafficButtonHidden:(BOOL)trafficButtonHidden
{
_trafficButtonHidden = trafficButtonHidden;
self.trafficButton.hidden = self.hidden || trafficButtonHidden;
}
- (void)setMenuState:(MWMBottomMenuState)menuState
{
_menuState = menuState;
@ -525,7 +545,7 @@ extern NSString * const kAlohalyticsTapEventKey;
if (m != MWMRoutingPlaneModeNone)
return;
_leftBound = self.placePageManager.leftBound = self.navigationManager.leftBound =
self.menuController.leftBound = leftBound;
self.menuController.leftBound = self.trafficButton.leftBound = leftBound;
}
- (BOOL)searchHidden { return self.searchManager.state == MWMSearchManagerStateHidden; }

View file

@ -0,0 +1,10 @@
@interface MWMTrafficButtonViewController : UIViewController
+ (MWMTrafficButtonViewController *)controller;
@property(nonatomic) BOOL hidden;
@property(nonatomic) CGFloat leftBound;
- (void)mwm_refreshUI;
@end

View file

@ -0,0 +1,150 @@
#import "MWMTrafficButtonViewController.h"
#import "Common.h"
#import "MWMButton.h"
#import "MWMMapViewControlsCommon.h"
#import "MWMMapViewControlsManager.h"
#import "MapViewController.h"
#import "UIColor+MapsMeColor.h"
typedef NS_ENUM(NSUInteger, MWMTrafficButtonState) {
MWMTrafficButtonStateOff,
MWMTrafficButtonStateOn,
MWMTrafficButtonStateUpdate
};
namespace
{
CGFloat const kTopOffset = 16;
} // namespace
@interface MWMMapViewControlsManager ()
@property(nonatomic) MWMTrafficButtonViewController * trafficButton;
@end
@interface MWMTrafficButtonViewController ()
@property(nonatomic) NSLayoutConstraint * leftOffset;
@property(nonatomic) MWMTrafficButtonState state;
@end
@implementation MWMTrafficButtonViewController
+ (MWMTrafficButtonViewController *)controller
{
return [MWMMapViewControlsManager manager].trafficButton;
}
- (instancetype)init
{
self = [super init];
if (self)
{
MapViewController * ovc = [MapViewController controller];
[ovc addChildViewController:self];
[ovc.view addSubview:self.view];
[self configLayout];
self.state = MWMTrafficButtonStateOff;
}
return self;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self refreshAppearance];
}
- (void)configLayout
{
UIView * sv = self.view;
UIView * ov = sv.superview;
NSLayoutConstraint * top = [NSLayoutConstraint constraintWithItem:sv
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:ov
attribute:NSLayoutAttributeTop
multiplier:1
constant:kTopOffset];
self.leftOffset = [NSLayoutConstraint constraintWithItem:sv
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:ov
attribute:NSLayoutAttributeLeading
multiplier:1
constant:kViewControlsOffsetToBounds];
[ov addConstraints:@[ top, self.leftOffset ]];
}
- (void)mwm_refreshUI
{
[self.view mwm_refreshUI];
[self refreshAppearance];
}
- (void)setHidden:(BOOL)hidden
{
_hidden = hidden;
[self refreshLayout];
}
- (void)setLeftBound:(CGFloat)leftBound
{
_leftBound = leftBound;
[self refreshLayout];
}
- (void)setState:(MWMTrafficButtonState)state
{
_state = state;
[self refreshAppearance];
}
- (void)refreshLayout
{
runAsyncOnMainQueue(^{
CGFloat const offset =
self.hidden ? -self.view.width : self.leftBound + kViewControlsOffsetToBounds;
UIView * ov = self.view.superview;
[ov layoutIfNeeded];
self.leftOffset.constant = offset;
[UIView animateWithDuration:kDefaultAnimationDuration
animations:^{
[ov layoutIfNeeded];
}];
});
}
- (void)refreshAppearance
{
MWMButton * btn = static_cast<MWMButton *>(self.view);
switch (self.state)
{
case MWMTrafficButtonStateOff: btn.imageName = @"btn_traffic_off"; break;
case MWMTrafficButtonStateOn: btn.imageName = @"btn_traffic_on"; break;
case MWMTrafficButtonStateUpdate:
{
NSUInteger const imagesCount = 3;
NSMutableArray<UIImage *> * images = [NSMutableArray arrayWithCapacity:imagesCount];
NSString * mode = [UIColor isNightMode] ? @"dark" : @"light";
for (NSUInteger i = 1; i <= imagesCount; i += 1)
{
NSString * name =
[NSString stringWithFormat:@"btn_traffic_update_%@_%@", mode, @(i).stringValue];
[images addObject:[UIImage imageNamed:name]];
}
UIImageView * iv = btn.imageView;
iv.animationImages = images;
iv.animationDuration = 0.8;
iv.image = images.lastObject;
[iv startAnimating];
break;
}
}
}
@end

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11542" systemVersion="16B2555" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11524"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MWMTrafficButtonViewController">
<connections>
<outlet property="view" destination="WVx-0E-RoH" id="0Ev-19-Sxq"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WVx-0E-RoH" customClass="MWMButton">
<rect key="frame" x="0.0" y="0.0" width="56" height="56"/>
<constraints>
<constraint firstAttribute="height" constant="56" id="24f-V4-Vuf"/>
<constraint firstAttribute="width" constant="56" id="hko-xz-hRz"/>
</constraints>
<state key="normal" image="btn_traffic_on_light"/>
<point key="canvasLocation" x="-57" y="-113"/>
</button>
</objects>
<resources>
<image name="btn_traffic_on_light" width="56" height="56"/>
</resources>
</document>

View file

@ -150,6 +150,10 @@
346225911DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 346225901DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib */; };
346225921DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 346225901DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib */; };
34634B1B1BB42D270013573C /* MWMBottomMenuCollectionViewLandscapeCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34634B1A1BB42D270013573C /* MWMBottomMenuCollectionViewLandscapeCell.xib */; };
3463BA661DE81DB90082417F /* MWMTrafficButtonViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3463BA641DE81DB90082417F /* MWMTrafficButtonViewController.mm */; };
3463BA671DE81DB90082417F /* MWMTrafficButtonViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3463BA641DE81DB90082417F /* MWMTrafficButtonViewController.mm */; };
3463BA681DE81DB90082417F /* MWMTrafficButtonViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3463BA651DE81DB90082417F /* MWMTrafficButtonViewController.xib */; };
3463BA691DE81DB90082417F /* MWMTrafficButtonViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3463BA651DE81DB90082417F /* MWMTrafficButtonViewController.xib */; };
3465E7D81B6658C000854C4D /* MWMAPIBar.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3465E7D71B6658C000854C4D /* MWMAPIBar.mm */; };
346B42AB1DD5E3D20094EBEE /* MWMLocationNotFoundAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 346B42AA1DD5E3D20094EBEE /* MWMLocationNotFoundAlert.mm */; };
346B42AC1DD5E3D20094EBEE /* MWMLocationNotFoundAlert.mm in Sources */ = {isa = PBXBuildFile; fileRef = 346B42AA1DD5E3D20094EBEE /* MWMLocationNotFoundAlert.mm */; };
@ -1101,6 +1105,9 @@
3462258D1DDC5DBA001E8752 /* MWMSearchNoResultsAlert.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMSearchNoResultsAlert.mm; sourceTree = "<group>"; };
346225901DDC5FBA001E8752 /* MWMSearchNoResultsAlert.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMSearchNoResultsAlert.xib; sourceTree = "<group>"; };
34634B1A1BB42D270013573C /* MWMBottomMenuCollectionViewLandscapeCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMBottomMenuCollectionViewLandscapeCell.xib; sourceTree = "<group>"; };
3463BA631DE81DB90082417F /* MWMTrafficButtonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMTrafficButtonViewController.h; sourceTree = "<group>"; };
3463BA641DE81DB90082417F /* MWMTrafficButtonViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMTrafficButtonViewController.mm; sourceTree = "<group>"; };
3463BA651DE81DB90082417F /* MWMTrafficButtonViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MWMTrafficButtonViewController.xib; sourceTree = "<group>"; };
3465E7D61B6658C000854C4D /* MWMAPIBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMAPIBar.h; sourceTree = "<group>"; };
3465E7D71B6658C000854C4D /* MWMAPIBar.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMAPIBar.mm; sourceTree = "<group>"; };
346B42A91DD5E3D20094EBEE /* MWMLocationNotFoundAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMLocationNotFoundAlert.h; sourceTree = "<group>"; };
@ -2263,6 +2270,16 @@
name = 3party;
sourceTree = "<group>";
};
3463BA621DE81D760082417F /* TrafficButton */ = {
isa = PBXGroup;
children = (
3463BA631DE81DB90082417F /* MWMTrafficButtonViewController.h */,
3463BA641DE81DB90082417F /* MWMTrafficButtonViewController.mm */,
3463BA651DE81DB90082417F /* MWMTrafficButtonViewController.xib */,
);
path = TrafficButton;
sourceTree = "<group>";
};
3465E7D51B66589900854C4D /* APIBar */ = {
isa = PBXGroup;
children = (
@ -2524,6 +2541,7 @@
34BC72111B0DECAE0012A34B /* MWMMapViewControlsManager.mm */,
349C26AE1BB0116D0005DF2F /* BottomMenu */,
345C34661CE9D32500BB2224 /* SideButtons */,
3463BA621DE81D760082417F /* TrafficButton */,
3497A9321B5CF8A900F51E55 /* NavigationDashboard */,
F6F722F51AE156A000DA3DA1 /* PlacePage */,
);
@ -3596,6 +3614,7 @@
F6A750BB1BE8C7BA00981B41 /* MWMSearchHistoryMyPositionCell.xib in Resources */,
671182E31C7F0DD400CB8177 /* WorldCoasts_obsolete.mwm in Resources */,
34B7D4E41DE5921100BE2309 /* Settings.storyboard in Resources */,
3463BA681DE81DB90082417F /* MWMTrafficButtonViewController.xib in Resources */,
4A7D89C51B2EBF3B00AC843E /* resources-6plus_dark in Resources */,
FA459EB414327AF700B5BB3C /* WorldCoasts.mwm in Resources */,
FA85F633145DDDC20090E1A0 /* packed_polygons.bin in Resources */,
@ -3758,6 +3777,7 @@
6741A9711BF340DE002C974C /* copyright.html in Resources */,
6741A9721BF340DE002C974C /* MWMSearchCommonCell.xib in Resources */,
34B7D4E51DE5921100BE2309 /* Settings.storyboard in Resources */,
3463BA691DE81DB90082417F /* MWMTrafficButtonViewController.xib in Resources */,
348868EF1D8721800069BBA3 /* MWMSearchNoResults.xib in Resources */,
6741A9731BF340DE002C974C /* MWMSearchHistoryMyPositionCell.xib in Resources */,
349C3AF01D33A96B002AC7A9 /* MWMNavigationInfoView.xib in Resources */,
@ -3937,6 +3957,7 @@
34E0EECE1CC51B1D008E4919 /* MWMMapDownloaderButtonTableViewCell.mm in Sources */,
3492CC121C6DF00E0057D8E8 /* (null) in Sources */,
34257D111DC9FB0D00DC5BB9 /* MWMSearchFilterTransitioning.mm in Sources */,
3463BA661DE81DB90082417F /* MWMTrafficButtonViewController.mm in Sources */,
34A759CF1DC795140078C3AE /* MWMWhatsNewNightModeController.mm in Sources */,
F6BBF2C61B4FFB72000CF8E2 /* MWMLocationAlert.mm in Sources */,
F6B8701D1DDCB2F400BE8D94 /* MWMPPPreviewBannerCell.mm in Sources */,
@ -4185,6 +4206,7 @@
34ABA62D1C2D57D500FE1BEC /* MWMInputPasswordValidator.mm in Sources */,
F6D1A0B21D76E33D0070A015 /* MWMPlacePageData.mm in Sources */,
34257D121DC9FB0D00DC5BB9 /* MWMSearchFilterTransitioning.mm in Sources */,
3463BA671DE81DB90082417F /* MWMTrafficButtonViewController.mm in Sources */,
34ABA6171C2D185C00FE1BEC /* MWMAuthorizationOSMLoginViewController.mm in Sources */,
3492CC131C6DF00F0057D8E8 /* (null) in Sources */,
F6B8701E1DDCB2F400BE8D94 /* MWMPPPreviewBannerCell.mm in Sources */,