代码之家  ›  专栏  ›  技术社区  ›  mahboudz

在UIView处于转换状态时点击按钮,向内或向外翻转

  •  2
  • mahboudz  · 技术社区  · 16 年前

    我儿子刚刚发现他可以点击我的视图的“完成”按钮,该按钮会翻转到上一个视图,一次开始翻转,一次或多次切换视图(翻转)。第二次和下一次点击将再次触发相同的操作,创建一些有趣的结果,例如最终没有可见的视图,但显示了我的底层UIWindow。

    我想我应该打电话:

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

    在翻转过渡涉及的两个视图上,然后

    [coming.view setUserInteractionEnabled: YES];
    

    在动画结束后的最终视图上。

    我在想,也许比这更好的方法是,在任何视图处于转换状态时,全局禁用taps。你怎么认为?

    以下是整个视图切换代码:

    - (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 回复  |  直到 16 年前
        1
  •  1
  •   mahboudz    16 年前

    推荐文章