0

ピンチでズームインおよびズームアウトする機能が好きなので、UIWebViewではなくコンテンツを描画しようとしています。これが私のコードです:UIViewUIWebView

// setup environment
CGRect outputRect = myWebView.bounds;
CFMutableDataRef data = CFDataCreateMutable(NULL, 0); // init with default allocator and unlimited size
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(data);
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &outputRect, NULL);

CGPDFContextBeginPage(pdfContext, NULL);

// draw something
CGContextSetRGBFillColor (pdfContext, 1, 0, 0, 1);
CGContextFillRect (pdfContext, CGRectMake (0, 0, 200, 100 ));
CGContextSetRGBFillColor (pdfContext, 0, 0, 1, .5);
CGContextFillRect (pdfContext, CGRectMake (0, 0, 100, 200 ));

CGPDFContextEndPage(pdfContext);

// load drawing in webView
[myWebView loadData:(NSData *)data MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

// cleanup
if(data != NULL) CFRelease(data); // always make sure to not pass NULL in CFRelease
CGDataConsumerRelease(dataConsumer);
CGContextRelease(pdfContext);

UIWebView目に見えるようにしたい他のことが起こっているので、次のようにの背景UIWebViewを透明にしました。

myWebView.opaque = NO; //otherwise setting background color has no effect
myWebView.backgroundColor = [UIColor clearColor];

PDFをロードしない場合、これは正しく機能します。ただし、PDFが読み込まれると、下のスクリーンショットのように、ページの背景が白になり、影が表示されます。これは私のUIデザインを台無しにしています。どうすれば影を取り除き、PDFページを透明にすることができますか?

ありがとう

ここに画像の説明を入力してください

4

1 に答える 1

7

UIWebViewは、内部フレームワークを使用してPDFを表示します。これは、少なくともいくつかのクレイジーなサブクラス化ハッカーでは、背景を変更することはできません。そして、UIWebViewの内部をいじってはいけません。そして、あなたは本当に、UIWebViewにカスタムコンテンツを描画するべきではありません!それは絶対にそのために設計されていません。これは、Webコンテンツ、および(神の慈悲によって)pdfを表示するブラックボックスとして扱われるように設計されています。

UIScrollViewを使用して、そこにPDFを描画します。それほど魔法ではなく、ズームできるように設計されています。ズームを有効にするには、ユーザーがズームした後、CATiledLayerを使用してPDFページを再描画することをお勧めします。そうしないと、テキストがぼやけてしまいます。

免責事項:私はPSPDFKitを書くのに約1年を費やします。これは、まさにそれを行うライブラリです。それを速くすることは実際には非常に困難であり、古いデバイスでもクラッシュしません。

あなたのコードをもう一度見ると、PDFが必要ですか?UIScrollViewのサブビューであるUIViewに描画してみませんか?ニーズに合わせて完全に機能するはずです。また、描画するためだけにPDFを作成/解析/レンダリングするよりも、はるかに高速になります。

于 2011-12-27T11:57:03.183 に答える