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