6

我正在尝试将类似 iBooks 的翻转过渡实现为故事板。segue应该推动resp。弹出destinationViewController/弹出 UINavigationControllers 堆栈。

我可以在我的 seguesperform方法中推送视图控制器,但我无法弹出。当我在创建翻转动画后立即弹出控制器时,动画不会运行并且它的回调 - 应该执行的回调[[UIApplication sharedApplication] endIgnoringInteractionEvents]永远不会被调用并且我的 App 结果死了。

所以我尝试在animationDidStop:anim:flag委托方法中推送/弹出,但它永远不会在标志设置为 true 的情况下被调用。

我假设在调用委托方法之前释放了 segue。我还能做什么?

4

2 回答 2

5

如果我完全误解了这个问题,请原谅我,但您似乎只想在两个视图控制器之间来回进行基本的水平翻转。即使你已经弄清楚了,也许它会帮助其他有同样问题的人。

(1) 在您的故事板(具有 ViewController A 和 B)中,创建一个从 A 到 B 的模态 Segue。给它一个标识符 (showViewControllerB) 并选择 Transition:Flip Horizo​​ntal。

我们设置协议和委托:

(2a) 在 ViewControllerB.h 上面添加@interface:

@class ViewControllerB;

@protocol ViewControllerBDelegate
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller;
@end

(2b) 将委托添加为属性:

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate;

(3a) 在 ViewControllerB.m 中合成:

@synthesize delegate;

(3b) 并在方法中委托翻转:

- (IBAction)flipBack:(id)sender
{
    [self.delegate viewControllerBDidFinish:self];
}

#import "ViewControllerB.h"(4) 在 ViewControllerA.h 中添加@interface的最顶部和末尾<ViewControllerBDelegate>

(5a) 在 ViewControllerA.m 中添加符合协议的方法:

- (void)viewControllerBDidFinish:(ViewControllerB *)controller
{
    [self dismissModalViewControllerAnimated:YES];
}

(5b) 然后在prepareForSegue中设置为delegate:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) {
        [[segue destinationViewController] setDelegate:self];
    }
}

我希望这回答了你的问题。如果我误解了,请告诉我。

于 2012-06-23T19:49:04.160 回答
0

你的问题有点令人困惑,因为混合了流行、推、翻转和后空翻。我不确定ai是否可以回答您的问题,但我可以说出我做了什么。

如果我将 viewController 推入导航控制器堆栈并将 Storyboard Segue 样式设置为 Push,它将从右到左推入视图。出现一个后退按钮并在其中显示presentingViewController 的标题。

如果我将 Storyboard Segue Style 设置为 Modal,我可以将 Transition 设置为 Flip Horizo​​ntal(这似乎是您想要的)。但是不会出现后退按钮。在presentViewController 中,我使用以下命令关闭视图:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

它将通过右翻转将第二个视图翻转回来。

但这是肮脏的解决方案,苹果不推荐。

http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW9

Luke Dubert 为您提供了如何实现委托的示例。

于 2012-10-18T12:11:05.177 回答