UIView transitionFromView:toView:动画无效。

时间:2012-02-26 19:25:48

标签: ios cocoa-touch uiviewcontroller appdelegate uiviewanimationtransition

这是我在stackoverflow上的第一篇文章。我是iOS开发人员新手,我不是母语为英语的人,所以我会尽力解释我的问题。

问题:

我已经在AppDelegate窗口中添加了两个视图,我想使用以下方法从一个窗口翻转到另一个窗口:

 UIView transitionFromView:toView:

第一个视图(MainScreenView)有自己的ViewController。在MainScreenView .xib文件中,我有一个按钮,其动作调用我的AppDelegate中实现的方法“goShow”。在该方法中,我使用UIView transitionFromView:toView:转换到第二个视图。到目前为止一切正常。 我的第二个视图(一个scrollview)在我的AppDelegate中以编程方式声明,并且里面有一堆图片(picturesViewController),并且在这些视图之上有一个UIPinchGestureRecognizer

我正在使用手势识别器来翻回我的MainScreenView。这就是问题所在。当我在滚动视图上执行捏合手势时,MainScreenView.view会立即显示在动画之前,因此翻转动画看起来不对。

我正在使用的代码是:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

mainScreen = [[MainScreenViewController alloc] initWithNibName:@"MainScreenViewController" bundle: [NSBundle mainBundle]];

CGRect frame = self.window.bounds;
int pageCount = 10;
scrollView = [[UIScrollView alloc] initWithFrame:frame];
scrollView.contentSize = CGSizeMake(320*pageCount, 480);
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = FALSE;
scrollView.showsVerticalScrollIndicator = FALSE;
scrollView.delegate = self;

[...] 'While' adding pictures to de scrollView

UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain)] autorelease];
[scrollView addGestureRecognizer:twoFingerPinch];

[self.window addSubview: scrollView];
[scrollView setHidden:TRUE];
[self.window addSubview: mainScreen.view];

[self.window makeKeyAndVisible];
return YES;
}

-(void) goShow{

[UIView transitionFromView:mainScreen.view
                    toView:scrollView 
                  duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews                    
                completion:NULL];

[UIView commitAnimations];    
}

-(void) goBackToMain {

[UIView transitionFromView:scrollView
                    toView:mainScreen.view 
                  duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews                     
                completion:NULL]; 

[UIView commitAnimations];
}

我正在使用显示/隐藏视图而不是addSubview/removeFromSuperView,因为我尝试了添加和删除,并在捏手势中遇到应用程序崩溃,完全与动画失败的步骤相同。可能是同样的错误,但我无法找到原因。任何帮助,将不胜感激。

感谢。

确定。在Adrian的帮助下,这是解决我问题的UIPinchGesture代码:

[...]

UIPinchGestureRecognizer *twoFingerPinch = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(goBackToMain:)] autorelease];
[scrollView addGestureRecognizer:twoFingerPinch];


-(void)goBackToMain:(UIPinchGestureRecognizer *)recognizer {

if (recognizer.state == UIGestureRecognizerStateEnded)
{
    [UIView transitionFromView:scrollView
                        toView:mainScreen.view 
                      duration:0.4
                       options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews                     
                    completion:nil]; 

    [UIView commitAnimations];
}

2 个答案:

答案 0 :(得分:1)

首先,您不能将旧方法beginAnimation commitAnimation组合与新的方法transitionFromView混合使用。

其次,在使用块方法动画时,请确保使用容器(可能是UIView),该容器将是要切换的两个视图的父级。如果没有容器,您将为整个视图设置动画。确保容器的大小与要切换的子视图的大小相同。

示例:


    [container addSubView:frontView];
    [container addSubView:backView];

    [self.view addSubView:container];

    [UIView transitionFromView:backView toView:frontView duration:0.5 options:UIViewAnimationOptionTransitionFlipFromRight completion:nil];

答案 1 :(得分:0)

Read more about animations in iOS

在您的示例中,您忘记了[UIView beginAnimations]