【问题标题】:Randomly generated CGGradient wont display随机生成的 CGGradient 不会显示
【发布时间】:2015-07-04 15:15:25
【问题描述】:

我正在编写一个生成随机渐变并使用自定义UIView 类将它们显示在屏幕上的应用。因为我对应用程序有更多的计划功能,所以我选择为渐变提供自己的类。生成渐变的代码在这里:

import UIKit

class Gradient {

var topColor = UIColor()
var bottomColor = UIColor()
var gradient: CGGradientRef?

func generateGradient() -> CGGradientRef {

    var red = CGFloat(arc4random_uniform(256))
    var green = CGFloat(arc4random_uniform(256))
    var blue = CGFloat(arc4random_uniform(256))

    topColor = UIColor(red: red, green: green, blue: blue, alpha: 1.0)

    red = CGFloat(arc4random_uniform(256))
    green = CGFloat(arc4random_uniform(256))
    blue = CGFloat(arc4random_uniform(256))

    bottomColor = UIColor(red: red, green: green, blue: blue, alpha: 1.0)

    let gradientColors = [topColor.CGColor, bottomColor.CGColor]
    let gradientStops:[CGFloat] = [0, 1.0]
    let colorSpace = CGColorSpaceCreateDeviceRGB()

    let generatedGradient = CGGradientCreateWithColors(colorSpace, gradientColors, gradientStops)

    return generatedGradient

}

init() {
    gradient = self.generateGradient()
}

}

显示渐变的渐变查看器类如下:

import UIKit

@IBDesignable class Gradient_Viewer: UIView {

override func drawRect(rect: CGRect) {

    let background = Gradient()
    let context = UIGraphicsGetCurrentContext()
    let startPoint = CGPoint.zeroPoint
    let endPoint = CGPoint(x: 0, y: self.bounds.height)

    CGContextDrawLinearGradient(context, background.gradient, startPoint, endPoint, 0)

}

}

渐变生成有什么问题,还是我没有正确访问渐变?

【问题讨论】:

  • 你遇到了什么问题?
  • 我生成的渐变不会显示在视图中。这只是一个白屏。
  • 看来我需要一个从 0 到 1 而不是从 0 到 255 的随机 CGFloat。我会试试的。
  • 我很高兴你把它整理好了。您应该将其添加为答案,以便您接受它。

标签: ios swift core-graphics gradient


【解决方案1】:
@IBDesignable class Gradient_Viewer: UIView {
    var random8bit: CGFloat {
        return CGFloat(arc4random_uniform(256))/255.0
    }
    var gradient: CGGradientRef {
        return CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), [UIColor(red: random8bit, green: random8bit, blue: random8bit, alpha: 1.0).CGColor, UIColor(red: random8bit, green: random8bit, blue: random8bit, alpha: 1.0).CGColor], [0, 1.0])
    }
    override func drawRect(rect: CGRect) {
        CGContextDrawLinearGradient(UIGraphicsGetCurrentContext(), gradient, CGPoint.zeroPoint, CGPoint(x: 0, y: self.bounds.height), 0)
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多