Я занимался исследованием того, как добавить градиентный фон в мою сцену 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
}
}
Это все еще не работает - нет градиентного фона.
Может кто-нибудь указать мне правильное направление?
Большое спасибо!