3

我创建了一个 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。这是一个严重的错误。此应用程序或它使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将成为即将到来的更新中的致命错误。或它使用的库,正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将成为即将到来的更新中的致命错误。或它使用的库,正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将成为即将到来的更新中的致命错误。

4

3 回答 3

2

我认为你会有更好的运气:

https://github.com/braindrizzlestudio/BDGradientNode

于 2015-04-05T06:35:01.653 回答
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]
于 2014-05-28T16:46:01.177 回答
0

这个函数适用于我从 CAGradientLayer 创建一个 SpriteNode。请注意,它是 GameScene 的一个函数,因此它指的是“self.frame”上下文,以获取正确的渐变大小。

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))
} 
于 2015-01-29T20:43:49.230 回答