Добавление градиентного фона в SKScene - PullRequest
0 голосов
/ 02 сентября 2018

Я занимался исследованием того, как добавить градиентный фон в мою сцену SKS. Используя несколько источников (например, SKTexture из UIImage выглядит иначе ; UIImage от CALayer - iPhone SDK ), я сделал следующее:

class GameScene: SKScene
{
    override func didMove(to view: SKView)
    {
        let backgroundImg = UIImage.imageFromLayer(layer: IGABackgroundLayer().gradientMetar())

        if let backgroundImg = backgroundImg
        {
            let backgroundTexture = SKTexture(image: backgroundImg)
            let background = SKSpriteNode(texture: backgroundTexture)
            background.position = CGPoint(x: frame.width/2, y: frame.height/2)
            addChild(background)
        }
    }
}

extension UIImage
{
    static func imageFromLayer(layer: CALayer) -> UIImage?
    {
        UIGraphicsBeginImageContextWithOptions(layer.bounds.size,
                                               layer.isOpaque, UIScreen.main.scale)

        defer { UIGraphicsEndImageContext() }

        // Don't proceed unless we have context
        guard let context = UIGraphicsGetCurrentContext() else
        {
            return nil
        }

        layer.render(in: context)
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}


class IGABackgroundLayer
{
    func gradientMetar() -> CAGradientLayer
    {
        let colorOne = UIColor(red:(0/255.0),green:(0/255.0),blue:(50/255.0),alpha:1.0)
        let colorTwo = UIColor(red:(0/255.0),green:(0/255.0),blue:(200/255.0),alpha:1.0)
        let colorThree = UIColor(red:(0/255.0),green:(255/255.0),blue:(255/255.0),alpha:1.0)

        let colors = [colorOne.cgColor,colorTwo.cgColor,colorThree.cgColor]

        let stopOne : NSNumber = NSNumber(value: 0.50)
        let stopTwo : NSNumber = NSNumber(value: 0.80)
        let stopThree : NSNumber = NSNumber(value: 1.0)

        let locations = [stopOne, stopTwo, stopThree]

        let headerLayer : CAGradientLayer = CAGradientLayer()

        headerLayer.colors = colors
        headerLayer.locations = locations

        return headerLayer

    }
}

Это все еще не работает - нет градиентного фона.

Может кто-нибудь указать мне правильное направление?

Большое спасибо!

...