[ios, osx] Allow zero-duration flight

For consistency with -setCamera:…, a duration of 0 jumps instantaneously to the new location, while a negative value uses the distance-dependent default.

Due to the produced curve and applied easing, flyTo() doesn’t model a parabola or ballistic trajectory, but it does simulate powered flight to some extent.
This commit is contained in:
Minh Nguyễn
2015-12-19 10:28:11 -08:00
committed by Minh Nguyễn
parent 0a9b6a82e4
commit 2cb70eac3c
4 changed files with 27 additions and 14 deletions

View File

@@ -218,14 +218,20 @@ IB_DESIGNABLE
* @param completion The block to execute after the animation finishes. */
- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion;
/** Uses a ballistic parabolic motion to "fly" the viewpoint to a different location with respect to the map with a default duration based on the length of the flight path.
/** Moves the viewpoint to a different location using a transition animation that evokes powered flight and a default duration based on the length of the flight path.
*
* The transition animation seamlessly incorporates zooming and panning to help the user find his or her bearings even after traversing a great distance.
*
* @param camera The new viewpoint.
* @param completion The block to execute after the animation finishes. */
- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion;
/** Uses a ballistic parabolic motion to "fly" the viewpoint to a different location with respect to the map with an optional transition duration.
/** Moves the viewpoint to a different location using a transition animation that evokes powered flight and an optional transition duration.
*
* The transition animation seamlessly incorporates zooming and panning to help the user find his or her bearings even after traversing a great distance.
*
* @param camera The new viewpoint.
* @param duration The amount of time, measured in seconds, that the transition animation should take. Specify `0` to use the default duration, which is based on the length of the flight path.
* @param duration The amount of time, measured in seconds, that the transition animation should take. Specify `0` to jump to the new viewpoint instantaneously. Specify a negative value to use the default duration, which is based on the length of the flight path.
* @param completion The block to execute after the animation finishes. */
- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion;

View File

@@ -249,21 +249,28 @@ IB_DESIGNABLE
@param completion The block to execute after the animation finishes. */
- (void)setCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration animationTimingFunction:(nullable CAMediaTimingFunction *)function completionHandler:(nullable void (^)(void))completion;
/** Uses a ballistic parabolic motion to “fly” the viewpoint to a different
location with respect to the map with a default duration based on the length
of the flight path.
/** Moves the viewpoint to a different location using a transition animation
that evokes powered flight and a default duration based on the length of the
flight path.
The transition animation seamlessly incorporates zooming and panning to help
the user find his or her bearings even after traversing a great distance.
@param camera The new viewpoint.
@param completion The block to execute after the animation finishes. */
- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion;
/** Uses a ballistic parabolic motion to “fly” the viewpoint to a different
location with respect to the map with an optional transition duration.
/** Moves the viewpoint to a different location using a transition animation
that evokes powered flight and an optional transition duration.
The transition animation seamlessly incorporates zooming and panning to help
the user find his or her bearings even after traversing a great distance.
@param camera The new viewpoint.
@param duration The amount of time, measured in seconds, that the transition
animation should take. Specify `0` to use the default duration, which is
based on the length of the flight path.
animation should take. Specify `0` to jump to the new viewpoint
instantaneously. Specify a negative value to use the default duration,
which is based on the length of the flight path.
@param completion The block to execute after the animation finishes. */
- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion;

View File

@@ -1813,14 +1813,14 @@ std::chrono::steady_clock::duration MGLDurationInSeconds(float duration)
- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion
{
[self flyToCamera:camera withDuration:0 completionHandler:completion];
[self flyToCamera:camera withDuration:-1 completionHandler:completion];
}
- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion
{
_mbglMap->cancelTransitions();
mbgl::CameraOptions options = [self cameraOptionsObjectForAnimatingToCamera:camera];
if (duration > 0)
if (duration >= 0)
{
options.duration = MGLDurationInSeconds(duration);
}

View File

@@ -1009,14 +1009,14 @@ public:
}
- (void)flyToCamera:(MGLMapCamera *)camera completionHandler:(nullable void (^)(void))completion {
[self flyToCamera:camera withDuration:0 completionHandler:completion];
[self flyToCamera:camera withDuration:-1 completionHandler:completion];
}
- (void)flyToCamera:(MGLMapCamera *)camera withDuration:(NSTimeInterval)duration completionHandler:(nullable void (^)(void))completion {
_mbglMap->cancelTransitions();
mbgl::CameraOptions options = [self cameraOptionsObjectForAnimatingToCamera:camera];
if (duration > 0) {
if (duration >= 0) {
options.duration = MGLDurationInSeconds(duration);
}
if (completion) {