我在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)
}
}
答案 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这是一个非常奇怪的事情。你可能更乐意完全删除这四行。)