diff options
author | Jesse Bounds <jesse@rebounds.net> | 2017-10-24 17:40:47 -0700 |
---|---|---|
committer | Jesse Bounds <jesse@rebounds.net> | 2017-10-25 14:31:55 -0700 |
commit | 91eb595463cf42c85edc7fe5b47023f8d7b75828 (patch) | |
tree | 508e67129755acfcfce5fcffbe534a18b3ffbff2 | |
parent | c9d7951e0d0ab85614ab296573e583ed44dbe7c0 (diff) | |
download | qtlocation-mapboxgl-91eb595463cf42c85edc7fe5b47023f8d7b75828.tar.gz |
[ios] Move scale bar content size invalidation to map view
-rw-r--r-- | platform/ios/src/MGLMapView.mm | 8 | ||||
-rw-r--r-- | platform/ios/src/MGLScaleBar.mm | 3 |
2 files changed, 8 insertions, 3 deletions
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm index d0d34dbfa9..740555840f 100644 --- a/platform/ios/src/MGLMapView.mm +++ b/platform/ios/src/MGLMapView.mm @@ -1015,6 +1015,14 @@ public: // This gets called when the view dimension changes, e.g. because the device is being rotated. - (void)layoutSubviews { + // Calling this here instead of in the scale bar itself because if this is done in the + // scale bar instance, it triggers a call to this this `layoutSubviews` method that + // calls `_mbglMap->setSize()` just below that triggers rendering update which triggers + // another scale bar update which causes a rendering update loop and a major performace + // degradation. The only time the scale bar's intrinsic content size _must_ invalidated + // is here as a reaction to this object's view dimension changes. + [self.scaleBar invalidateIntrinsicContentSize]; + [super layoutSubviews]; [self adjustContentInset]; diff --git a/platform/ios/src/MGLScaleBar.mm b/platform/ios/src/MGLScaleBar.mm index 1cf1caf0fe..139dffdfab 100644 --- a/platform/ios/src/MGLScaleBar.mm +++ b/platform/ios/src/MGLScaleBar.mm @@ -230,9 +230,6 @@ static const CGFloat MGLFeetPerMeter = 3.28084; CGRectGetMinY(self.frame), size.width, size.height); - - [self invalidateIntrinsicContentSize]; - [self setNeedsLayout]; } - (void)updateVisibility { |