我在mapview上工作,但它没有显示我想要的用户位置以及Pins,我不知道代码是否正确,我认为是,所以我需要你的帮助。
下面是用缩放显示位置的代码:
- (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;
}
所以我将非常感谢你的帮助!谢谢!
答案 0 :(得分:0)
我认为您的代码错误,正如您所料:如果
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;
答案 1 :(得分:0)
实际上,与其他答案所说的相反,它是另一种方式:
如果dequeue返回nil,代码正在创建空 MKAnnotationView
。
默认情况下,MKAnnotationView
为空,因此注释(包括用户位置)是不可见的。在viewForAnnotation
的顶部,检查annotation
是否为MKUserLocation
类型并返回nil
。对于其他注释,如果要使用自定义MKAnnotationView
,请创建image
。否则,创建(alloc + init)一个MKPinAnnotationView
,它会自动提供一个图像。
此外...
您甚至没有为自定义注释调用addAnnotation
。您不应该在coordinate
方法中设置注释viewForAnnotation
。相反,您应该创建一个注释对象(例如,在viewDidLoad
中),设置其coordinate
和title
,然后调用addAnnotation
。
此外,在viewDidLoad
中,您在showsUserLocation
设置为YES
后尝试立即访问用户位置坐标 。用户位置将无法立即使用。相反,请将setRegion
调用移至didUpdateUserLocation
委托方法(或将userTrackingMode
设置为MKUserTrackingModeFollow
)。