从底部开始的Mapkit自定义标注幻灯片视图

时间:2014-05-01 18:15:04

标签: ios objective-c mapkit

我有一张地图,上面有多个注释。当我点击一个时,我想从底部滑动一个小UIView,其中包含有关此引脚的一些信息。如果我点击一个名为更多的按钮,我希望视图向上展开,其中包含更多信息。

我不确定如何以正确的方式做到这一点。我的想法是为自定义标注定义一个新的xib和视图控制器。但我只想显示该视图的一小部分,所以我应该将其帧从开头设置为固定的小值,还是使用autolayout将其缩小到其内容?我怎样才能从底部向上滑动?我想我需要以模态方式或作为childviewcontroller显示它并使用一些动画。

当用户点击更多时,我会将另一个 DetailViewController 与xib文件一起使用,该文件既可以模态显示,也可以作为childviewcontroller显示。有没有任何例子如何实现这样的事情?或者有更好的方法吗?

现在,自定义标注视图对于每个注释都是相同的。但是我会有三个不同的 DetailViewControllers ,具体取决于点击了哪个Annotation。 我的基本想法是将这些东西分开,这样我的MapViewController就不会变得太大。

1 个答案:

答案 0 :(得分:1)

我不会在幻灯片视图中使用视图控制器。只需创建一个UIView,其框架就在主视图框架之外,并使其成为子视图。像这样:

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, 200)];
[self.view addSubview:v];
self.infoView = v;

您可以在viewDidLoad中执行此操作,也可以在视图的初始设置中执行此操作。它不可见,因为它只是在屏幕的底部。然后,当用户点击callout按钮时,将infoView设置为如下位置:

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    // Populate infoView with whatever info you want to show about the annotation
    //
    //  ...
    //
    // Then animate the view into position
    [UIView beginAnimations:@"infoView" context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelegate:self];
    self.infoView.center = CGPointMake(0, self.view.frame.size.height - 200);
    [UIView commitAnimations];
}