Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 地图视图未显示位置和接点?_Ios_Location_Mkmapview - Fatal编程技术网

Ios 地图视图未显示位置和接点?

Ios 地图视图未显示位置和接点?,ios,location,mkmapview,Ios,Location,Mkmapview,我在一个地图视图上工作,但它没有显示我想要的用户位置和PIN,我不知道代码是否正确,我想是的,所以我需要你的帮助 以下是通过缩放显示位置的代码: - (void)viewDidLoad { self.MapView.showsUserLocation = YES; [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; coordi

我在一个地图视图上工作,但它没有显示我想要的用户位置和PIN,我不知道代码是否正确,我想是的,所以我需要你的帮助

以下是通过缩放显示位置的代码:

- (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