1

iPhone と iPad の両方で動作する UIPageViewController ベースのアプリを開発しています。iPhone では、コントローラーのスパインの位置が常に UIPageViewControllerSpineLocationMin に設定されているため、問題はありません。ただし、iPad では、デバイスの向きが横に設定されている場合、スパインの位置を UIPageViewControllerSpineLocationMid に設定する必要があります。

コントローラーを横向きにロードしたときにのみ奇妙な問題が発生します。次のビデオで状況を説明します.. YouTubeVideo

ご覧のとおり、コントローラーを縦向きにロードしたとき、および横向きにロードしたときにデバイスを回転させた後でも、すべてが完全に機能します。

どこに問題があるのか​​ 本当にわかりません。コントローラーをロードするために使用するコードは次のとおりです。

    if (chapter.controllers) {

        currentPage = [chapter bookPageForCharIndex:location];

        //Load the correct controller for the bookmark page
        NSArray *array = nil;
        if (currentPage >= 0 && currentPage < chapter.controllers.count) {
            if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice]orientation])  && UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) {
                [self setDoubleSided:YES];
                if (chapter.controllers.count > currentPage+1) {
                    array = [[NSArray alloc]initWithObjects:[chapter.controllers objectAtIndex:currentPage],[chapter.controllers objectAtIndex:currentPage+1],nil];
                }
                else {
                    array = [[NSArray alloc]initWithObjects:[chapter.controllers objectAtIndex:currentPage],[[[LSBookPageViewController alloc]init]autorelease],nil];
                }
            }
            else {
                array = [[NSArray alloc]initWithObjects:[chapter.controllers objectAtIndex:currentPage],nil];
            }
        }
        else {
            return;
        }
        [self playSoundsOfChapter:chapter];

        if (isRestarting) {
            [self setViewControllers:array
                           direction:UIPageViewControllerNavigationDirectionReverse 
                            animated:YES 
                          completion:nil];
            isRestarting = NO;
        }
        else {
            [self setViewControllers:array
                           direction:UIPageViewControllerNavigationDirectionForward 
                            animated:YES 
                          completion:nil];
        }
        [array release];
    }
4

1 に答える 1

0

エラーは最初のelse句にあると思います。デバイスの向きとデバイスを確認した後、ブレークポイントを設定し、コードをステップ実行する必要があります。私はあなたarrayが空に戻ってくると思います。

于 2012-08-14T12:03:01.780 に答える