这是我在 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];
}