This fixes two issues with annotation views that were exposed when
dragging them:
1) The annotation view's mapView property was not set until it was
moved (in `updateAnnotations:`) so it did not always call its delegate
back about the map view delegate dragging methods. This adds a call to
set the property when an annotation view is created so the delegate
methods are always called.
2) Since the mapView is now always set, a call to the map view's
callout view for selected annotation was added to the annotation
view drag handler. This forces the callout to close and eliminates
an issue where the callout would remain visible as an annotation
was dragged away which had the visual effect of a detached
callout.
To make 2 possible, the map views selected callout view was exposed
in the private header.
Fixed a crash on iOS 8.1 and below due to specifying the compass legend’s font weight using a font weight constant that was introduced in iOS 8.2.
Fixes#5486.
The current implementation of view backed annotations mostly relies
on the existing annotation model manager and the associated underlying
boost query implementations for annotation management. However, since
the representation of the model is a view, an image was not installed
for view backed annotations. Because the underlying annotation
management implementation is not entire comfortable working without
an image, it would report
`[INFO] {Worker}[Sprite]: Can't find sprite named 'default_marker'`
when annotation models without an image were encountered.
This updates the annotation adding logic in to create (or reuse) and
install a small, invisible image for each view backed annotation.
This changes the way the the calculation for the largest visual
annotation representation (stored in
_unionedAnnotationRepresentationSize) is done so that it includes both
images and views. The `annotationTagAtPoint` method is then able to
find annotation objects that are in a query rect formed from the
sizes of all manner of point annotation visual representations.
The `annotationTagAtPoint` method also gains new logic in a conditional
to handle annotations backed by MGLAnnotationViews. Similarly to
the image case, it filters out disabled annotations and calculates
a centered rect for the view. The hit test logic remains the same but
now works correctly for both the centered rects of both images and views.
This also fixes a bug where the `largestAnnotationViewSize` was always
holding the last annotation view size and not necessarily the largest.
This would affect when annotation views are put into a reuse queue since
the size is used to help determine when an annotation view has gone
offscreen.
A verb doesn’t make sense in this enum value. Instead, use a descriptive word for this effect and describe it in detail in the documentation comment.
Cherry-picked from 415c182946.
When using a subclass of `MGLAnnotationView` or `MGLAnnotationImage`, the following warning occurs:
`Incompatible pointer types initializing 'MyClassName *' with an expression of type 'MGLAnnotationView * _Nullable'`
This change eliminates the warning and matches Apple's implementation of `UITableViewCell`.
Cherry-picked from 1e41c151f6.
* [ios] Support for a customizable zoom gesture centering strategy.
We introduce a new MGLZoomGestureCentering enum and corresponding zoomGestureCentering property on MGLMapView.
Currently, Mapbox automatically adjusts the center of the map relative to the user's gesture location, but for some applications (e.g Uber, Lyft) it is preferable to keep the map center "locked" in response to zoom gestures.
Exisiting code will retain its current behavior without modification and will implicitly use the default value of MGLZoomGestureCenteringFollowsTouch. New code can specify MGLZoomGestureCenteringLockedInPlace to get the new "locked" behavior.
* [ios] Added -anchorPointForGesture: to MGLMapView
Cherry-picked from b915f05a06.
On each frame update, update annotation views before informing the delegate of the new frame. This allows the delegate to manipulate annotation views without fear of the SDK overriding those modifications.
iOS
- Add section headers.
- Add more detail to `make` packaging commands and emphasize that Debug
is the default build type.
- Manually checking out git submodules is no longer necessary.
Core
- Add 'Keeping up to date' section that mentions submodules.
delete[] was being called for a malloc() allocated C buffer.
Found by valgrind:
```
==23065== Mismatched free() / delete / delete []
==23065== at 0x4C2F77B: operator delete[](void*) (vg_replace_malloc.c:621)
==23065== by 0x50C5529: std::default_delete<unsigned char []>::operator()(unsigned char*) const (unique_ptr.h:119)
==23065== by 0x523EC85: std::unique_ptr<unsigned char [], std::default_delete<unsigned char []> >::reset(unsigned char*) (unique_ptr.h:581)
==23065== by 0x523E3D4: mbgl::Raster::upload(mbgl::gl::ObjectStore&) (raster.cpp:63)
==23065== by 0x520CA08: mbgl::RasterBucket::upload(mbgl::gl::ObjectStore&) (raster_bucket.cpp:16)
==23065== by 0x520E56A: mbgl::Painter::render(mbgl::style::Style const&, mbgl::FrameData const&, mbgl::SpriteAtlas&) (painter.cpp:130)
==23065== by 0x52BE15A: mbgl::Map::Impl::render() (map.cpp:265)
==23065== by 0x52BD9BE: mbgl::Map::render() (map.cpp:175)
==23065== by 0x50C9EB4: QMapboxGL::render() (qmapboxgl.cpp:579)
==23065== by 0x4056D3: MapWindow::paintGL() (mapwindow.cpp:166)
```
Ignore multipoints (as opposed to polylines and polygons) when adding annotations, just like we ignore multipolylines, multipolygons, and shape collections.
In osxapp, break multipoint features into points before adding them as annotations.
ARMv5 doesn't have a FPU and apparently the soft code for log2()
is wrong and giving weird results. log() works, so we use a log()
based log2() implementation for ARMv5.
std::atomic<bool> is implemented lock free which doesn't work
on ARMv5 and seems like the compiler is generating bogus code.
This workaround is a naive implementation using regular mutexes.
They are not supported by ARMv5 and the compiler is generating
bogus code. std::atomic might be implemented lock-free for some
types, but we are going to introduce a naive polyfill to make
sure that doesn't happen on ARMv5 (only).
Added entries to the iOS SDK changelog for #5124, #2444, #5141, #5164. Removed entries for changes made since the last release; they go in the GitHub prerelease notes but not here in this document.
Annotation views now serve as their own accessibility elements. The developer’s own subclass of MGLAnnotationView can customize the view’s accessibility frame and/or path to more accurately reflect the visual hit target.