【发布时间】:2022-01-12 15:49:26
【问题描述】:
在 UIKIT 中,我安装了两个 uiview 的主视图和 uiview,故事板位于顶部,位于主视图的 1/3 处。
import UIKit
类视图控制器:UIViewController {
@IBOutlet weak var TopView: UIView!
@IBOutlet weak var MiddleView: UIView!
@IBOutlet weak var BottomView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let t = Vvp(inView: TopView)
TopView.addSubview(t)
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 0))
bezierPath.addLine(to: CGPoint(x: TopView.frame.maxX, y: 0))
bezierPath.close()
let shapeLayer = CAShapeLayer()
shapeLayer.path = bezierPath.cgPath
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.fillColor = UIColor.red.cgColor
shapeLayer.lineWidth = 1.0
TopView.layer.addSublayer(shapeLayer)
}
}
第二个视图:
func Vvp(inView: UIView)-> UIView {
let viewWithBeizer = UIView(frame: inView.frame)
let bezierPath = UIBezierPath()
bezierPath.move(to: CGPoint(x: 0, y: 0))
bezierPath.addLine(to: CGPoint(x: inView.frame.maxX, y: 0))
bezierPath.close()
let shapeLayer = CAShapeLayer()
shapeLayer.path = bezierPath.cgPath
// apply other properties related to the path
shapeLayer.strokeColor = UIColor.blue.cgColor
shapeLayer.fillColor = UIColor.blue.cgColor
shapeLayer.lineWidth = 1.0
viewWithBeizer.layer.addSublayer(shapeLayer)
return viewWithBeizer
}
【问题讨论】:
-
不是您问题的答案,但属性名称(TopView、MiddleView、BottomView)和函数名称(
func Vvp())应以小写字母开头(TopView应为topView。 ) -
sorry - bigV 来自课堂,一小时前 VVP 是课堂,我将其更改为 func 显示在这里
-
只是一个猜测,但这对我来说感觉就像您在 UIView/UIViewController 生命周期中的错误时间点创建这些层/路径。放置一些断点并检查何时这些视图实际上有框架。通常它位于
viewWillLayoutSubviews或viewDidLayoutSubviews中(对于UIViewController,您可能应该在其中工作)。他们都可能会被调用几次,而后者通常更好。 -
谢谢,好一点,行之间的差异是 10 毫米。问题是为什么?为什么当我将帧传递给 func 时 - 它创建的行低于我直接从具有相同 var 的视图控制器创建的行?这很愚蠢。