0

我试图在 aUIWebView而不是 a中绘制内容UIView,因为我喜欢UIWebView通过捏合来放大和缩小的能力。这是我的代码:

// 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's 背景透明,如下所示:

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 中!它绝对不是为此而设计的。它被设计成一个显示网页内容的黑匣子,以及(上帝的怜悯)pdf。

使用 UIScrollView 并在那里绘制您的 pdf。这没什么神奇的,它旨在允许缩放。为了使缩放有效,您可能希望在用户缩放后使用 CATiledLayer 重新绘制 pdf 页面,否则文本会变得模糊。

免责声明:我花了大约一年的时间编写PSPDFKit,一个可以做到这一点的库。实际上很难让它快速运行并且不会在旧设备上崩溃。

当我再次查看您的代码时,您是否需要pdf?为什么不直接绘制作为 UIScrollView 的子视图的 UIView?应该可以完美地满足您的需求。也将比一直编写/解析/渲染 pdf 仅用于绘制要快得多。

于 2011-12-27T11:57:03.183 回答