我有一张地图,上面有多个注释。当我点击一个时,我想从底部滑动一个小UIView,其中包含有关此引脚的一些信息。如果我点击一个名为更多的按钮,我希望视图向上展开,其中包含更多信息。
我不确定如何以正确的方式做到这一点。我的想法是为自定义标注定义一个新的xib和视图控制器。但我只想显示该视图的一小部分,所以我应该将其帧从开头设置为固定的小值,还是使用autolayout将其缩小到其内容?我怎样才能从底部向上滑动?我想我需要以模态方式或作为childviewcontroller显示它并使用一些动画。
当用户点击更多时,我会将另一个 DetailViewController 与xib文件一起使用,该文件既可以模态显示,也可以作为childviewcontroller显示。有没有任何例子如何实现这样的事情?或者有更好的方法吗?
现在,自定义标注视图对于每个注释都是相同的。但是我会有三个不同的 DetailViewControllers ,具体取决于点击了哪个Annotation。 我的基本想法是将这些东西分开,这样我的MapViewController就不会变得太大。
答案 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];
}