[ios, osx] Optionally animate content insets change
This commit is contained in:
committed by
Minh Nguyễn
parent
07c4c54111
commit
65f6eb25b5
@@ -615,9 +615,34 @@ IB_DESIGNABLE
|
||||
When the map view’s superview is an instance of `UIViewController` whose
|
||||
`automaticallyAdjustsScrollViewInsets` property is `YES`, the value of this
|
||||
property may be overridden at any time.
|
||||
|
||||
Changing the value of this property updates the map view immediately. If you
|
||||
want to animate the change, use the `-setContentInset:animated:` method
|
||||
instead.
|
||||
*/
|
||||
@property (nonatomic, assign) UIEdgeInsets contentInset;
|
||||
|
||||
/**
|
||||
Sets the distance from the edges of the map view’s frame to the edges of the
|
||||
map view’s logical viewport with an optional transition animation.
|
||||
|
||||
When the value of this property is equal to `UIEdgeInsetsZero`, viewport
|
||||
properties such as `centerCoordinate` assume a viewport that matches the map
|
||||
view’s frame. Otherwise, those properties are inset, excluding part of the
|
||||
frame from the viewport. For instance, if the only the top edge is inset, the
|
||||
map center is effectively shifted downward.
|
||||
|
||||
When the map view’s superview is an instance of `UIViewController` whose
|
||||
`automaticallyAdjustsScrollViewInsets` property is `YES`, the value of this
|
||||
property may be overridden at any time.
|
||||
|
||||
@param contentInset The new values to inset the content by.
|
||||
@param animated Specify `YES` if you want the map view to animate the change to
|
||||
the content inset or `NO` if you want the map to inset the content
|
||||
immediately.
|
||||
*/
|
||||
- (void)setContentInset:(UIEdgeInsets)contentInset animated:(BOOL)animated;
|
||||
|
||||
#pragma mark Converting Geographic Coordinates
|
||||
|
||||
/**
|
||||
|
||||
@@ -330,9 +330,31 @@ IB_DESIGNABLE
|
||||
the map center is effectively shifted downward.
|
||||
|
||||
When the value of the `automaticallyAdjustsContentInsets` property is `YES`,
|
||||
the value of this property may be overridden at any time. */
|
||||
the value of this property may be overridden at any time.
|
||||
|
||||
Changing the value of this property updates the map view immediately. If you
|
||||
want to animate the change, use the `-setContentInsets:animated:` method
|
||||
instead. */
|
||||
@property (nonatomic, assign) NSEdgeInsets contentInsets;
|
||||
|
||||
/** Sets the distance from the edges of the map view’s frame to the edges of the
|
||||
map view’s logical viewport, with an optional transition animation.
|
||||
|
||||
When the value of this property is equal to `NSEdgeInsetsZero`, viewport
|
||||
properties such as `centerCoordinate` assume a viewport that matches the map
|
||||
view’s frame. Otherwise, those properties are inset, excluding part of the
|
||||
frame from the viewport. For instance, if the only the top edge is inset,
|
||||
the map center is effectively shifted downward.
|
||||
|
||||
When the value of the `automaticallyAdjustsContentInsets` property is `YES`,
|
||||
the value of this property may be overridden at any time.
|
||||
|
||||
@param contentInsets The new values to inset the content by.
|
||||
@param animated Specify `YES` if you want the map view to animate the change
|
||||
to the content insets or `NO` if you want the map to inset the content
|
||||
immediately. */
|
||||
- (void)setContentInsets:(NSEdgeInsets)contentInsets animated:(BOOL)animated;
|
||||
|
||||
#pragma mark Configuring gesture recognition
|
||||
/** @name Configuring How the User Interacts with the Map */
|
||||
|
||||
|
||||
@@ -810,24 +810,37 @@ std::chrono::steady_clock::duration MGLDurationInSeconds(float duration)
|
||||
return;
|
||||
}
|
||||
|
||||
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
|
||||
UIEdgeInsets contentInset = UIEdgeInsetsZero;
|
||||
CGPoint topPoint = CGPointMake(0, viewController.topLayoutGuide.length);
|
||||
contentInsets.top = [self convertPoint:topPoint fromView:viewController.view].y;
|
||||
contentInset.top = [self convertPoint:topPoint fromView:viewController.view].y;
|
||||
CGPoint bottomPoint = CGPointMake(0, CGRectGetMaxY(viewController.view.bounds)
|
||||
- viewController.bottomLayoutGuide.length);
|
||||
contentInsets.bottom = (CGRectGetMaxY(self.bounds) - [self convertPoint:bottomPoint
|
||||
fromView:viewController.view].y);
|
||||
|
||||
if ( ! UIEdgeInsetsEqualToEdgeInsets(contentInsets, self.contentInset))
|
||||
contentInset.bottom = (CGRectGetMaxY(self.bounds)
|
||||
- [self convertPoint:bottomPoint fromView:viewController.view].y);
|
||||
self.contentInset = contentInset;
|
||||
}
|
||||
|
||||
- (void)setContentInset:(UIEdgeInsets)contentInset
|
||||
{
|
||||
[self setContentInset:contentInset animated:NO];
|
||||
}
|
||||
|
||||
- (void)setContentInset:(UIEdgeInsets)contentInset animated:(BOOL)animated
|
||||
{
|
||||
if (UIEdgeInsetsEqualToEdgeInsets(contentInset, self.contentInset))
|
||||
{
|
||||
// After adjusting the content insets, move the center coordinate from
|
||||
// the old frame of reference to the new one represented by the newly
|
||||
// set content insets.
|
||||
CLLocationCoordinate2D oldCenter = self.centerCoordinate;
|
||||
self.contentInset = contentInsets;
|
||||
// Don’t call -setCenterCoordinate:, which resets the user tracking mode.
|
||||
[self _setCenterCoordinate:oldCenter animated:NO];
|
||||
return;
|
||||
}
|
||||
|
||||
// After adjusting the content inset, move the center coordinate from the
|
||||
// old frame of reference to the new one represented by the newly set
|
||||
// content inset.
|
||||
CLLocationCoordinate2D oldCenter = self.centerCoordinate;
|
||||
|
||||
_contentInset = contentInset;
|
||||
|
||||
// Don’t call -setCenterCoordinate:, which resets the user tracking mode.
|
||||
[self _setCenterCoordinate:oldCenter animated:animated];
|
||||
}
|
||||
|
||||
/// Returns the frame of inset content within the map view.
|
||||
|
||||
@@ -1117,14 +1117,24 @@ public:
|
||||
contentInsets = NSEdgeInsetsZero;
|
||||
}
|
||||
|
||||
if (!NSEdgeInsetsEqual(contentInsets, self.contentInsets)) {
|
||||
// After adjusting the content insets, move the center coordinate from
|
||||
// the old frame of reference to the new one represented by the newly
|
||||
// set content insets.
|
||||
CLLocationCoordinate2D oldCenter = self.centerCoordinate;
|
||||
self.contentInsets = contentInsets;
|
||||
self.centerCoordinate = oldCenter;
|
||||
self.contentInsets = contentInsets;
|
||||
}
|
||||
|
||||
- (void)setContentInsets:(NSEdgeInsets)contentInsets {
|
||||
[self setContentInsets:contentInsets animated:NO];
|
||||
}
|
||||
|
||||
- (void)setContentInsets:(NSEdgeInsets)contentInsets animated:(BOOL)animated {
|
||||
if (NSEdgeInsetsEqual(contentInsets, self.contentInsets)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// After adjusting the content insets, move the center coordinate from the
|
||||
// old frame of reference to the new one represented by the newly set
|
||||
// content insets.
|
||||
CLLocationCoordinate2D oldCenter = self.centerCoordinate;
|
||||
_contentInsets = contentInsets;
|
||||
[self setCenterCoordinate:oldCenter animated:animated];
|
||||
}
|
||||
|
||||
#pragma mark Mouse events and gestures
|
||||
|
||||
Reference in New Issue
Block a user