渐变变为黑色

时间:2015-05-28 12:36:54

标签: ios objective-c swift uiview

我在UIView的子视图中使用渐变,在通过切换某些应用程序返回应用程序后,渐变变为黑色。不知道为什么,如果有人对此有所了解,请帮助我。

此外,我没有以编程方式对其进行子类化,直接将其放在Storyboard本身的UIView类中(CustomGradientBlueView)。这可能是一个问题。? 这是用于渐变的代码 - >

import UIKit

class CustomGradientBlueView: UIView {

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    override func drawRect(rect: CGRect) {

        let context = UIGraphicsGetCurrentContext()

        // colour declarations


        let gradientColor1 = UIColor(red: 0.361, green: 0.145, blue: 0.553, alpha: 1.000)
        let gradientColor2 = UIColor(red: 0.263, green: 0.537, blue: 0.635, alpha: 1.000)

        // gradient decalarations

        let gradient = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), [gradientColor1.CGColor,gradientColor2.CGColor], [0,1])

        //rectangle drawing

        var screen = UIScreen.mainScreen().bounds.size

        let rectanglePath = UIBezierPath(rect: CGRectMake(0,0, screen.width, screen.height))
        CGContextSaveGState(context)
        rectanglePath.addClip()
        CGContextDrawLinearGradient(context, gradient, CGPointMake(0,0 ), CGPointMake(screen.width, screen.height), 0)

    }

}

1 个答案:

答案 0 :(得分:1)

问题很可能在以下几个方面:

var screen = UIScreen.mainScreen().bounds.size
let rectanglePath = UIBezierPath(rect: CGRectMake(0,0, screen.width, screen.height))
CGContextSaveGState(context)
rectanglePath.addClip()

您正在呼叫CGContextSaveGState而不致电CGContextRestoreGState来平衡它。那是非常危险的。如果维护了上下文,这是完全可能的,那么您再次说addClip ,之前的剪切路径仍然存在 - 因为您没有使用平衡{{1绘图后。由于剪切路径的性质,这会导致您最终得到整个视图剪辑,并且您的绘图被完全抑制 - 因此黑色视图。

(在任何情况下,你都不清楚你认为你在使用这个剪切路径做什么。没有必要剪辑到屏幕边界,并且访问视图内的屏幕边界{{1这是一个非常奇怪的事情。你可能更乐意完全删除这四行。)