mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-09-17 09:10:30 +00:00
Merge pull request #1036 from aaronschubert0/ASMapNode
[ASMapNode] now supports MKMapSnapshotOptions to specify map parameters
This commit is contained in:
commit
eb7caa3ba6
@ -15,9 +15,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@interface ASMapNode : ASImageNode
|
||||
|
||||
/**
|
||||
The current region of ASMapNode. This can be set at any time and ASMapNode will animate the change. This property may be set from a background thread before the node is loaded, and will automatically be applied to define the region of the static snapshot (if .liveMap = NO) or the internal MKMapView (otherwise).
|
||||
The current options of ASMapNode. This can be set at any time and ASMapNode will animate the change.<br><br>This property may be set from a background thread before the node is loaded, and will automatically be applied to define the behavior of the static snapshot (if .liveMap = NO) or the internal MKMapView (otherwise).<br><br> Changes to the region and camera options will only be animated when when the liveMap mode is enabled, otherwise these options will be applied statically to the new snapshot. <br><br> The options object is used to specify properties even when the liveMap mode is enabled, allowing seamless transitions between the snapshot and liveMap (as well as back to the snapshot).
|
||||
*/
|
||||
@property (nonatomic, assign) MKCoordinateRegion region;
|
||||
@property (nonatomic, strong) MKMapSnapshotOptions *options;
|
||||
|
||||
/**
|
||||
This is the MKMapView that is the live map part of ASMapNode. This will be nil if .liveMap = NO. Note, MKMapView is *not* thread-safe.
|
||||
@ -41,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, weak) id <MKMapViewDelegate> mapDelegate;
|
||||
|
||||
/**
|
||||
* @discussion This method set the annotations of the static map view and also to the live map view. Passing an empty array clears the map of any annotations.
|
||||
* @discussion This method sets the annotations of the static map view and also to the live map view. Passing an empty array clears the map of any annotations.
|
||||
* @param annotations An array of objects that conform to the MKAnnotation protocol
|
||||
*/
|
||||
- (void)setAnnotations:(NSArray<id<MKAnnotation>> *)annotations;
|
||||
|
@ -18,7 +18,6 @@
|
||||
{
|
||||
ASDN::RecursiveMutex _propertyLock;
|
||||
MKMapSnapshotter *_snapshotter;
|
||||
MKMapSnapshotOptions *_options;
|
||||
NSArray *_annotations;
|
||||
CLLocationCoordinate2D _centerCoordinateOfMap;
|
||||
}
|
||||
@ -28,7 +27,7 @@
|
||||
|
||||
@synthesize needsMapReloadOnBoundsChange = _needsMapReloadOnBoundsChange;
|
||||
@synthesize mapDelegate = _mapDelegate;
|
||||
@synthesize region = _region;
|
||||
@synthesize options = _options;
|
||||
@synthesize liveMap = _liveMap;
|
||||
|
||||
#pragma mark - Lifecycle
|
||||
@ -43,13 +42,6 @@
|
||||
_needsMapReloadOnBoundsChange = YES;
|
||||
_liveMap = NO;
|
||||
_centerCoordinateOfMap = kCLLocationCoordinate2DInvalid;
|
||||
|
||||
//Default world-scale view
|
||||
_region = MKCoordinateRegionForMapRect(MKMapRectWorld);
|
||||
|
||||
_options = [[MKMapSnapshotOptions alloc] init];
|
||||
_options.region = _region;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@ -119,20 +111,19 @@
|
||||
_needsMapReloadOnBoundsChange = needsMapReloadOnBoundsChange;
|
||||
}
|
||||
|
||||
- (MKCoordinateRegion)region
|
||||
- (MKMapSnapshotOptions *)options
|
||||
{
|
||||
ASDN::MutexLocker l(_propertyLock);
|
||||
return _region;
|
||||
return _options;
|
||||
}
|
||||
|
||||
- (void)setRegion:(MKCoordinateRegion)region
|
||||
- (void)setOptions:(MKMapSnapshotOptions *)options
|
||||
{
|
||||
ASDN::MutexLocker l(_propertyLock);
|
||||
_region = region;
|
||||
_options = options;
|
||||
if (self.isLiveMap) {
|
||||
[_mapView setRegion:_region animated:YES];
|
||||
[self applySnapshotOptions];
|
||||
} else {
|
||||
_options.region = _region;
|
||||
[self resetSnapshotter];
|
||||
[self takeSnapshot];
|
||||
}
|
||||
@ -183,7 +174,9 @@
|
||||
- (void)setUpSnapshotter
|
||||
{
|
||||
ASDisplayNodeAssert(!CGSizeEqualToSize(CGSizeZero, self.calculatedSize), @"self.calculatedSize can not be zero. Make sure that you are setting a preferredFrameSize or wrapping ASMapNode in a ASRatioLayoutSpec or similar.");
|
||||
_options.size = self.calculatedSize;
|
||||
if (!_options) {
|
||||
[self createInitialOptions];
|
||||
}
|
||||
_snapshotter = [[MKMapSnapshotter alloc] initWithOptions:_options];
|
||||
}
|
||||
|
||||
@ -193,6 +186,23 @@
|
||||
_snapshotter = [[MKMapSnapshotter alloc] initWithOptions:_options];
|
||||
}
|
||||
|
||||
- (void)createInitialOptions
|
||||
{
|
||||
_options = [[MKMapSnapshotOptions alloc] init];
|
||||
//Default world-scale view
|
||||
_options.region = MKCoordinateRegionForMapRect(MKMapRectWorld);
|
||||
_options.size = self.calculatedSize;
|
||||
}
|
||||
|
||||
- (void)applySnapshotOptions
|
||||
{
|
||||
[_mapView setCamera:_options.camera animated:YES];
|
||||
[_mapView setRegion:_options.region animated:YES];
|
||||
[_mapView setMapType:_options.mapType];
|
||||
_mapView.showsBuildings = _options.showsBuildings;
|
||||
_mapView.showsPointsOfInterest = _options.showsPointsOfInterest;
|
||||
}
|
||||
|
||||
#pragma mark - Actions
|
||||
- (void)addLiveMap
|
||||
{
|
||||
@ -201,7 +211,10 @@
|
||||
__weak ASMapNode *weakSelf = self;
|
||||
_mapView = [[MKMapView alloc] initWithFrame:CGRectZero];
|
||||
_mapView.delegate = weakSelf.mapDelegate;
|
||||
[_mapView setRegion:_options.region];
|
||||
if (!_options) {
|
||||
[weakSelf createInitialOptions];
|
||||
}
|
||||
[weakSelf applySnapshotOptions];
|
||||
[_mapView addAnnotations:_annotations];
|
||||
[weakSelf setNeedsLayout];
|
||||
[weakSelf.view addSubview:_mapView];
|
||||
@ -232,7 +245,7 @@
|
||||
}
|
||||
|
||||
#pragma mark - Layout
|
||||
// Layout isn't usually needed in the box model, but since we are making use of MKMapView which is hidden in an ASDisplayNode this is preferred.
|
||||
// Layout isn't usually needed in the box model, but since we are making use of MKMapView this is preferred.
|
||||
- (void)layout
|
||||
{
|
||||
[super layout];
|
||||
|
Loading…
x
Reference in New Issue
Block a user