我创建了一个 FirstView 类作为 UIView 类,并添加了一个容器来添加一些层,例如 salamLogo,以及 initializeViews() func 中的 addSub 层
import UIKit
import QuartzCore
class FirstView: UIView {
var container: UIView {
let x = CGFloat(0.0),
y = CGFloat(0.0),
w = CGFloat(screenWidth),
h = CGFloat(screenHeight - statusBarHeight)
let view = UIView(frame: CGRect(x: x, y: y, width: w, height: h))
view.background(color: UIColor.red)
return view
}
var salamLogo: CALayer {
let layer = CALayer()
let view = UIImage(named: "sibdiet_logo")?.cgImage
let x = CGFloat(screenWidth / 2 - 72.0),
y = CGFloat(20.0),
w = CGFloat(160.0),
h = CGFloat(160.0)
layer.frame = CGRect(x: x, y: y, width: w, height: h)
layer.contents = view
layer.contentsGravity = kCAGravityResizeAspect
return layer
}
override init(frame: CGRect) {
super.init(frame: frame)
initializeViews()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initializeViews()
}
private func initializeViews(){
container.layer.addSublayer(salamLogo)
addSubview(container)
}
}
在 ViewController 中添加来自 FirstView 类的对象和 addSubView
import UIKit
var screenHeight: CGFloat = UIScreen.main.bounds.height
let screenWidth: CGFloat = UIScreen.main.bounds.width
let statusBarHeight = UIApplication.shared.statusBarFrame.height
class ViewController: UIViewController {
var firstView: FirstView!
override func viewDidLoad() {
super.viewDidLoad()
screenHeight = screenHeight == 812 ? 788 : UIScreen.main.bounds.height
firstView = FirstView(frame: CGRect(x: 0, y: statusBarHeight, width: screenWidth, height: screenHeight ))
self.view.addSubview(firstView)
}
}
在模拟器中显示红框但不显示salamLogo层,或任何层进入
最佳答案
添加图层与添加 subview 非常相似:
layer.addSublayer(salamLogo)
但在您的情况下,使用 subview 可能会更好?我在这里看不到使用图层的任何目的。您可以将 salamLogo
作为常规 UIImageView
====== 编辑 =====
回到您的解决方案。你的代码有问题。每次调用 container
或 salamLogo
时,都会创建新的 UIView 和新的 CALayer。要只保留一个实例,您应该这样做:
lazy var container: UIView = {
let x = CGFloat(0.0),
y = CGFloat(0.0),
w = CGFloat(screenWidth),
h = CGFloat(screenHeight - statusBarHeight)
let view = UIView(frame: CGRect(x: x, y: y, width: w, height: h))
view.background(color: UIColor.red)
return view
}()
lazy var salamLogo: CALayer = {
let layer = CALayer()
let view = UIImage(named: "sibdiet_logo")?.cgImage
let x = CGFloat(screenWidth / 2 - 72.0),
y = CGFloat(20.0),
w = CGFloat(160.0),
h = CGFloat(160.0)
layer.frame = CGRect(x: x, y: y, width: w, height: h)
layer.contents = view
layer.contentsGravity = kCAGravityResizeAspect
return layer
}()
关于ios - 如何在 Swift UIView 类中将 SubLayer 添加到图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400752/