在我的项目中,我将有两个视图控制器,一个在底部有一个大的UIView子视图(这是我的图中的视图控制器1),当用户点击这个UIView时,它会向上显示第二个视图控制器的视图。这非常类似于Google Maps for iOS中的兴趣点视图。当你搜索一个地方时,它会在屏幕底部显示一个小视图,然后在与之交互时展开以填充屏幕 - 这实际上是我想要做的。
所以我的问题是,实现这个的最佳方法是什么?最终它似乎很像呈现UIViewController模式,除了它的UIView总是存在,虽然大小不同。
谢谢
答案 0 :(得分:1)
我只想使用单个视图控制器,并将下方视图作为其子视图。当您在主视图中检测到点击时,您可以向上滑动底部视图,并根据需要调整两个视图的大小和位置。
答案 1 :(得分:1)
我认为您不需要两个独立的视图控制器。您需要做的就是在UIScrollView
中自定义一点UIViewController
。
首先,您需要设置scrollView的setContentSize。然后,您需要阻止UIScrollView
滚动,因为您不希望它滚动。
self.scrollView =[[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.scrollView.delegate = self;
self.scrollView.contentSize = CGSizeMake(320, 568 + x ); // x represents the height of white screen in your first view controller.
self.scrollView.bounces = NO;
self.scrollView.scrollEnabled = NO;
其次,您需要在UITapGestureRecognizer
添加UIView
,以便完全在屏幕上显示。这是您可以使用的一段代码
UITapGestureRecognizer *tapGestureRecognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(tapped:)];
tapGestureRecognizer.numberOfTapsRequired = 1;
[view addGestureRecognizer:tapGestureRecognizer];
最后,您可以通过更改tapped
的{{1}}来实施UIView
方法,以在屏幕上显示全新的contentOffset
。别忘了消失导航栏。所以,
UIScrollView
好吧,最后,你在屏幕上完全显示你的第二个视图。假设您使用iPhone> 5,我使用静态值,但您可以根据您正在运行的设备使用动态高度值。在第二个视图中不要忘记- (void)tapped{
self.navigationController.navigationBarHidden = YES;
[self.scrollView setContentOffset:CGPointMake(0,view1.frame.origin.y) animated:YES];
}
。
我的错误我认为你不想导航栏,但不是什么大不了的,只需要改变setContentOffset y值而不是使用setUserInteractionEnabled
属性。