Ios 复卷尺

Ios 复卷尺,ios,pdf,uiview,calayer,Ios,Pdf,Uiview,Calayer,我想从UIView创建PDF。 现在我想复制图层并将其调整为DIN A4页面大小 CGRect A4PageRect = CGRectMake(0, 0, 595, 842); CALayer *myLayer = [pdfView layer]; myLayer.bounds = pageRect; 但是科迪调整了我屏幕上可见层的大小 如何复制图层内容以调整其大小以适合A4页面 谢谢你的帮助,朱利安没有办法复制CALayer (CoreAnimation很难以合理的方式实现这一点。可能有一整

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

CGRect A4PageRect = CGRectMake(0, 0, 595, 842);
CALayer *myLayer = [pdfView layer];
myLayer.bounds = pageRect;
但是科迪调整了我屏幕上可见层的大小

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


谢谢你的帮助,朱利安

没有办法复制CALayer

(CoreAnimation很难以合理的方式实现这一点。可能有一整棵树的子层,它们都可能有影响其行为的委托,这不会期望突然从层的副本中获得请求。)

我只能猜测更好的解决办法,因为我不了解你的确切情况。你有一个PDF文件,你正试图调整大小,或你只是想采取一个任意现有的层,使一个PDF文件了吗

如果后者:

  • 使用或创建PDF图形上下文
  • 调用或创建页面
  • 调用以获取PDF绘图上下文
  • 使用缩放,使您的图层适合PDF页面
  • 调用将层绘制到PDF上下文中
  • 调用
    UIGraphicsEndPDFContext
    完成PDF
  • 请注意,这可能看起来很糟糕。图层是基于位图的,因此您将在PDF中获得位图。另外,
    -[CALayer renderInContext:
    的渲染与屏幕上的渲染不完全相同——请参见文档中的注释


    如果这是一个问题,则需要添加一个绕过CALayer的单独图形路径。在步骤5中,您可以使用CoreGraphics绘制自己的图形。

    无法复制CALayer

    (CoreAnimation很难以合理的方式实现这一点。可能有一整棵树的子层,它们都可能有影响其行为的委托,这不会期望突然从层的副本中获得请求。)

    我只能猜测更好的解决办法,因为我不了解你的确切情况。你有一个PDF文件,你正试图调整大小,或你只是想采取一个任意现有的层,使一个PDF文件了吗

    如果后者:

  • 使用或创建PDF图形上下文
  • 调用或创建页面
  • 调用以获取PDF绘图上下文
  • 使用缩放,使您的图层适合PDF页面
  • 调用将层绘制到PDF上下文中
  • 调用
    UIGraphicsEndPDFContext
    完成PDF
  • 请注意,这可能看起来很糟糕。图层是基于位图的,因此您将在PDF中获得位图。另外,
    -[CALayer renderInContext:
    的渲染与屏幕上的渲染不完全相同——请参见文档中的注释


    如果这是一个问题,则需要添加一个绕过CALayer的单独图形路径。在步骤5中,您可以使用CoreGraphics绘制自己的图形。

    FWIW,您可以通过以下方式制作
    CALayer
    的浅层副本:

    (Swift 3)

    (或您正在使用的任何子类,例如
    CAShapeLayer


    感谢:

    FWIW,您可以通过以下方式制作
    CALayer
    的浅拷贝:

    (Swift 3)

    (或您正在使用的任何子类,例如
    CAShapeLayer


    感谢:

    在您的情况下,使用建议的解决方案确实更好,但作为记录,是的,您可以通过某种方式复制CALayer:使用CareReplicatorLayer

    这是一个非常强大的API,不是复制一个层所必需的构建,但它也适用于该层。通过复制一系列的图层,它可以更好地产生惊人的视觉效果

    有关更多信息,请参见以下摘录:

    创建其子层(源层)的指定数量副本的层,每个副本可能应用几何、时间和颜色变换

    这里有一个伟大的,另一个摘录:

    CareReplicatorLayer专门以高效的硬件加速方式绘制原始层的多个副本(因此它是一个“复制器”)。当绘制像平铺背景、图案或其他应该重复多次的东西时,它非常有用。我甚至用它来实现我即将推出的开源Swift游戏引擎的纹理平铺功能


    最后,这里介绍了使用此api可以做些什么。

    在您的情况下,使用建议的解决方案确实更好,但作为记录,您可以在某种程度上复制CALayer:使用CareReplicatorLayer

    这是一个非常强大的API,不是复制一个层所必需的构建,但它也适用于该层。通过复制一系列的图层,它可以更好地产生惊人的视觉效果

    有关更多信息,请参见以下摘录:

    创建其子层(源层)的指定数量副本的层,每个副本可能应用几何、时间和颜色变换

    这里有一个伟大的,另一个摘录:

    CareReplicatorLayer专门以高效的硬件加速方式绘制原始层的多个副本(因此它是一个“复制器”)。当绘制像平铺背景、图案或其他应该重复多次的东西时,它非常有用。我甚至用它来实现我即将推出的开源Swift游戏引擎的纹理平铺功能

    最后,这里介绍了使用这个api可以做些什么

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