[release-74-visible-area] [ios] Updated traffic button available area estimation.

This commit is contained in:
Ilya Grechuhin 2017-07-14 16:30:27 +03:00 committed by r.kuznetsov
parent 81680e025d
commit 33e9867346
9 changed files with 67 additions and 37 deletions

View file

@ -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"

View file

@ -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; }

View file

@ -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

View file

@ -10,8 +10,7 @@
namespace
{
CGFloat const kTopOffset = 26;
CGFloat const kTopShiftedOffset = 6;
CGFloat const kTopOffset = 6;
NSArray<UIImage *> * imagesWithName(NSString * name)
{
@ -37,6 +36,7 @@ NSArray<UIImage *> * imagesWithName(NSString * name)
@property(nonatomic) NSLayoutConstraint * topOffset;
@property(nonatomic) NSLayoutConstraint * leftOffset;
@property(nonatomic) CGRect availableArea;
@end
@ -97,31 +97,15 @@ NSArray<UIImage *> * 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<UIImage *> * imagesWithName(NSString * name)
break;
}
}
- (IBAction)buttonTouchUpInside
{
if ([MWMTrafficManager state] == TrafficManager::TrafficState::Disabled)
@ -180,6 +165,15 @@ NSArray<UIImage *> * 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]; }

View file

@ -339,4 +339,11 @@ CGFloat constexpr kAdditionalHeight = 20.;
return IPAD ? MWMAvailableAreaAffectDirectionsLeft : MWMAvailableAreaAffectDirectionsTop;
}
#pragma mark - AvailableArea / TrafficButtonArea
- (MWMAvailableAreaAffectDirections)trafficButtonAreaAffectDirections
{
return IPAD ? MWMAvailableAreaAffectDirectionsLeft : MWMAvailableAreaAffectDirectionsTop;
}
@end

View file

@ -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 = "<group>"; };
34FE4C431BCC013500066718 /* MWMMapWidgets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMMapWidgets.h; sourceTree = "<group>"; };
34FE4C441BCC013500066718 /* MWMMapWidgets.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapWidgets.mm; sourceTree = "<group>"; };
34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrafficButtonArea.swift; sourceTree = "<group>"; };
3DDB4BC31DAB98F000F4D021 /* libpartners_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpartners_api.a; path = "../../../omim-xcode-build/Debug-iphonesimulator/libpartners_api.a"; sourceTree = "<group>"; };
450703081E9E6CF000E8C029 /* local_ads_symbols.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = local_ads_symbols.txt; path = ../../data/local_ads_symbols.txt; sourceTree = "<group>"; };
451950391B7A3E070085DA05 /* patterns.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = patterns.txt; path = ../../data/patterns.txt; sourceTree = "<group>"; };
@ -3424,6 +3428,7 @@
34E7761D1F14DB48003040B3 /* PlacePageArea.swift */,
3444DFCB1F1760B900E73099 /* WidgetsArea.swift */,
3444DFDC1F18A5AF00E73099 /* SideButtonsArea.swift */,
34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */,
);
path = AvailableArea;
sourceTree = "<group>";
@ -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 */,

View file

@ -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 }
}

View file

@ -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) }
}

View file

@ -45,16 +45,24 @@
<rect key="frame" x="0.0" y="20" width="320" height="548"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
<view hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QKu-4A-UgP" customClass="TrafficButtonArea" customModule="cm_beta" customModuleProvider="target">
<rect key="frame" x="0.0" y="20" width="320" height="548"/>
<color key="backgroundColor" red="0.0" green="0.0" blue="1" alpha="0.20000000000000001" colorSpace="calibratedRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="0.8666666666666667" green="0.8666666666666667" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="QKu-4A-UgP" secondAttribute="bottom" priority="100" id="488-ng-pRw"/>
<constraint firstItem="QKu-4A-UgP" firstAttribute="top" secondItem="USG-6L-Uhw" secondAttribute="top" priority="100" constant="20" id="60l-kI-cp7"/>
<constraint firstAttribute="trailing" secondItem="awj-9E-eBS" secondAttribute="trailing" priority="100" id="6cS-mj-HcX"/>
<constraint firstItem="FFY-Dy-Wou" firstAttribute="leading" secondItem="USG-6L-Uhw" secondAttribute="leading" priority="100" id="AW8-cN-xzE"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="xJx-UU-IdV" secondAttribute="bottom" id="BqM-vp-EnJ"/>
<constraint firstItem="QKu-4A-UgP" firstAttribute="leading" secondItem="USG-6L-Uhw" secondAttribute="leading" priority="100" id="Gw4-fq-sLY"/>
<constraint firstAttribute="bottom" secondItem="NI8-tV-i2B" secondAttribute="bottom" priority="100" id="HW4-dR-LNu"/>
<constraint firstAttribute="bottomMargin" secondItem="awj-9E-eBS" secondAttribute="bottom" priority="100" id="Kf4-GM-1aY"/>
<constraint firstAttribute="trailing" secondItem="xJx-UU-IdV" secondAttribute="trailing" priority="100" id="KfO-hH-S7R"/>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="FFY-Dy-Wou" secondAttribute="bottom" id="QQc-TF-hhE"/>
<constraint firstAttribute="trailing" secondItem="QKu-4A-UgP" secondAttribute="trailing" priority="100" id="SNy-Ck-trF"/>
<constraint firstItem="NI8-tV-i2B" firstAttribute="leading" secondItem="USG-6L-Uhw" secondAttribute="leading" priority="100" id="Uf3-sL-39L"/>
<constraint firstItem="awj-9E-eBS" firstAttribute="leading" secondItem="USG-6L-Uhw" secondAttribute="leading" priority="100" id="YBB-Wd-lq6"/>
<constraint firstAttribute="bottom" secondItem="FFY-Dy-Wou" secondAttribute="bottom" priority="100" id="ZFU-IG-uZh"/>