【发布时间】:2018-01-11 03:05:58
【问题描述】:
我正在尝试从 mapView 转到包含该 mapView 上所选位置的快照的页面。
这是我的prepareForSegue 方法:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"LocationConfirmSegue"]) {
LocationConfirmationViewController *vc = segue.destinationViewController;
MKCoordinateSpan span;
span.longitudeDelta = mapFocusSpan;
span.latitudeDelta = mapFocusSpan;
MKCoordinateRegion region;
region.center = *currentPinLocation;
region.span = span;
MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
options.region = region;
options.size = CGSizeMake(270, 180);
MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
[snapshotter startWithCompletionHandler: ^(MKMapSnapshot * _Nullable snapshot, NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error);
return;
}
vc.mapSnapshot = snapshot.image;
}];
}
}
我可以在快照程序的完成处理程序之外将信息传递给目标 VC。代码也都可以正常工作——snapshot.image 确实返回 UIImage*——但是它没有被传递给目标视图控制器。当我尝试访问该视图控制器中的 mapSnapshot 属性时,我得到 (null)。
【问题讨论】:
-
我能想到的一种可能的解决方案是将“选项”传递给目标视图控制器并在那里生成快照。不过,这感觉像是一种 hack,并且非常感谢另一种选择(我不必在目标视图控制器中导入 MapKit)。
-
我不会在
prepare(for:)中生成快照,而是在您当前启动segue 的位置启动快照,然后在生成快照后,从snapshotter 的完成块触发segue
标签: ios objective-c mapkit mkmapsnapshotter