【问题标题】:Type 'UIImage' has no member 'radialGradientImage'类型“UIImage”没有成员“radialGradientImage”
【发布时间】:2019-04-27 09:03:54
【问题描述】:

我正在尝试在我的 sprite kit 游戏中为场景的背景使用颜色渐变。所以看起来类似这样:

我需要帮助解决以下错误:

类型“UIImage”没有成员“radialGradientImage”

代码:

import UIKit
import SpriteKit
import StoreKit
import GameKit
import AVFoundation
import SpriteKit.SKTexture

class Start: SKScene {
    let color1 = UIColor(red: 255/255, green: 153/255, blue: 102/255, alpha: 1)
    let color2 = UIColor(red: 255/255, green: 204/255, blue: 153/255, alpha: 1)

    //Error ->
    let backgroundImg = UIImage.radialGradientImage(size: frame.size, outerColor: color1, innerColor: color2)

    //

    let backgroundTexture = SKTexture(image: backgroundImg)
    let background = SKSpriteNode(texture: backgroundTexture)

    override func didMove(to view: SKView) {
        //Background
        background.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
        addChild(background)
    }

    static func radialGradientImage(size: CGSize, outerColor: UIColor, innerColor: UIColor) -> UIImage
    {
        let colorSpace = CGColorSpaceCreateDeviceRGB()
        let gradient = CGGradient(colorsSpace: colorSpace, colors: [outerColor.cgColor, innerColor.cgColor] as CFArray, locations: [1.0, 0.0])
        let center = CGPoint(x: size.width / 2.0, y: size.height / 2.0)

        UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main.scale)
        let imageContext = UIGraphicsGetCurrentContext()

        imageContext!.drawRadialGradient(gradient!, startCenter: center, startRadius: 0.0, endCenter: center, endRadius: size.width / 2.0, options: CGGradientDrawingOptions.drawsAfterEndLocation)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image!
    }
}

【问题讨论】:

标签: ios swift sprite-kit gradient radial-gradients


【解决方案1】:

radialGradientImageStart 类的静态方法,而不是 UIImage 类。

你想要:

let backgroundImg = Start.radialGradientImage(size: frame.size, outerColor: color1, innerColor: color2)

但这会失败并出现更多错误,因为您无法在那里访问 framecolor1color2

你需要把let改成lazy var

lazy var backgroundImg = Start.radialGradientImage(size: frame.size, outerColor: color1, innerColor: color2)

【讨论】:

  • 谢谢,效果很好。是否还有可能使用垂直渐变而不是径向渐变(就像我问题中屏幕截图中的渐变)?
  • 这是一个完全独立的问题。通过单击答案左侧的复选标记将此标记为已解决。如果您有关于渐变的新问题,请先进行一些研究后根据需要发布新问题。
猜你喜欢
  • 2016-03-11
  • 2021-06-17
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 2016-09-18
相关资源
最近更新 更多