我想从UIView创建PDF。 现在我想复制图层并将其调整为DIN A4页面大小。复制CALayer
CGRect A4PageRect = CGRectMake(0, 0, 595, 842);
CALayer *myLayer = [pdfView layer];
myLayer.bounds = pageRect;
但是,这个科迪调整了我的屏幕上的可见图层。
如何复制图层内容以调整其大小以适合A4页面?
感谢您的帮助,朱利安
我想从UIView创建PDF。 现在我想复制图层并将其调整为DIN A4页面大小。复制CALayer
CGRect A4PageRect = CGRectMake(0, 0, 595, 842);
CALayer *myLayer = [pdfView layer];
myLayer.bounds = pageRect;
但是,这个科迪调整了我的屏幕上的可见图层。
如何复制图层内容以调整其大小以适合A4页面?
感谢您的帮助,朱利安
没有办法复制的CALayer。 (这对于CoreAnimation来说是很难以合理的方式来实现的,可能会有一整层的子层,并且它们都可能有影响其行为的委托,这些委派不会突然从)
我只能猜测一个更好的解决方案,因为我不明白你的确切情况。你有没有试图调整大小的PDF,或者你是否想要一个任意的现有图层,并制作PDF文档?
如果是后者:
UIGraphicsBeginPDFContextToData
或UIGraphicsBeginPDFContextToFile
创建PDF图纸范围内UIGraphicsBeginPDFPage
或UIGraphicsBeginPDFPageWithInfo
创建一个页面UIGraphicsGetCurrentContext
获得PDF绘图环境CGContextScaleCTM
,以便您的图层适合PDF页面-[CALayer renderInContext:]
绘制层进入PDP上下文UIGraphicsEndPDFContext
完成PDF注意,这可能看起来可怕。图层是基于位图的,所以你会在你的PDF中获得一个位图。另外,-[CALayer renderInContext:]
的显示效果与屏幕上的显示效果完全不同 - 请参阅文档中的注释。
如果这是一个问题,您需要添加绕过CALayer的单独的绘图路径。在第5步中,您将使用CoreGraphics来完成自己的绘图。
FWIW,你可以通过做一个CALayer
的浅表副本:(或者你使用任何的子类如CAShapeLayer
)
(SWIFT 3)
let tmp = NSKeyedArchiver.archivedData(withRootObject: myLayer)
let copiedCA = NSKeyedUnarchiver.unarchiveObject(with: tmp) as! CALayer