6

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

问题:

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

 UIView transitionFromView:toView:

第一个视图 (MainScreenView) 有自己的ViewController. 在 MainScreenView .xib 文件上,我有一个按钮,其中包含一个调用在我的 AppDelegate 中实现的方法“goShow”的操作。在那种方法中,我UIView transitionFromView:toView:用来转换到第二个视图。到目前为止,一切正常。我的第二个视图(滚动视图)在我的 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];
}
4

2 回答 2

1

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

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

例子:

    [容器 addSubView:frontView];
    [容器 addSubView:backView];

    [self.view addSubView:container];

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

于 2013-10-11T11:07:30.277 回答
0

阅读有关 iOS 动画的更多信息

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

于 2012-02-26T19:52:17.353 回答