我创建了一个CAGradientLayer,它工作得非常好。 但我的问题是,我想在SpriteKit中使用它作为背景......
是否有可能实现它? 也许把它放在SKSpriteNode中?
提前致谢
编辑:
不幸的是有一条错误消息:
5月28日19:08:19 amirs-mbp Gradient [2845]:CGContextSaveGState:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。它将成为即将到来的更新中的致命错误。 5月28日19:08:19 amirs-mbp Gradient [2845]:CGContextSaveGState:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。它将成为即将到来的更新中的致命错误。 5月28日19:08:19 amirs-mbp Gradient [2845]:CGContextClipToRect:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。它将成为即将到来的更新中的致命错误。 5月28日19:08:19 amirs-mbp Gradient [2845]:CGContextTranslateCTM:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。它将成为即将到来的更新中的致命错误。 5月28日19:08:19 amirs-mbp Gradient [2845]:CGContextScaleCTM:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。它将成为即将到来的更新中的致命错误。 5月28日19:08:19 amirs-mbp Gradient [2845]:CGContextDrawLinearGradient:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。它将成为即将到来的更新中的致命错误。 5月28日19:08:19 amirs-mbp Gradient [2845]:CGContextRestoreGState:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。它将成为即将到来的更新中的致命错误。 5月28日19:08:19 amirs-mbp Gradient [2845]:CGContextRestoreGState:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。在即将到来的更新中,它将成为一个致命的错误。
答案 0 :(得分:2)
我认为你会有更好的运气:
答案 1 :(得分:1)
首先将图层转换为UIImage *:
- (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;
}
然后用它初始化一个SKSpriteNode:
SKSpriteNode* node = [SKSpriteNode spriteNodeWithColor:[UIColor colorWithPatternImage:image]
size:yourLayer.bounds.size]
答案 2 :(得分:0)
此功能适用于从CAGradientLayer创建SpriteNode。请注意它是GameScene的一个功能,因此这就是“自我框架”。它所指的上下文获得正确的渐变大小。
func layerToSKSpriteNode(layer : CALayer) -> SKSpriteNode
{
var view = UIView()
layer.frame = self.frame
view.layer.addSublayer(layer)
UIGraphicsBeginImageContext(self.frame.size)
view.layer.renderInContext(UIGraphicsGetCurrentContext())
var bgImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return SKSpriteNode(texture: SKTexture(image: bgImage))
}