如何在不占用整个屏幕的UIView上使用UIModalTransitionStylePartialCurl?

cae*_*314 28 iphone transition modal-dialog objective-c uiview

在Apple官方的iPhone地图应用程序中,右下角有一个小的"页面卷曲"按钮.按下它时,地图本身会向后剥离以显示一些选项.我想在我自己的应用程序中复制此效果.

我正在尝试使用UIModalTransitionStylePartialCurl(在SDK 3.2中添加).就其布局而言,我的应用程序几乎完全类似于Apple的官方地图应用程序.我可以轻松地将整个屏幕剥离,露出下面的另一个视图,但我不想要这个.我只想让地图视图剥离.

要创建此效果,您必须具有将执行转换的UIViewController.如果我将这个UIViewController的视图设置为屏幕上某个不占用整个屏幕的小子视图,我可以将该子视图剥离.那很棒!但是,在转换的第二部分(当页面重新放回原位)之后,视图永远不会从它们开始的位置开始.剥离的视图将从其原始位置移开,或者显示的视图将扩展为占据整个屏幕.

我有没有明显的错误?我真的很感激任何帮助!

我正在使用的代码非常简单.它基本上只是:

underMapViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;

[curlableMapViewController presentModalViewController:underMapViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

Jor*_*rge 10

文档:

UIModalTransitionStylePartialCurl

当显示视图控制器时,当前视图的一个角向上卷曲以显示下面的模态视图.在解雇时,蜷缩的页面会在模态视图之上展开.使用此转换呈现的模态视图本身无法呈现任何其他模态视图.

仅当父视图控制器呈现全屏视图并且您使用UIModalPresentationFullScreen模式演示样式时,才支持此过渡样式.尝试为父视图或不同的表示样式使用不同的形状因子会触发异常.

虽然,我没有使用除全屏之外的其他演示文稿.我正在测试,我遇到了和你一样的问题.我发现如果我的ParentViewController的视图是ImageView,并且我将内容模式设置为UIViewContentModeCenter,则视图不会调整大小或移动.也许有一种解决方法是将当前视图保存为图像,将其置于顶部,进行卷曲,然后在关闭模式后,重新排列混乱的隐藏内容并删除顶部图像视图.我知道这听起来很疯狂,但如果我真的必须达到这个要求,那就是我会尝试的.

希望这会有所帮助,豪尔赫.


Mar*_*ius 7

这样的事情怎么样:

    [UIView beginAnimations:@"PartialPageCurlEffect" context:nil];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:myOldSubViewController.view cache:YES];

    [myOldSubViewController.view addSubview:myNewViewController.view];

    [UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)

注意:对于某些视图,如果视图复杂且偏离中心,则可能存在工件.更改cache:YEScache:NO可以与修复.


Ste*_*her 7

正如cprcrack指出的那样,这并没有回答原来的问题.但是,这是有用的信息,所以考虑到这一点,我将把它留在这里.

这实际上比你想象的要简单得多.

我们将调用视图控制器MapViewControllerSettingsViewController.你的问题是你想剥开部分的(只有部分)MapViewController显示SettingsViewController.

这是你如何做到的:

  • 对两个视图使用全尺寸视图.
  • 只将内容放在视图的下半部SettingsViewController.
  • 用于UIModalTransitionStylePartialCurl在它们之间进行转换,就像您现在一样.

iOS会检测到你已经自动完成了这个操作,并且只能将MapViewController视图放回到视图的下半部分SettingsViewController,这是你所有内容的所在.

如果您将内容放在SettingsViewController视图的上半部分,iOS将会检测到该内容并将MapViewController视图全部剥离.

摘要:仅将内容放在新视图的下半部分.iOS会搞清楚.

(我不认为这在任何地方都有记录,对不起.)


Chr*_*add 5

我有一个轻微的打嗝混淆

.modalTransitionStyle
Run Code Online (Sandbox Code Playgroud)

.modalPresentationStyle
Run Code Online (Sandbox Code Playgroud)

第一个是TARGET viewController,例如你想要的那个.第二个是PARENT viewController,例如实际上被curl扭曲的那个.OP得到了这个权利,但我弄错了,在我弄明白之前的10分钟令人沮丧.把它扔在这个帖子上,以防它给别人一个我需要的头脑.