代码之家  ›  专栏  ›  技术社区  ›  4thSpace wkw

为什么页面控制项目中没有动画?

  •  0
  • 4thSpace wkw  · 技术社区  · 15 年前

    我使用的是位于苹果开发人员网站上的页面控制项目。我在项目中添加了一个翻转视图,在每个视图/页面的右上角添加了一个信息图标。出于某种原因,只有第一页能够动画翻转。第2页仍然显示翻转的页面,但不显示动画。为了确保第1页没有什么特别的地方,我切换了第1页和第2页,结果很好。位置1中的第2页已设置动画,而位置2中的第1页未设置动画。你知道为什么会发生这种情况,或者我怎么能解决它吗?

    我确实看了一下这条线,这似乎是同一个问题: Flip View Iphone . 但是,我的FlipView是一个uiviewController,它上面有信息图标的类也是这样。在另一个线程中,它们使用的是uiview。

    我确实从上面的线程实现了showinfo代码。在第2页,我看不到翻页。然后我滚动到第1页,看到它翻转了。不知道为什么它不留在第2页。当在第1页时,它不动画翻转。FlipView突然出现。

    1 回复  |  直到 15 年前
        1
  •  1
  •   mahboudz    15 年前

    你有集装箱视图吗?一些可以在那里添加和删除子视图的东西?如果你有两个视图控制器,一个来,一个去,没有一个集装箱视图,动画可以中断。我使用rootviewcontroller,并使用rootviewcontroller在后面对所有页面进行动画处理。这是我的翻页代码,您可能需要进行一些编辑,使其适用于您:

    (请记住,self是rootviewcontroller,一个带有空白视图的viewcontroller(对其进行着色,使其与您的视图匹配))。

    - (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;
        }
            // in some cases the following is needed to size the view
        //  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];
    }