Почему нет анимации в проекте PageControl? - PullRequest
0 голосов
/ 01 ноября 2009

Я использую проект PageControl, который находится на сайте разработчиков Apple. Я добавил флип-вид к проекту и значок информации в правом верхнем углу каждого вида / страницы. По какой-то причине, только первая страница способна анимировать перелистывание. Страница 2 по-прежнему показывает перевернутую страницу, но не анимирует. Чтобы убедиться, что в странице 1 нет ничего особенного, я переключаю страницы 1 и 2, и это работает нормально. Страница 2 в позиции 1 анимирована, а страница 1 в позиции 2 - нет. Любые идеи, почему это произойдет, или как я могу решить проблему?

Я посмотрел на эту ветку, которая, кажется, та же проблема: Flip View Iphone . Тем не менее, My flipview - это UIViewController, как и класс со значком информации. В другом потоке они используют UIViews.

Я реализовал код showInfo из приведенного выше потока. Когда на странице 2, я не вижу сальто. Затем я прокручиваю страницу 1 и вижу, что она перевернулась. Не уверен, почему он не остается на странице 2. На странице 1 он не оживляет флип. Флипвью внезапно появляется.

1 Ответ

1 голос
/ 01 ноября 2009

У вас есть containerView? Что-то, что может быть там, чтобы вы могли добавлять и удалять подпредставления из него? Анимация может прерваться, если у вас есть два viewController, один входящий и другой уходящий без контейнера. Я использую 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];
}
...