在当前视图后面添加完全不同的视图

时间:2015-10-05 17:36:41

标签: ios cocoa-touch uiviewcontroller uisplitviewcontroller subview

要点: 我正在尝试实现一个像Apple的默认平移手势(interactivePopGestureRecognizer)一样的手势。唯一的区别是它一直回到splitview控制器的主视图,而不是仅仅返回堆栈上的一个视图。这是通过popToRootViewController完成的。

我目前可以做的事情: 我的UIScreenEdgePanGestureRecognizer的子类能够跟踪用户的触摸并根据他们抬起手指的位置设置动画到适当的位置。也就是说,如果他们仅稍微移动了视图,则会快速回到原始位置并重置手势识别器。如果用户将其向右移动得足够远并且放开(超过屏幕略低于屏幕一半的阈值),则视图将从屏幕右侧滑出,主视图将滑入视图。

我需要的是: 在向右移动我的顶部细节视图时,我想使用我在导航之前拍摄的主视图的快照,以显示我当前的详细信息视图(我使用快照创建UIImageView - 让称之为" dummyMasterview")。我的问题是像addSubView这样的函数似乎将dummyMasterview作为该视图的背景。我希望能够顺畅地将顶视图向右拉,以显示它下面的dummyMasterview。然后,当我释放时,我将适当地为视图设置动画(如果超过阈值,则一直弹到我的实际根视图)。到目前为止,我只能使用addSubview和其他子视图方法将此图像作为背景放在当前视图上。并不是它背后的全新观点。

1 个答案:

答案 0 :(得分:1)

好吧,我想出来了......我无法在当前可见的视图后面添加我的“dummyMasterview”(我们称之为currentView),因为我将它添加为currentView的子视图。这导致dummyMasterview正好在currentView的顶部,而不是在它后面。要将dummyMasterview 放在 currentView后面,您必须将dummyMasterview设为主窗口的子视图:

// Create a dummyMasterView from the image and add it as a subview of the main
// window so it appears behind the current visible view while panning
UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
UIImageView* dummyMasterView = [[UIImageView alloc] initWithImage:dummyMasterImage];
UIView* mainWindowSubview = mainWindow.subviews[0];

 //Add dummyMaster to main window subview.
[mainWindowSubview addSubview:self.dummyMasterView];

 //Move it to the back so it doesn't cover up currentView
[mainWindowSubview sendSubviewToBack:self.dummyMasterView];

所以基本上,我很愚蠢地假设currentView的子视图将被放置在当前视图的后面。因为我想在currentView后面出现一个全新的视图,所以新视图需要成为currentView的兄弟。也就是说,currentView和dummyMasterView现在都是主窗口的子视图。一旦有机会,图片将被公布以便澄清。