有完整的页面翻页效果吗?已更新。

6

好的,我非常喜欢页面翻页效果,只有一个问题,在应用程序内发送反馈电子邮件时,部分页面翻页会遮盖取消按钮和大部分邮件发送按钮。按钮仍然有效,但用户看不到它们。有没有办法将部分页面翻页变为全屏翻页,使其几乎完全离开屏幕?谢谢!以下是我目前推送视图的方式。

- (IBAction)HelpClicked{

MoreHelp *More = [[MoreHelp alloc] initWithNibName:nil bundle:nil];

More.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:More animated:YES];

[More release]; 
}

在这里,您将获得有关如何实现页面翻页效果的信息。 (http://oleb.net/blog/2010/06/app-store-safe-page-curl-animations/) - ram
页面翻页是指在地图应用中更改地图类型时所看到的效果,而不是在iBooks应用中看到的效果。 - hatfinch
4个回答

4
请查看苹果开发者文库中的UICatalog代码。这是链接: http://developer.apple.com/library/ios/#samplecode/UICatalog/Introduction/Intro.html 运行它后,从UITableView中选择Transitions。查看“Curl Image”按钮的操作。如果这正是您需要的...
您将在TransitionViewController类中找到curlAction:方法。基本上,它有两个图像视图在一个视图内。根据哪个图像视图被显示以及先前的转换方式(向上卷曲或向下卷曲),它会以一种方式显示另一个图像,使其看起来像是您卷曲了一页,然后再将其卷曲下来。卷曲的图像视图完全消失了。我相信您可以将其适应于您的UI。
它与PeyloW的答案几乎相同,只是使用了旧的setAnimation:commitAnimation对。

我已经添加了代码来展示我当前正在做的事情。我似乎无法让它工作,我需要帮助! - Jason

3

很遗憾,UIModalTransitionStyle 没有全屏翻页的变体。

如果您需要这样的效果,则必须手动实现。它比简单的模态视图控制器更复杂,但是可行的。

此代码片段仅适用于默认纵向布局,并且需要根据您的需求进行调整。但是我希望它能给您提供所需的思路:

UIView* view = viewController.view;
view.frame = self.view.window.bounds;
[UIView transitionWithView:self.view.window
                  duration:0.2 
                   options:UIViewAnimationOptionTransitionCurlUp 
                animations:^(void) {
                    [self.view.window addSubview:view];
                } 
                completion:^(BOOL finished) {
                    [viewController.view removeFromSuperview];
                    [viewController presentModalViewController:viewController
                                                      animated:NO];
                }];

我相信尝试使用您的示例,我需要创建一个IBOutlet UIView,并将我的当前xib复制为同一xib中的UIView,我从中启动正确?因此,如果我的IBOutlet命名为“aboutView”,那么我应该使用aboutView.view替换viewController.view对吗?希望这样说得清楚... - Jason
这个不起作用...UIView* view = aboutView.view; view.frame = self.view.window.bounds; [UIView transitionWithView:self.view.window duration:0.2 options:UIViewAnimationOptionTransitionCurlUp animations:^(void) { [self.view.window addSubview:view]; } completion:^(BOOL finished) { [aboutView.view removeFromSuperview]; [aboutView presentModalViewController:viewController animated:NO]; }]; - Jason
我遇到了像“.view不正确”的错误...我对编程还是很新手,所以我在尝试弄清楚需要更改什么才能让它为我工作... - Jason
这不是有点过了吗? 如果首先将“view”作为子视图添加到“window”,然后再在其上方呈现另一个“viewController”。你最终会发现添加了一个无用的“view”,并被视图控制器覆盖。我尝试在“animations”块中只呈现没有动画的“viewController”,并在“completion”块中什么也不做。这样做没有任何额外开销,完全可以胜任。 - i4niac
您可以通过添加以下代码使此功能在横向模式下正常工作:viewController.view.transform = self.view.window.rootViewController.view.transform; viewController.view.frame = self.view.window.rootViewController.view.frame; - Simon
显示剩余2条评论

1

PeyloW和xs2bush的出色建议肯定会给您带来一个完整的页面翻页效果。不过我猜您想要的是一个部分翻页效果,而非完整的翻页效果。我不认为有API可以实现这个效果,但是怎么样使用一个小技巧呢?

使用PeyloW或者xs2bush的方法,同时启动一个计时器,持续时间略小于UIViewAnimationOptionTransitionCurlUp的动画持续时间。

当计时器到期时,冻结动画并将其从正在翻页的UIView中移除:

curledView.frame = [[curledView.layer presentationLayer] frame];
[curledView.layer removeAllAnimations];

希望这能让你达到预期的效果。

1
我会使用PeyloW的答案,但还有另一种方法。在要呈现的模态视图中添加一个UIView(在viewDidLoad中),并将其定位在左上角,并将其backgroundColor设置为[UIColor clearColor]。这样,该视图将不会在屏幕上显示,但页面翻页转换将被强制从屏幕上揭开,以“显示”左上角的视图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接