buz*_*kip 37 iphone cocoa-touch objective-c
我试图在视图加载后将地图缩放到用户的当前位置,但是我收到错误"***由于未捕获的异常终止应用程序'NSInvalidArgumentException',原因:'无效区域' "当视图加载时.请有人帮忙吗?
干杯!
- (void)viewDidLoad
{
[super viewDidLoad];
MKCoordinateRegion mapRegion;
mapRegion.center.latitude = map.userLocation.coordinate.latitude;
mapRegion.center.longitude = map.userLocation.coordinate.longitude;
mapRegion.span.latitudeDelta = 0.2;
mapRegion.span.longitudeDelta = 0.2;
[map setRegion:mapRegion animated: YES];
}
Run Code Online (Sandbox Code Playgroud)
Dee*_*olu 102
你定了showsUserLocation = YES吗?MKMapView如果设置为,则不会更新位置NO.所以要确保这一点.
该MKMapView对象很可能还没有用户位置.要做得对,你应该采用MKMapViewDelegate协议和实现mapView:didUpdateUserLocation:
map.delegate = self;
...
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
MKCoordinateRegion mapRegion;
mapRegion.center = mapView.userLocation.coordinate;
mapRegion.span.latitudeDelta = 0.2;
mapRegion.span.longitudeDelta = 0.2;
[mapView setRegion:mapRegion animated: YES];
}
Run Code Online (Sandbox Code Playgroud)
Abi*_*ern 19
与Deepak的答案一样,除了你可以更优雅地设置跨度:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {
MKCoordinateRegion mapRegion;
mapRegion.center = map.userLocation.coordinate;
mapRegion.span = MKCoordinateSpanMake(0.2, 0.2);
[map setRegion:mapRegion animated: YES];
}
Run Code Online (Sandbox Code Playgroud)
如果用户希望滚动地图,您不希望在userDidUpdateLocation内更新此内容.如果您将该代码放在上述方法中,则用户将无法滚动地图,因为将调用该函数并将地图居中回到当前位置.
到目前为止,最简单的方法是在didUpdateUserLocation中使用mapView.showAnnotations:
func mapView(mapView: MKMapView!, didUpdateUserLocation userLocation: MKUserLocation!) {
mapView.showAnnotations([userLocation], animated: true)
}
Run Code Online (Sandbox Code Playgroud)
就这样!
MKUserLocation符合MKAnnotation协议.将userLocation作为一个数组传递,showAnnotations方法将让mapView放大一个区域加上跨越MKAnnotations数组的填充,在这种情况下它只是userLocation.适合我.
如果您只想放大一次,请使用initialUserLocation属性检查是否已设置初始属性.我不喜欢使用dispatch_once来做这类事情
| 归档时间: |
|
| 查看次数: |
33438 次 |
| 最近记录: |