[ios] update side buttons animation

The old implementation was rigidly tightened to the place page top bound that breaks the side buttons (zoom, location) hiding/showing logic when the PP is big.
Now the side buttons follow the PP top edge with animation and disappear animated when they out of bounds.

Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
This commit is contained in:
Kiryl Kaveryn
2025-05-22 20:21:18 +04:00
committed by Konstantin Pastbin
parent 7117a1b954
commit 3525f36919
3 changed files with 15 additions and 15 deletions

View File

@@ -59,25 +59,28 @@ CGFloat const kButtonsBottomOffset = 6;
- (void)layoutYPosition { - (void)layoutYPosition {
CGFloat const centerShift = (self.height - self.zoomIn.midY - self.zoomOut.midY) / 2; CGFloat const centerShift = (self.height - self.zoomIn.midY - self.zoomOut.midY) / 2;
self.midY = centerShift + self.superview.height / 2; [UIView animateWithDuration:kDefaultAnimationDuration
if (self.maxY > self.bottomBound) animations:^{
self.maxY = self.bottomBound; self.midY = centerShift + self.superview.height / 2;
if (self.maxY > self.bottomBound)
self.maxY = self.bottomBound;
}];
} }
- (void)fadeZoomButtonsShow:(BOOL)show { - (void)fadeZoomButtonsShow:(BOOL)show {
CGFloat const alpha = show ? 1.0 : 0.0; CGFloat const alpha = show ? 1.0 : 0.0;
[UIView animateWithDuration:kDefaultAnimationDuration [UIView animateWithDuration:kDefaultAnimationDuration
animations:^{ animations:^{
self.zoomIn.alpha = alpha; self.zoomIn.alpha = alpha;
self.zoomOut.alpha = alpha; self.zoomOut.alpha = alpha;
}]; }];
} }
- (void)fadeLocationButtonShow:(BOOL)show { - (void)fadeLocationButtonShow:(BOOL)show {
[UIView animateWithDuration:kDefaultAnimationDuration [UIView animateWithDuration:kDefaultAnimationDuration
animations:^{ animations:^{
self.location.alpha = show ? 1.0 : 0.0; self.location.alpha = show ? 1.0 : 0.0;
}]; }];
} }
// Show/hide zoom and location buttons depending on available vertical space. // Show/hide zoom and location buttons depending on available vertical space.

View File

@@ -86,11 +86,13 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
- (void)refreshLayout { - (void)refreshLayout {
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
auto const availableArea = self.availableArea; auto const availableArea = self.availableArea;
auto const leftOffset = self.hidden ? -self.view.width : availableArea.origin.x + kViewControlsOffsetToBounds; auto const fitInAvailableArea = CGRectGetMaxY(self.view.frame) < CGRectGetMaxY(availableArea) + kTopOffset;
auto const shouldHide = self.hidden || !fitInAvailableArea;
auto const leftOffset = shouldHide ? -self.view.width : availableArea.origin.x + kViewControlsOffsetToBounds;
[self.view.superview animateConstraintsWithAnimations:^{ [self.view.superview animateConstraintsWithAnimations:^{
self.topOffset.constant = availableArea.origin.y + kTopOffset; self.topOffset.constant = availableArea.origin.y + kTopOffset;
self.leftOffset.constant = leftOffset; self.leftOffset.constant = leftOffset;
self.view.alpha = self.hidden ? 0 : 1; self.view.alpha = shouldHide ? 0 : 1;
}]; }];
}); });
} }
@@ -195,8 +197,6 @@ NSArray<UIImage *> *imagesWithName(NSString *name) {
if (CGRectEqualToRect(controller.availableArea, frame)) if (CGRectEqualToRect(controller.availableArea, frame))
return; return;
controller.availableArea = frame; controller.availableArea = frame;
BOOL isHidden = frame.origin.y + frame.size.height < controller.view.origin.y + controller.view.height + kTopOffset;
[MapViewController.sharedController.controlsManager setTrafficButtonHidden:isHidden];
[controller refreshLayout]; [controller refreshLayout];
} }

View File

@@ -763,9 +763,6 @@ NSString *const kSettingsSegue = @"Map2Settings";
- (void)setPlacePageTopBound:(CGFloat)bound duration:(double)duration { - (void)setPlacePageTopBound:(CGFloat)bound duration:(double)duration {
self.visibleAreaBottom.constant = bound; self.visibleAreaBottom.constant = bound;
self.sideButtonsAreaBottom.constant = bound; self.sideButtonsAreaBottom.constant = bound;
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
[self.view layoutIfNeeded];
} completion:nil];
} }
+ (void)setViewport:(double)lat lon:(double)lon zoomLevel:(int)zoomLevel { + (void)setViewport:(double)lat lon:(double)lon zoomLevel:(int)zoomLevel {