iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 视图控制器的动画更改,而不使用导航控制器堆栈,子视图或模态控制器?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
NavigationControllers有ViewController堆栈来管理和限制动画过渡。

将视图控制器作为子视图添加到现有的视图控制器需要传递事件到子视图控制器,这是一个痛苦的管理,加载了一些麻烦,一般感觉像一个坏的黑客实现(苹果还建议反对这样做)。

再次呈现模态视图控制器将视图控制器放置在另一个之上,然它没有上述的事件传递问题,但它并不真正“交换”视图控制器,它将它堆叠起来。

故事板限于iOS 5,几乎是理想的,但不能用于所有项目。

有人可以提出一个SOLID CODE示例改变视图控制器的方式没有上述限制,并允许它们之间的动画过渡?

一个接近的例子,但没有动画:
How to use multiple iOS custom view controllers without a navigation controller

编辑:Nav控制器使用是很好,但需要动画转换样式(不只是幻灯片效果)显示的视图控制器需要完全交换(不堆叠)。如果第二个视图控制器必须从堆栈中删除一个视图控制器,那么它没有被封装得足够。

编辑2:iOS 4应该是这个问题的基本操作系统,我应该澄清,当提到故事板(上)。

解决方法

编辑:新的答案,工作在任何方向。
原始答案仅在界面处于纵向时工作。这是替换视图的b / c视图过渡动画,如果视图至少低于添加到窗口的第一视图(例如window.rootViewController.view.anotherView),则必须发生不同的视图。

我实现了一个简单的容器类,我称为TransitionController。你可以在https://gist.github.com/1394947找到它。

另外,我更喜欢在单独的类b / c中实现它更容易重用。如果你不想要,你可以直接在你的应用程序委托中实现相同的逻辑,消除TransitionController类的需要。你需要的逻辑是一样的。

使用方法如下:

在您的应用程式委托

// add a property for the TransitionController

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    MyViewController *vc = [[MyViewContoller alloc] init...];
    self.transitionController = [[TransitionController alloc] initWithViewController:vc];
    self.window.rootViewController = self.transitionController;
    [self.window makeKeyAndVisible];
    return YES;
}

从任何视图控制器转换到新的视图控制器

- (IBACtion)flipToView
{
    anotherViewController *vc = [[AnotherViewController alloc] init...];
    MyAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    [appDelegate.transitionController transitionToViewController:vc withOptions:UIViewAnimationOptionTransitionFlipFromRight];
}

编辑:原始答案下面 – 只适用于portait取向

我为这个例子做了以下假设:

>你有一个视图控制器被分配为你的窗口的rootViewController
>当切换到新视图时,您想要使用拥有新视图的viewController替换当前的viewController。在任何时候,只有当前的viewController是活的(例如alloc’ed)。

代码可以容易地修改以不同地工作,关键点是动画转换和单个视图控制器。确保您不将视图控制器保留在将其分配给window.rootViewController之外的任何地方。

代码以在应用程序代理中对转换进行动画

- (void)transitionToViewController:(UIViewController *)viewController
                    withTransition:(UIViewAnimationOptions)transition
{
    [UIView transitionFromView:self.window.rootViewController.view
                        toView:viewController.view
                      duration:0.65f
                       options:transition
                    completion:^(BOOL finished){
                        self.window.rootViewController = viewController;
                    }];
}

示例在视图控制器中使用

- (IBACtion)flipToNextView
{
    AnotherViewController *anotherVC = [[AnotherVC alloc] init...];
    MyAppDelegate *appDelegate = (MyAppDelegate *)[UIApplication sharedApplication].delegate;
    [appDelegate transitionToViewController:anotherVC
                             withTransition:UIViewAnimationOptionTransitionFlipFromRight];
}

大佬总结

以上是大佬教程为你收集整理的iphone – 视图控制器的动画更改,而不使用导航控制器堆栈,子视图或模态控制器?全部内容,希望文章能够帮你解决iphone – 视图控制器的动画更改,而不使用导航控制器堆栈,子视图或模态控制器?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。