【发布时间】:2016-05-30 13:07:37
【问题描述】:
我正在使用 PocketSVG 框架来渲染 SVG 图像。该框架将 SVG 渲染到 CAShapeLayer 上,然后可以将其添加到视图子层以显示 SVG。我想从这个 CAShapeLayer 生成一个 UIImage,但是执行此操作的代码似乎在 Swift 中不起作用。在objective-c中,这相当简单,我在下面使用的代码
- (UIImage *)imageFromLayer:(CALayer *)layer
{
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions([layer frame].size, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext([layer frame].size);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage;
}
我已经在一个 Objective-c 项目中对此进行了测试,并且效果很好。所以我将上面的代码转换为 Swift
func imageFromLayer (layer : CALayer) -> UIImage
{
if(UIScreen.mainScreen().respondsToSelector("scale"))
{
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, UIScreen.mainScreen().scale)
}
else
{
UIGraphicsBeginImageContext(layer.frame.size)
}
layer.renderInContext(UIGraphicsGetCurrentContext()!)
let outputImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return outputImage
}
但是应用在这条线上崩溃了
layer.renderInContext(UIGraphicsGetCurrentContext()!)
说“致命错误:在展开可选值时意外发现 nil”
有人知道为什么会这样吗?作为一种解决方法,我什至尝试在我的 Swift 项目中添加一个桥接头文件,并添加了一个包含 imageFromLayer 方法的 Objective-c 类,但是当我在我的 Swift 类中运行此方法时,我收到以下错误
<Error>: CGContextSetStyle: invalid context 0x0.
有人知道为什么在 Swift 中会发生这种情况吗?
【问题讨论】:
-
因为图层和上下文的大小为零?
-
尝试使用图层边界大小而不是其帧大小?图层实际上没有框架
-
啊,完全错过了,我犯了愚蠢的错误,你的权利,就行了!!
-
把它作为答案。
标签: swift