objective-c - MKMapView 缩放用户位置和注释

标签 objective-c xcode

我希望我的 MKMapView 尽可能接近缩放“用户位置”和注释。
map 已显示两者,但已缩小到整个国家/地区。
我怎样才能做到这一点?

而且我不知道为什么 Annotation 和 Pin 没有动画。

我的代码:

//Coords User
CLLocationCoordinate2D user_location;
user_location.latitude = mapView.userLocation.location.coordinate.latitude;
user_location.longitude = mapView.userLocation.location.coordinate.longitude;
//Coords Annotation
CLLocationCoordinate2D club_location;
club_location.latitude = [self.clubInfo.latitude doubleValue];
club_location.longitude = [self.clubInfo.longitude doubleValue];

MKMapPoint userPoint = MKMapPointForCoordinate(user_location);
MKMapPoint annotationPoint = MKMapPointForCoordinate(club_location);

MKMapRect userRect = MKMapRectMake(userPoint.x, userPoint.y, 0, 0);
MKMapRect annotationRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);

MKMapRect unionRect = MKMapRectUnion(userRect, annotationRect);

MKMapRect unionRectThatFits = [mapView mapRectThatFits:unionRect];
[mapView setVisibleMapRect:unionRectThatFits animated:YES];

// Add an annotation
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
annotation.coordinate = club_location;
annotation.title = self.clubInfo.clubName;
annotation.subtitle = @"Pin!";
[mapView addAnnotation:annotation]; // This was missing
[mapView selectAnnotation:annotation animated:YES];

MapView

日志:
userRect: {{134217728.0, 134217728.0}, {0.0, 0.0}}
annotationRect: {{99775488.0, 152579328.0}, {0.0, 0.0}}

unionRect: {{99775488.0, 134217728.0}, {34442240.0, 18361600.0}}

mapView.visibleMapRect: {{96025087.6, 116070015.1}, {41943040.7, 54657025.8}}

最佳答案

如果我理解得很好,您希望这两个注释以最大可能的缩放比例可见。我发现这个解决方案 不需要任何计算 .

// You have coordinates
CLLocationCoordinate2D user = ...;
CLLocationCoordinate2D annotation = ...;
// Make map points
MKMapPoint userPoint = MKMapPointForCoordinate(user);
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation);
// Make map rects with 0 size
MKMapRect userRect = MKMapRectMake(userPoint.x, userPoint.y, 0, 0);
MKMapRect annotationRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0, 0);
// Make union of those two rects
MKMapRect unionRect = MKMapRectUnion(userRect, annotationRect);
// You have the smallest possible rect containing both locations
MKMapRect unionRectThatFits = [mapView mapRectThatFits:unionRect];
[mapView setVisibleMapRect:unionRectThatFits animated:YES];

CoreLocation 和 MapKit 结构是 hell 。

关于objective-c - MKMapView 缩放用户位置和注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760582/

相关文章:

没有 Storyboard 的 iOS 用户界面 : Change UITextField font and guarantee minimum characters for a textField Object

ios - 在 Swift playground 中禁用某些代码行的运行

ios - Xcode 7.1 - 未授权使用此服务错误

objective-c - iOS5在导航栏上的阴影(Monotouch或ObjC)

ios - GPUImage内存积累

ios - UIImageView 上的 UIGestureRecognizer

objective-c - ViewTableUI单元格加载问题

swift - IBOutlet UIButton SIGABRT

iphone - 在 iPhone 中使用 powerplot 创建折线图

ios - UIDeviceOrientation 通知