我似乎有一个涉及renderInContext的奇怪错误。
我正在开发一个“剪贴簿”应用程序,它允许人们在剪贴簿视图中自由排列文本,彩色方块和照片。请注意,用户可以添加内置照片集(通过imageNamed :)加载的照片和来自资产库的照片。
我的代码根据需要从剪贴簿视图及其所有子视图创建PDF和缩略图,首先创建PDFContext(对于PDF)或ImageContext(对于缩略图),然后在scrapBookView.layer上调用renderInContext。
一般来说,代码是有效的,我将描述一个例外。在创建PDF时,内置图像和资源库图像都正确地包含在渲染的PDF中。但是,当我创建缩略图时,会显示内置图像,但资产库图像不会正确显示。我知道imageView就在那里,因为在其他地方我将它的背景颜色设置为浅灰色,但图像本身不存在。
我怀疑可能有一个异步元素将图像加载到图像视图中,当图像资源库图像呈现为ImageContext时,图像无法足够快地到达那里。
这可能吗?如果没有,为什么renderInContext在PDFContext中工作得很好但在ImageContext中却不太好?
更重要的是,我怎样才能将我的资产库图像包含在缩略图中。
pdf表示和缩略图都是通过scrapbookView中的方法创建的。代码如下:
创建pdfs:
-(NSData*) pdfRepresentation
{
//== create a pdf context
NSMutableData* result = [[NSMutableData alloc] init];
UIGraphicsBeginPDFContextToData(result, self.bounds, nil);
UIGraphicsBeginPDFPage();
//== draw this view into it
[self.layer renderInContext: UIGraphicsGetCurrentContext()]; // works for asset library images
//== add a rectangular frame also
CGContextRef pdf = UIGraphicsGetCurrentContext();
CGContextAddRect(pdf, self.bounds);
[[UIColor lightGrayColor] setStroke];
CGContextStrokePath(pdf);
//== clean up and return the results
UIGraphicsEndPDFContext();
return [result copy];
}
创建缩略图:
-(UIImage*) thumbnailRepresentation
{
//== create a large bitmapped image context
CGFloat minSpan = MIN(self.bounds.size.height, self.bounds.size.width);
CGSize imageSize = CGSizeMake(minSpan, minSpan);
UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0.0);
//== draw the current view into the bitmap context
self.backgroundColor = [UIColor whiteColor];
[self.layer renderInContext: UIGraphicsGetCurrentContext()]; // doesn't work for asset library images
self.backgroundColor = [UIColor clearColor];
//== get the preliminary results
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//== create a smaller image from this image
CGFloat thumbnailWidth = 40.0;
CGFloat scaleFactor = thumbnailWidth / minSpan;
UIImage* result = [UIImage imageWithCGImage:[image CGImage] scale:scaleFactor orientation:UIImageOrientationUp];
return result;
}
// btw - seems wasteful to create such a large intermediate image
任何帮助都将不胜感激。