1

PDFを含むuiviewcontrollerがあります。

PDFはviewcontrollerのコンテキストで描画され、上部のナビゲーションバーと下部のタブバーで部分的に覆われています(これが私が欲しいものです)。

ダブルタップで 2 つのバーを非表示にして、pdf ページ全体を視覚化したいと考えています。

問題は、pdf の下部が描画されず、下部のタブバーを非表示にすると、この事実が明らかになることです (上部のナビゲーションバーの非表示はうまく機能します)。

私の質問は次のとおりです。ボトムバーを非表示にした後、「完全な」コンテキストでpdfを描画するにはどうすればよいですか?

(私はすでにsetNeedsDisplay再描画を強制するために使用しようとしましたが、バーが非表示になった後もコンテキストは同じです)

以下は、pdf ページを描画するコードです。

-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx

{

CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
CGContextFillRect(ctx, self.bounds);
CGContextTranslateCTM(ctx, 0.0, self.bounds.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(pdfPage,kCGPDFMediaBox,self.bounds, 0, true));
CGContextDrawPDFPage(ctx, pdfPage);

}

バーを初期化するコード (appdelegate 内):

tabBarController = [[UITabBarController alloc] init];

MagazineViewController *magazineViewController = [[MagazineViewController alloc] init];
NewsTableViewController *newsViewController = [[NewsTableViewController alloc] init];
VideoViewController *videoViewController = [[VideoViewController alloc] init];

UINavigationController *magazineNavigationController = [[UINavigationController alloc] initWithRootViewController:magazineViewController];  
UINavigationController *newsNavigationController = [[UINavigationController alloc] initWithRootViewController:newsViewController];  
UINavigationController *videoNavigationController = [[UINavigationController alloc] initWithRootViewController:videoViewController];

magazineNavigationController.navigationBar.tintColor = [UIColor blackColor];
newsNavigationController.navigationBar.tintColor = [UIColor blackColor];
videoNavigationController.navigationBar.tintColor = [UIColor blackColor];

NSArray *tabsArray = [NSArray arrayWithObjects:magazineNavigationController, newsNavigationController, videoNavigationController, nil];

tabBarController.viewControllers = tabsArray;

[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

バーを非表示にするコード:

for (UINavigationController *controller in tabBarController.viewControllers) {
        if(controller.navigationBar.topItem.title == @"Magazine") {
            [controller setNavigationBarHidden:(!controller.navigationBar.hidden) animated:YES];
            tabBarController.tabBar.hidden = !tabBarController.tabBar.hidden;
            [self setNeedsDisplay];
            return;
        }
    }

ありがとう

4

2 に答える 2

0

問題は、バーを非表示にするコードにあります。

[controller setNavigationBarHidden:(!controller.navigationBar.hidden) animated:YES];
tabBarController.tabBar.hidden = !tabBarController.tabBar.hidden;

最初の行は、ナビゲーション バーを削除するヘルパー メソッドです。そのため、ビューから適切に削除されます。2 行目は 'hidden' プロパティを変更しているだけなので、うまく削除されません。

タブ バーを適切に非表示にし、コンテキストを切り取らないようにするには、フレームを調整します。良い例を次に示します。または、次のようにタブ バーにフレームを設定することもできます。

2行目と交換

tabBarController.tabBar.frame = CGRectMake(0,0,0,0);
于 2010-11-17T18:43:54.937 に答える
-1

NSLog the self.bounds、ここに素晴らしいツールボックス関数があります:

-(NSString*)getStringFromCGRect:(CGRect)rect WithLabel:(NSString*)idName
{


return [NSString stringWithFormat:@">%@\nx:%f\ny:%f\nWidth:%f\nHeight:%f\n\n",idName,rect.origin.x,rect.origin.y,rect.size.width,rect.size.height];
}

境界はビューサイズ、つまりツールバーの高さになると思います。そうでない場合はCALayer、描画クラスを作成するときに設定しますか?

于 2010-11-17T16:51:04.690 に答える