0

私はAppleの開発サイトにあるPageControlプロジェクトを使用しています。プロジェクトにフリップビューを追加し、各ビュー/ページの右上に情報アイコンを追加しました。何らかの理由で、最初のページだけがめくりをアニメーション化できます。上のページ2には、反転したページが表示されますが、アニメーション化されません。1ページ目が特別なことではないことを確認するために、1ページ目と2ページ目を切り替えましたが、問題なく機能しました。位置1のページ2はアニメーション化されましたが、位置2のページ1はアニメーション化されませんでした。なぜこれが起こるのか、またはどうすればそれをトラブルシューティングできるのか、何か考えはありますか?

私はこのスレッドを調べましたが、これは同じ問題のようです:FlipViewIphone。ただし、私のフリップビューはUIViewControllerであり、情報アイコンが付いたクラスも同様です。他のスレッドでは、UIViewを使用しています。

上記のスレッドからshowInfoコードを実装しました。2ページ目にあるとき、反転は見られません。次に、ページ1までスクロールして、ページが反転していることを確認します。ページ2にとどまらない理由がわかりません。ページ1にいるときは、フリップをアニメーション化しません。フリップビューが突然表示されます。

4

1 に答える 1

1

containerViewはありますか?そこにサブビューを追加したり削除したりできるものはありますか?containerViewなしで、1つが来るものともう1つが行くものの2つのviewControllerがある場合、アニメーションが壊れる可能性があります。私はrootViewControllerを使用し、すべてのページを相互にアニメーション化し、rootViewcontrollerを背面に配置します。これがフリッピングの私のコードです。おそらく、それを機能させるために少し編集する必要があります。

(selfはrootViewcontrollerであり、ビューが空白のビューコントローラーであることに注意してください(ビューに一致するように色を付けてください))

- (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];
}
于 2009-11-01T08:50:03.587 に答える