2012-04-07 25 views
0

我想从UIView创建PDF。 现在我想复制图层并将其调整为DIN A4页面大小。复制CALayer

CGRect A4PageRect = CGRectMake(0, 0, 595, 842); 
CALayer *myLayer = [pdfView layer]; 
myLayer.bounds = pageRect; 

但是,这个科迪调整了我的屏幕上的可见图层。

如何复制图层内容以调整其大小以适合A4页面?

感谢您的帮助,朱利安

回答

2

没有办法复制的CALayer。 (这对于CoreAnimation来说是很难以合理的方式来实现的,可能会有一整层的子层,并且它们都可能有影响其行为的委托,这些委派不会突然从)

我只能猜测一个更好的解决方案,因为我不明白你的确切情况。你有没有试图调整大小的PDF,或者你是否想要一个任意的现有图层,并制作PDF文档?

如果是后者:

  1. 使用UIGraphicsBeginPDFContextToDataUIGraphicsBeginPDFContextToFile创建PDF图纸范围内
  2. 呼叫UIGraphicsBeginPDFPageUIGraphicsBeginPDFPageWithInfo创建一个页面
  3. 呼叫UIGraphicsGetCurrentContext获得PDF绘图环境
  4. 规模使用CGContextScaleCTM,以便您的图层适合PDF页面
  5. 致电-[CALayer renderInContext:]绘制层进入PDP上下文
  6. 呼叫UIGraphicsEndPDFContext完成PDF

注意,这可能看起来可怕。图层是基于位图的,所以你会在你的PDF中获得一个位图。另外,-[CALayer renderInContext:]的显示效果与屏幕上的显示效果完全不同 - 请参阅文档中的注释。

如果这是一个问题,您需要添加绕过CALayer的单独的绘图路径。在第5步中,您将使用CoreGraphics来完成自己的绘图。

0

FWIW,你可以通过做一个CALayer的浅表副本:(或者你使用任何的子类如CAShapeLayer

(SWIFT 3)

let tmp = NSKeyedArchiver.archivedData(withRootObject: myLayer) 
let copiedCA = NSKeyedUnarchiver.unarchiveObject(with: tmp) as! CALayer 

感谢: https://stackoverflow.com/a/35345819/1452758