我正在使用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会出现这种情况吗?