我有一个从Flicker下载图像的应用程序(Xcode 4.5)。我有一个mapview,它会删除每张照片的位置。单击该图钉会显示一个注释,其中显示了照片的名称和图像的缩略图。我开始使用该应用程序,并且iPad版本按预期工作。但是,当我尝试调整iPhone版本的代码时(使用与iPad相同的类),引脚不会出现在iphone的地图视图中。我无法弄清楚我错过了什么,我希望有人可以提供帮助。这就是我所做的。
1)我在iPhone故事板中创建了一个新的视图控制器,并将其连接到适用于iPad的地图视图控制器类。我添加了mapView插座并相应地调整了代码。 2)在tableView控制器(它映射到mapView控制器)中,我添加了一个准备segue方法,该方法应该使用注释信息更新地图视图控制器中的地图视图。
这是代码:
// in the tableView controller
- (NSArray *)mapAnnotations
{
NSMutableArray *annotations = [NSMutableArray arrayWithCapacity:[self.photos count]];
for (NSDictionary *photo in self.photos) {
[annotations addObject:[FlickrPhotoAnnotation annotationForPhoto:photo]];
}
return annotations;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"iPhoneMap"]) {
id destinationViewController = segue.destinationViewController;
if ([destinationViewController isKindOfClass:[MapViewController class]])
{
MapViewController *mapVCIphone =
(MapViewController *)destinationViewController;
mapVCIphone.delegate = self;
mapVCIphone.annotations = [self mapAnnotations];
}
}
}
//in the mapView controller:
@property (weak, nonatomic) IBOutlet MKMapView *mapViewIphone;
@synthesize mapViewIphone = _mapViewIphone;
- (void)updateMapView
{
//if there are any current annotatons, remove them
//if there exists a new array of annotations, then add those to the map
if (self.splitViewController) {
if (self.mapView.annotations) [self.mapView
removeAnnotations:self.mapView.annotations];
if (self.annotations) [self.mapView addAnnotations:self.annotations];
} else {
if (self.annotations) [self.mapViewIphone addAnnotations:self.annotations];
if (self.mapViewIphone.annotations) [self.mapViewIphone
removeAnnotations:self.mapViewIphone.annotations];
}
}
- (void)setAnnotations:(NSArray *)annotations
{
_annotations = annotations;
[self updateMapView];
}
- (void)setMapView:(MKMapView *)mapView //iPad mapView
{
_mapView = mapView;
[self updateMapView];
}
- (void)setMapViewIphone:(MKMapView *)mapViewIphone
{
_mapViewIphone = mapViewIphone;
[self updateMapView];
}
此代码中还有MKMapViewDelegate协议的实现,我没有在这里包含,因为我不需要为iPhone更改它们。谁能告诉我我可能错过了什么?感谢。
答案 0 :(得分:0)
下面:
if (self.splitViewController) {
if (self.mapView.annotations) [self.mapView
removeAnnotations:self.mapView.annotations];
if (self.annotations) [self.mapView addAnnotations:self.annotations];
} else {
if (self.annotations) [self.mapViewIphone addAnnotations:self.annotations];
if (self.mapViewIphone.annotations) [self.mapViewIphone
removeAnnotations:self.mapViewIphone.annotations];
}
}
在iPad版本中你是
- 删除现有注释然后
- 添加新注释
在iPhone版本中你是
- 添加新注释然后
- 在下一行中删除那些相同的注释(现在存在的注释)。