Ios 透明视图是黑色的吗?
我试图创建一个在某些点上是透明的视图,以便看到后面的图像。然而,由于某些原因,在视图的透明部分,我看到的是黑色,而不是视图背后的内容。我已经把它缩减到很少的代码,不明白为什么我的透明视图显示黑色而不是红色(后面视图的颜色)。这是我的密码:Ios 透明视图是黑色的吗?,ios,swift,uikit,Ios,Swift,Uikit,我试图创建一个在某些点上是透明的视图,以便看到后面的图像。然而,由于某些原因,在视图的透明部分,我看到的是黑色,而不是视图背后的内容。我已经把它缩减到很少的代码,不明白为什么我的透明视图显示黑色而不是红色(后面视图的颜色)。这是我的密码: class ViewController: UIViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animat
class ViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let redView = UIView(frame: view.frame)
redView.backgroundColor = UIColor.red
let transparentView = TransparentView(frame: view.frame)
view.addSubview(redView)
view.addSubview(transparentView)
}
}
我希望屏幕是全红色的,但它显示的是全黑色。在有人说清晰的视图要容易得多之前,我实际上正在尝试在drawRect中做更复杂的事情,只是简单地谈一下最基本的事情来调试我的问题。我在这里遗漏了什么?我发现了。显然,即使您覆盖了
绘图
,背景色似乎仍然会被考虑,默认为黑色。我在透明视图类中添加了以下内容:
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clear
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
我想出来了。显然,即使您覆盖了
绘图
,背景色似乎仍然会被考虑,默认为黑色。我在透明视图类中添加了以下内容:
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clear
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
使用
self.isOpaque=false
使视图/图层透明,即使覆盖了drawRect
class TransparentView: UIView {
override init(frame: CGRect) {
super.init(frame: frame);
self.isOpaque = false; //Use this..
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
UIColor.clear.setFill()
UIRectFill(rect)
}
}
使用
self.isOpaque=false
使视图/图层透明,即使覆盖了drawRect
class TransparentView: UIView {
override init(frame: CGRect) {
super.init(frame: frame);
self.isOpaque = false; //Use this..
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ rect: CGRect) {
UIColor.clear.setFill()
UIRectFill(rect)
}
}
drawRect:如果视图绘制自定义内容,请实现此方法。如果视图未进行任何自定义绘制,请避免重写此方法
正如你所说的那样,只需在Init上设置背景色就更好了
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clear
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
就我个人而言,我不会为了这么少的定制而将视图子类化。只需在创建时设置它。此外,视图设置在viewDidLoad上更好,而不是在VIEWWILLEASE中。因为它将在每次您的视图转到前台时执行,并且u将以添加两个透明视图结束。
另外,将这些行保留在带有私有函数的扩展中有助于保持代码的清晰
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
}
//MARK: - Private Methods
extension ViewController{
fileprivate func setupViews(){
let redView = UIView(frame: view.frame)
redView.backgroundColor = UIColor.red
view.addSubview(redView)
let transparentView = UIView(frame: view.frame)
transparentView.backgroundColor = UIColor.clear
view.addSubview(transparentView)
}
}
请注意,更清晰的方法是在故事板中创建这些视图(而不是通过代码)。保持代码清晰,易于理解和查看发生的情况。“drawRect:如果视图绘制自定义内容,请实现此方法。如果视图未进行任何自定义绘制,请避免重写此方法。”
正如你所说的那样,只需在Init上设置背景色就更好了
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clear
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
就我个人而言,我不会为了这么少的定制而将视图子类化。只需在创建时设置它。此外,视图设置在viewDidLoad上更好,而不是在VIEWWILLEASE中。因为它将在每次您的视图转到前台时执行,并且u将以添加两个透明视图结束。
另外,将这些行保留在带有私有函数的扩展中有助于保持代码的清晰
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
}
//MARK: - Private Methods
extension ViewController{
fileprivate func setupViews(){
let redView = UIView(frame: view.frame)
redView.backgroundColor = UIColor.red
view.addSubview(redView)
let transparentView = UIView(frame: view.frame)
transparentView.backgroundColor = UIColor.clear
view.addSubview(transparentView)
}
}
请注意,更清晰的方法是在故事板中创建这些视图(而不是通过代码)。保持代码清晰,易于理解和查看发生了什么。
self.opaque=false代码>将其添加到透明视图
构造函数中。然后,您可以在draw
方法中执行任何您想要的操作。self.opaque=false代码>将其添加到透明视图
构造函数中。然后你可以在draw
方法中做你想做的任何事情。啊,我不知道那个属性,也许这比我的解决方案更干净。实际上设置那个属性不会改变行为。记住,我是个白痴,我将isOpaque设置为true,这行得通啊,我不知道那个属性,也许这比我的解决方案更简洁。实际上,设置该属性不会改变行为。尽管我是个白痴,但我将isOpaque设置为true,确实如此work@Kven迪特拉格里亚,你有我的解决方案吗?加上我的答案,如果比选择的答案更好的话。a+1呢?如果你重新阅读我特别说的问题,我意识到它太简单,无法使用drawRect,但我的实际代码要复杂得多,需要绘制,但你的答案还是删除了它。@Kven DiTraglia你有没有用我的解决方案结束?加上我的答案,如果比选择的答案更好的话。那么a+1呢?如果你重新阅读我特别提到的问题,我意识到使用drawRect太简单了,但是我的实际代码要复杂得多,需要绘制,但是你的答案还是删除了它。