如何使用CALayer renderInContext并保持透视变换?

时间:2014-05-17 17:52:01

标签: ios core-graphics calayer

如何使用CALayer renderInContext并保留图层的透视变换(m34)?看起来这个方法假设一个Identity变换。我已经尝试过改变上下文这样的东西,这对于平移,旋转和缩放来说很好,但似乎没有办法保持3D变换的视角。

提出这个问题可能是一个更好的方法:如何在绘制CGContextRef时应用透视图?

1 个答案:

答案 0 :(得分:5)

您可能希望了解自iOS 7.0以来提供的方法drawViewHierarchyInRect:afterScreenUpdates:。将该方法应用于包含CALayers的视图将保持其3D变换。

示例代码:

BOOL opaqueBackground = YES;
UIGraphicsBeginImageContextWithOptions(theViewContainingYourCALayers.bounds.size, !opaqueBackground, 0);
[theViewContainingYourCALayers drawViewHierarchyInRect:theViewContainingYourCALayers.bounds afterScreenUpdates:YES];
[UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

正如马特所指出的那样,完全依赖于renderInContext:是不可能的,因为它无视除了仿射之外的任何转变。

迟到的答案,但我希望它仍有帮助。