Ios 地图视图未显示位置和接点?
我在一个地图视图上工作,但它没有显示我想要的用户位置和PIN,我不知道代码是否正确,我想是的,所以我需要你的帮助 以下是通过缩放显示位置的代码:Ios 地图视图未显示位置和接点?,ios,location,mkmapview,Ios,Location,Mkmapview,我在一个地图视图上工作,但它没有显示我想要的用户位置和PIN,我不知道代码是否正确,我想是的,所以我需要你的帮助 以下是通过缩放显示位置的代码: - (void)viewDidLoad { self.MapView.showsUserLocation = YES; [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; coordi
- (void)viewDidLoad
{
self.MapView.showsUserLocation = YES;
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
coordinateuser.latitude = self.MapView.userLocation.coordinate.latitude;
coordinateuser.longitude = self.MapView.userLocation.coordinate.longitude;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(coordinateuser, 1200, 1200);
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.MapView setRegion:region animated:YES];
});
[super viewDidLoad];
}
下面是显示MKPinAnnotationView的代码,我认为这是一个错误的代码:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
static NSString *SFAnnotationIdentifier = @"SFAnnotationIdentifier";
MKPinAnnotationView *pinView =
(MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier];
if (!pinView)
{
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:SFAnnotationIdentifier];
return annotationView;
}
else
{
pinView.annotation = annotation;
}
cmtlocation = CLLocationCoordinate2DMake(19.502519,-99.259779);
//UIImage *flagImage = [UIImage imageNamed:@"flag.png"];
//annotationView.image = flagImage;
[annotation setCoordinate:cmtlocation];
return pinView;
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释{
静态NSString*SFAnnotationIdentifier=@“SFAnnotationIdentifier”;
MKPinAnnotationView*pinView=
(MKPinAnnotationView*)[mapView出列可重用AnnotationViewWithIdentifier:SFAnnotationIdentifier];
如果(!pinView)
{
MKAnnotationView*annotationView=[[MKAnnotationView alloc]initWithAnnotation:annotation重用标识符:SFAnnotationIdentifier];
返回注释视图;
}
其他的
{
pinView.annotation=注释;
}
cmtlocation=CLLocationCoordinate2DMake(19.502519,-99.259779);
//UIImage*flagImage=[UIImage ImageName:@“flag.png”];
//annotationView.image=flagImage;
[注释设置坐标:cmtlocation];
返回pinView;
}
所以我会感谢你的帮助!谢谢 我认为您的代码是错误的,正如您所预料的:如果
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:SFAnnotationIdentifier];
不返回nil
,只返回另一个注释视图:
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:SFAnnotationIdentifier];
return annotationView;
否则,您将尝试设置nil
对象的属性:
pinView.annotation = annotation;
然后在返回nil
之前执行其他操作:
cmtlocation = CLLocationCoordinate2DMake(19.502519,-99.259779);
//UIImage *flagImage = [UIImage imageNamed:@"flag.png"];
//annotationView.image = flagImage;
[annotation setCoordinate:cmtlocation];
return pinView;
事实上,这与另一个答案所说的相反: 如果出列返回nil,则代码正在创建一个空的
MKAnnotationView
默认情况下,
MKAnnotationView
为空,因此批注(包括用户位置)不可见。在注释视图的顶部,检查注释的类型是否为MKUserLocation
,并返回nil
。对于其他注释,如果要使用自定义图像,请创建MKAnnotationView
。否则,创建(alloc+init)一个MKPinAnnotationView
,该视图将自动提供pin图像
另外
您甚至没有为自定义批注调用addAnnotation
。您不应该在viewForAnnotation
方法中设置注释的坐标。相反,您应该创建注释对象(例如,在viewDidLoad
中),设置其坐标
和标题
,然后调用addAnnotation
此外,在viewdiload
中,将showsUserLocation
设置为YES
后,您将立即尝试访问用户位置坐标。用户位置将不会立即可用。相反,将setRegion
调用移动到didUpdateUserLocation
委托方法(或者只需将userTrackingMode
设置为MKUserTrackingModeFollow
)