gpt4 book ai didi

iphone - iOS 上的矢量 PDF 图形元素

转载 作者:可可西里 更新时间:2023-11-01 05:48:26 25 4
gpt4 key购买 nike

目前在 iOS 上实现矢量界面元素非常特殊,UIImage 宣传仅支持光栅格式,但我能够将 pdf 文件设置为 IB 中 UIButton 的图像 here并且它以良好的抗锯齿呈现,但是图像在运行 iOS 4.x 和 3.x 的 iphone 或 ipad 上不可见,让它显示的唯一方法是在代码中重新创建相同的按钮并省略 .pdf 扩展名:

searchButton = [UIButton buttonWithType:UIButtonTypeCustom];
[searchButton setImage:[UIImage imageNamed:@"search"] forState:UIControlStateNormal];
[self.view addSubview:searchButton];

然而,这只显示了 iOS 4.x 上的图像,并且具有相当大的调整大小像素化并且没有抗锯齿,如图所示:

alt text

除了为什么它看起来这么糟糕、为什么它只能在 4.x 中工作以及为什么 IB 版本根本不起作用等显而易见的问题之外,有没有人知道在应用程序中正确使用矢量艺术的任何方法?

它不一定是 PDF,但我看到 Apple 在 mac 端应用程序上使用了很多,上面的代码和 IB 方法在 OSX 应用程序 BTW 上工作得很好。

最佳答案

由于 iOS 错过了 PDFKit.framework,我猜想 UIImage 的 PDF 支持有限/损坏的问题是它一开始就不应该有任何支持,在这方面我已经报告了它的有限支持作为一个错误 (rdar:8338627) 并且它也是 IB 中的一个错误,渲染支持可能从 osx 继承过来。

我已经决定只在上下文中手动渲染 pdf,然后将其保存到 UIImage,其代码如下(在 iOS 3.x 和 4.x 上测试)

#include <dlfcn.h>

-(UIImage *)UIImageFromPDF:(NSString*)fileName size:(CGSize)size{
CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (CFStringRef)fileName, NULL, NULL);
if (pdfURL) {
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL(pdfURL);
CFRelease(pdfURL);
//create context with scaling 0.0 as to get the main screen's if iOS4+
if (dlsym(RTLD_DEFAULT,"UIGraphicsBeginImageContextWithOptions") == NULL) {
UIGraphicsBeginImageContext(size);
}else {
UIGraphicsBeginImageContextWithOptions(size,NO,0.0);
}
CGContextRef context = UIGraphicsGetCurrentContext();
//translate the content
CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSaveGState(context);
//scale to our desired size
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1);
CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(page, kCGPDFCropBox, CGRectMake(0, 0, size.width, size.height), 0, true);
CGContextConcatCTM(context, pdfTransform);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);
//return autoreleased UIImage
UIImage *ret = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGPDFDocumentRelease(pdf);
return ret;
}else {
NSLog(@"Could not load %@",fileName);
}
return nil;
}

关于iphone - iOS 上的矢量 PDF 图形元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3533244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com