2009-09-03 64 views
2

我的儿子刚刚发现他可以打开我的视图的“完成”按钮,该按钮翻转到上一个视图,一次开始翻转并作为视图一次或多次正在转换(翻转)。第二次和下一次匹配会再次触发相同的操作,创建一些有趣的结果,比如结束时没有可见的视图,但是我的基础UIWindow。当UIView处于转换过程中时按下按钮,翻转或翻转

我在想,我应该叫:

[coming.view setUserInteractionEnabled: NO]; 
[going.view setUserInteractionEnabled: NO]; 

两个参与翻动过渡的意见,然后

[coming.view setUserInteractionEnabled: YES]; 
在动画结束后的最终视图

我在想,也许比这更好的办法是在任何视图处于转换状态时全局禁用水龙头。你怎么看?

这里是整个视图切换代码:

- (void)switchTwoViews:(UIViewController *)view1 otherView:(UIViewController *)view2 
{ 
    /* 
    This method is called to switch views. 
    It flips the displayed view from the main view to the flipside view and vice-versa. 
    */ 

    UIViewController *coming = nil; 
    UIViewController *going = nil; 
    UIViewAnimationTransition transition; 

    [view1.view setUserInteractionEnabled: NO]; 
    [view2.view setUserInteractionEnabled: NO]; 
    if (view1.view.superview == nil) { 
     coming = view1; 
     going = view2; 
     transition = UIViewAnimationTransitionFlipFromLeft; 
    } 
    else { 
     coming = view2; 
     going = view1; 
     transition = UIViewAnimationTransitionFlipFromRight; 
    } 
    // coming.view.frame = [UIScreen mainScreen].applicationFrame; 

    // going.view.alpha = 1.0;  //uncomment these lines if we want fading of views 
    // coming.view.alpha = 0.0; 

    NSArray *viewArray = [[NSArray alloc] initWithObjects:coming, going, nil]; 
    [coming viewWillAppear:YES]; 
    [going viewWillDisappear:YES]; 
    [UIView beginAnimations:@"View Flip" context:viewArray]; { 
     [UIView setAnimationDuration:1.0]; 
     [UIView setAnimationDelegate:self]; 
     [UIView setAnimationDidStopSelector:@selector(animationDidEnd:finished:context:)]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

     //  coming.view.alpha = 1.0;  //uncomment these lines if we want fading of views 
     //  going.view.alpha = 0.0; 

     [UIView setAnimationTransition:transition forView:self.view cache:YES]; 
     [self.view addSubview: coming.view]; 
    } 
    [UIView commitAnimations]; 

} 

- (void) animationDidEnd:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    NSArray *viewArray = context; 
    [((UIViewController *)[viewArray objectAtIndex:1]).view removeFromSuperview]; 
    [[viewArray objectAtIndex:1] viewDidDisappear:YES]; 
    [[viewArray objectAtIndex:0] viewDidAppear:YES]; 
    [[[viewArray objectAtIndex:0] view] setUserInteractionEnabled: YES]; 
    [viewArray release]; 
} 

回答

1

setUserInteractionEnabled:似乎是要走的路。有什么异议?