mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
[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:
committed by
Konstantin Pastbin
parent
7117a1b954
commit
3525f36919
@@ -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.
|
||||||
|
|||||||
@@ -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];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user