summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorJesse Bounds <jesse@rebounds.net>2017-05-09 12:08:41 -0700
committerGitHub <noreply@github.com>2017-05-09 12:08:41 -0700
commitb7b6706576dc196fa74bb2089d3efdf2a2b4c357 (patch)
treef854466ca4b9da06a6805a7fa6958228b8a45235 /platform
parentc69fae99a561a04cac79d2931b43e53892167a0e (diff)
downloadqtlocation-mapboxgl-b7b6706576dc196fa74bb2089d3efdf2a2b4c357.tar.gz
[ios] Use map view frame to calculate annotation view reuse adjustments (#8926)
* [ios] Use map view frame to calculate annotation view reuse adjustments The value for determining the visible viewport buffer and also the distance to move offscreen an annotation view outside of that buffer was based on the annotation view width and height. This changes that to use the map viewport width and height as constants and avoids a class of bugs where the annotation view would become detached from the tracking system when it did not have a size or was animating from a small to large size.
Diffstat (limited to 'platform')
-rw-r--r--platform/ios/src/MGLMapView.mm14
1 files changed, 6 insertions, 8 deletions
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index d6f4c1e7fa..a4c9f5194c 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -5012,8 +5012,10 @@ public:
// If the map is pitched consider the viewport to be exactly the same as the bounds.
// Otherwise, add a small buffer.
- CGFloat widthAdjustment = self.camera.pitch > 0.0 ? 0.0 : -_largestAnnotationViewSize.width * 2.0;
- CGFloat heightAdjustment = self.camera.pitch > 0.0 ? 0.0 : -_largestAnnotationViewSize.height * 2.0;
+ CGFloat largestWidth = MAX(_largestAnnotationViewSize.width, CGRectGetWidth(self.frame));
+ CGFloat largestHeight = MAX(_largestAnnotationViewSize.height, CGRectGetHeight(self.frame));
+ CGFloat widthAdjustment = self.camera.pitch > 0.0 ? 0.0 : -largestWidth * 2.0;
+ CGFloat heightAdjustment = self.camera.pitch > 0.0 ? 0.0 : -largestHeight * 2.0;
CGRect viewPort = CGRectInset(self.bounds, widthAdjustment, heightAdjustment);
NSArray *visibleAnnotations = [self visibleAnnotationsInRect:viewPort];
@@ -5092,13 +5094,9 @@ public:
if (annotationView.layer.animationKeys.count > 0) {
continue;
}
+ // Move the annotation view far out of view to the left
CGRect adjustedFrame = annotationView.frame;
- if (annotationView.layer.presentationLayer) {
- adjustedFrame.origin.x = -CGRectGetWidth(annotationView.layer.presentationLayer.frame) * 10.0;
- } else {
- // views that are added off screen do not have a presentationLayer
- adjustedFrame.origin.x = -CGRectGetWidth(adjustedFrame) * 10.0;
- }
+ adjustedFrame.origin.x = -CGRectGetWidth(self.frame) * 10.0;
annotationView.frame = adjustedFrame;
[self enqueueAnnotationViewForAnnotationContext:annotationContext];
}