[英]How to slide / swipe / screen edge swipe between two UIViews in iOS 7
[英]How to accomplish a “90% slide” between two UIViews
我有一个特定的场景正在尝试模仿,但是对于Cocoa Touch来说还很陌生,我不确定实现它的最佳方法。 请原谅我缺乏战术知识; 希望一些明确的阐述会有所帮助。
我想模仿的是:
我正在查看的应用程序特别是Beat 。 以下是其中一个UIView的示例-特别是,请注意底部的“设置”齿轮图标。
触摸或滑动该齿轮时,将发生两个主要的UIView更改:
这是我要完成的基本功能。
实现思路1:单个UIViewController带有多个UIViews
最初,我考虑使用一个UIViewController来管理“主”视图和“设置”视图。 在那种情况下,以适当的方式转换这些视图将是相当简单的事情。
也就是说,这对我来说似乎有些混乱。 根据我两组功能的健壮性,这是使单个UIViewController重载的秘诀。 您可能会告诉我,这没关系,但事实并非如此。
实现思路2:自定义容器ViewController中有多个UIViewController
这是我目前要走的路线。 它将两个离散的功能集分离为单独的UIViewControllers(包含在Container ViewController中),并通过以下两种方法在两者之间进行转换:
- (void)flipFromViewController:(UIViewController *)fromController
toViewController:(UIViewController *)toController
{
CGFloat width = self.view.frame.size.width;
CGFloat height = self.view.frame.size.height;
fromController.view.frame = CGRectMake(0.0f, 0.0f, width, height);
toController.view.frame = CGRectMake(0.0f, height, width, height);
[self addChildViewController:toController];
[fromController willMoveToParentViewController:nil];
[self transitionFromViewController:fromController
toViewController:toController
duration:0.5f
options:UIViewAnimationOptionTransitionNone
animations:^(void) {
fromController.view.frame = CGRectMake(0.0f, -(height - 100.0f), width, height);
toController.view.frame = CGRectMake(0.0f, 100.0f, width, height);
}
completion:^(BOOL finished) {
[fromController removeFromParentViewController];
[toController didMoveToParentViewController:self];
}];
}
问题是过渡:它似乎并没有停止“ 90%的方式”。 尽管我在两个UIView上的帧调整不应该是“完整的”动作,但看起来它似乎打算完全过渡为“旧”控制器和“新”控制器。
我要指导的地方
我并不是要一个完整的解决方案-您的专业知识将太昂贵了。 :)就是说,由于这还不算新,我希望您能对正确的方法有所了解。 如果可以提供更多信息,请告诉我。
谢谢!
我确实认为您的第二个方法是在正确的轨道上,并且您对使用transitionFromViewController:ToViewController的直觉也是正确的-如果您希望两个视图控制器都存在并处于活动状态,则我不会使用该方法。 因此,我希望齿轮视图的控制器成为自定义容器控制器的子视图控制器,然后像您一样将第二个子窗口添加到屏幕底部。 然后使用animateWithDuration动画两个视图:...最后,动画应具有所需的内容,并且容器控制器将具有两个子代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.