diff --git a/iphone/Maps/Bridging-Header.h b/iphone/Maps/Bridging-Header.h index 629ad003dd..d6da7daae6 100644 --- a/iphone/Maps/Bridging-Header.h +++ b/iphone/Maps/Bridging-Header.h @@ -36,6 +36,7 @@ #import "MWMSideButtons.h" #import "MWMTableViewCell.h" #import "MWMTextView.h" +#import "MWMTrafficButtonViewController.h" #import "MWMTypes.h" #import "MWMViewController.h" #import "Statistics.h" diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm index 8fc3f0a3fb..3d2cf7e7bb 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm @@ -283,16 +283,7 @@ extern NSString * const kAlohalyticsTapEventKey; - (void)routePreviewDidChangeFrame:(CGRect)newFrame { if (IPAD) - { - CGFloat const bound = newFrame.origin.x + newFrame.size.width; - self.navigationManager.leftBound = bound; - self.trafficButton.leftBound = bound; - } - else - { - CGFloat const bound = newFrame.origin.y + newFrame.size.height; - self.trafficButton.topBound = bound; - } + self.navigationManager.leftBound = newFrame.origin.x + newFrame.size.width; } - (void)setDisableStandbyOnRouteFollowing:(BOOL)disableStandbyOnRouteFollowing @@ -475,7 +466,6 @@ extern NSString * const kAlohalyticsTapEventKey; return; _topBound = topBound; self.navigationManager.topBound = topBound; - self.trafficButton.topBound = topBound; } - (void)setLeftBound:(CGFloat)leftBound @@ -484,8 +474,7 @@ extern NSString * const kAlohalyticsTapEventKey; return; if ([MWMRouter isRoutingActive]) return; - _leftBound = self.navigationManager.leftBound = self.menuController.leftBound = - self.trafficButton.leftBound = leftBound; + _leftBound = self.navigationManager.leftBound = self.menuController.leftBound = leftBound; } - (BOOL)searchHidden { return self.searchManager.state == MWMSearchManagerStateHidden; } diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/TrafficButton/MWMTrafficButtonViewController.h b/iphone/Maps/Classes/CustomViews/MapViewControls/TrafficButton/MWMTrafficButtonViewController.h index 82b259a7b7..68d6d5c8d3 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/TrafficButton/MWMTrafficButtonViewController.h +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/TrafficButton/MWMTrafficButtonViewController.h @@ -3,9 +3,9 @@ + (MWMTrafficButtonViewController *)controller; @property(nonatomic) BOOL hidden; -@property(nonatomic) CGFloat topBound; -@property(nonatomic) CGFloat leftBound; - (void)mwm_refreshUI; ++ (void)updateAvailableArea:(CGRect)frame; + @end diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/TrafficButton/MWMTrafficButtonViewController.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/TrafficButton/MWMTrafficButtonViewController.mm index b13f7a5677..044ee3905c 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/TrafficButton/MWMTrafficButtonViewController.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/TrafficButton/MWMTrafficButtonViewController.mm @@ -10,8 +10,7 @@ namespace { -CGFloat const kTopOffset = 26; -CGFloat const kTopShiftedOffset = 6; +CGFloat const kTopOffset = 6; NSArray * imagesWithName(NSString * name) { @@ -37,6 +36,7 @@ NSArray * imagesWithName(NSString * name) @property(nonatomic) NSLayoutConstraint * topOffset; @property(nonatomic) NSLayoutConstraint * leftOffset; +@property(nonatomic) CGRect availableArea; @end @@ -97,31 +97,15 @@ NSArray * imagesWithName(NSString * name) [self refreshLayout]; } -- (void)setTopBound:(CGFloat)topBound -{ - if (_topBound == topBound) - return; - _topBound = topBound; - [self refreshLayout]; -} - -- (void)setLeftBound:(CGFloat)leftBound -{ - if (_leftBound == leftBound) - return; - _leftBound = leftBound; - [self refreshLayout]; -} - - (void)refreshLayout { runAsyncOnMainQueue(^{ - CGFloat const topOffset = self.topBound > 0 ? self.topBound + kTopShiftedOffset : kTopOffset; - CGFloat const leftOffset = - self.hidden ? -self.view.width : self.leftBound + kViewControlsOffsetToBounds; + auto const availableArea = self.availableArea; + auto const leftOffset = + self.hidden ? -self.view.width : availableArea.origin.x + kViewControlsOffsetToBounds; UIView * ov = self.view.superview; [ov setNeedsLayout]; - self.topOffset.constant = topOffset; + self.topOffset.constant = availableArea.origin.y + kTopOffset; self.leftOffset.constant = leftOffset; [UIView animateWithDuration:kDefaultAnimationDuration animations:^{ @@ -172,6 +156,7 @@ NSArray * imagesWithName(NSString * name) break; } } + - (IBAction)buttonTouchUpInside { if ([MWMTrafficManager state] == TrafficManager::TrafficState::Disabled) @@ -180,6 +165,15 @@ NSArray * imagesWithName(NSString * name) [MWMTrafficManager enableTraffic:NO]; } ++ (void)updateAvailableArea:(CGRect)frame +{ + auto controller = [self controller]; + if (CGRectEqualToRect(controller.availableArea, frame)) + return; + controller.availableArea = frame; + [controller refreshLayout]; +} + #pragma mark - MWMTrafficManagerObserver - (void)onTrafficStateUpdated { [self refreshAppearance]; } diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMRoutePreview.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMRoutePreview.mm index 53c1f9f093..e82cadda00 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMRoutePreview.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMRoutePreview.mm @@ -339,4 +339,11 @@ CGFloat constexpr kAdditionalHeight = 20.; return IPAD ? MWMAvailableAreaAffectDirectionsLeft : MWMAvailableAreaAffectDirectionsTop; } +#pragma mark - AvailableArea / TrafficButtonArea + +- (MWMAvailableAreaAffectDirections)trafficButtonAreaAffectDirections +{ + return IPAD ? MWMAvailableAreaAffectDirectionsLeft : MWMAvailableAreaAffectDirectionsTop; +} + @end diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 9abe355b23..26cbbc394a 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -577,6 +577,9 @@ 34F742321E0834F400AC1FD6 /* UIViewController+Navigation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34F742301E0834F400AC1FD6 /* UIViewController+Navigation.mm */; }; 34F742331E0834F400AC1FD6 /* UIViewController+Navigation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34F742301E0834F400AC1FD6 /* UIViewController+Navigation.mm */; }; 34FE4C451BCC013500066718 /* MWMMapWidgets.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34FE4C441BCC013500066718 /* MWMMapWidgets.mm */; }; + 34FE5A6E1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */; }; + 34FE5A6F1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */; }; + 34FE5A701F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */; }; 450703091E9E6CF000E8C029 /* local_ads_symbols.txt in Resources */ = {isa = PBXBuildFile; fileRef = 450703081E9E6CF000E8C029 /* local_ads_symbols.txt */; }; 4519503A1B7A3E070085DA05 /* patterns.txt in Resources */ = {isa = PBXBuildFile; fileRef = 451950391B7A3E070085DA05 /* patterns.txt */; }; 452FCA3B1B6A3DF7007019AB /* colors.txt in Resources */ = {isa = PBXBuildFile; fileRef = 452FCA3A1B6A3DF7007019AB /* colors.txt */; }; @@ -2036,6 +2039,7 @@ 34FB47581E3B928D00D94ED8 /* MWMCoreUnits.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMCoreUnits.h; sourceTree = ""; }; 34FE4C431BCC013500066718 /* MWMMapWidgets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapWidgets.h; sourceTree = ""; }; 34FE4C441BCC013500066718 /* MWMMapWidgets.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapWidgets.mm; sourceTree = ""; }; + 34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrafficButtonArea.swift; sourceTree = ""; }; 3DDB4BC31DAB98F000F4D021 /* libpartners_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpartners_api.a; path = "../../../omim-xcode-build/Debug-iphonesimulator/libpartners_api.a"; sourceTree = ""; }; 450703081E9E6CF000E8C029 /* local_ads_symbols.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = local_ads_symbols.txt; path = ../../data/local_ads_symbols.txt; sourceTree = ""; }; 451950391B7A3E070085DA05 /* patterns.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = patterns.txt; path = ../../data/patterns.txt; sourceTree = ""; }; @@ -3424,6 +3428,7 @@ 34E7761D1F14DB48003040B3 /* PlacePageArea.swift */, 3444DFCB1F1760B900E73099 /* WidgetsArea.swift */, 3444DFDC1F18A5AF00E73099 /* SideButtonsArea.swift */, + 34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */, ); path = AvailableArea; sourceTree = ""; @@ -5478,6 +5483,7 @@ FAA614B8155F16950031C345 /* AddSetVC.mm in Sources */, F6E2FF681E097BA00083EBEC /* MWMUnitsController.mm in Sources */, 34AC8FCE1EFC028600E7F910 /* MWMNavigationInfoView.mm in Sources */, + 34FE5A6E1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */, 34ABA6301C2D58F300FE1BEC /* MWMInputEmailValidator.mm in Sources */, F6E2FE9C1E097BA00083EBEC /* MWMiPhonePlacePageLayoutImpl.mm in Sources */, 3454D7C71E07F045004AF2AD /* UIButton+RuntimeAttributes.mm in Sources */, @@ -5791,6 +5797,7 @@ F6E2FD6B1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */, 6741AA021BF340DE002C974C /* BookmarksRootVC.mm in Sources */, 34AC8FD31EFC02CC00E7F910 /* MWMNavigationInfoView.mm in Sources */, + 34FE5A6F1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */, F6E2FF691E097BA00083EBEC /* MWMUnitsController.mm in Sources */, 6741AA031BF340DE002C974C /* MWMActivityViewController.mm in Sources */, F6E2FE9D1E097BA00083EBEC /* MWMiPhonePlacePageLayoutImpl.mm in Sources */, @@ -6104,6 +6111,7 @@ F6E2FD6C1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.mm in Sources */, F6E2FF6A1E097BA00083EBEC /* MWMUnitsController.mm in Sources */, 34AC8FD41EFC02CC00E7F910 /* MWMNavigationInfoView.mm in Sources */, + 34FE5A701F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */, 3454D7BA1E07F045004AF2AD /* CALayer+RuntimeAttributes.mm in Sources */, F6E2FE9E1E097BA00083EBEC /* MWMiPhonePlacePageLayoutImpl.mm in Sources */, 340475721E081A4600C92850 /* MWMSettings.mm in Sources */, diff --git a/iphone/Maps/UI/AvailableArea/TrafficButtonArea.swift b/iphone/Maps/UI/AvailableArea/TrafficButtonArea.swift new file mode 100644 index 0000000000..77279c8942 --- /dev/null +++ b/iphone/Maps/UI/AvailableArea/TrafficButtonArea.swift @@ -0,0 +1,21 @@ +final class TrafficButtonArea: AvailableArea { + override func isAreaAffectingView(_ other: UIView) -> Bool { + return !other.trafficButtonAreaAffectDirections.isEmpty + } + + override func addAffectingView(_ other: UIView) { + let ov = other.trafficButtonAreaAffectView + let directions = ov.trafficButtonAreaAffectDirections + addConstraints(otherView: ov, directions: directions) + } + + override func notifyObserver() { + MWMTrafficButtonViewController.updateAvailableArea(frame) + } +} + +extension UIView { + var trafficButtonAreaAffectDirections: MWMAvailableAreaAffectDirections { return [] } + + var trafficButtonAreaAffectView: UIView { return self } +} diff --git a/iphone/Maps/UI/Search/SearchBar.swift b/iphone/Maps/UI/Search/SearchBar.swift index 630245a928..6d6a1ebeb6 100644 --- a/iphone/Maps/UI/Search/SearchBar.swift +++ b/iphone/Maps/UI/Search/SearchBar.swift @@ -6,4 +6,6 @@ class SearchBar: SolidTouchView { override var placePageAreaAffectDirections: MWMAvailableAreaAffectDirections { return alternative(iPhone: [], iPad: .left) } override var widgetsAreaAffectDirections: MWMAvailableAreaAffectDirections { return alternative(iPhone: [], iPad: .left) } + + override var trafficButtonAreaAffectDirections: MWMAvailableAreaAffectDirections { return alternative(iPhone: .top, iPad: .left) } } diff --git a/iphone/Maps/UI/Storyboard/Main.storyboard b/iphone/Maps/UI/Storyboard/Main.storyboard index a9a9c6b5f0..3c3badd948 100644 --- a/iphone/Maps/UI/Storyboard/Main.storyboard +++ b/iphone/Maps/UI/Storyboard/Main.storyboard @@ -45,16 +45,24 @@ + + + + +