Swift - 设置CALayer边界或框架不起作用

时间:2018-02-01 18:53:51

标签: swift calayer

我是Swift的新手,我似乎无法找出最基本的东西之一 - 为CALayer设置框架和边界,所以我可以稍后阅读它们。

我正在尝试查看在CALayer上绘制框的位置,以确定它与图层中心的接近程度。

我会假设CALayer与子视图中添加的图层/视图大小相同,但是当我查看CALayer的框架或边界时它是零。对于superview图层/视图也一样。

非常感谢任何帮助!

目标:检查在图层中写入框的位置

伪代码:

create new layer
draw a box on layer
look at box dimensions and compare to layer dimensions
if box near middle of the layer then print success

查看/图层层次结构(从上到下)

 1. CALayer named shapeLayer
 2. CALayer named previewLayer (this is a AVCaptureVideoPreviewLayer)
 3. UIView named videoPreview

我无法为3个视图/图层中的任何一个设置框架或边界。当我读取帧或边界值时,我得到的全部为0。

注意,我也试过在viewWillAppear中调用代码,但结果相同。

override func viewDidLoad() {
    super.viewDidLoad()
    if let previewLayer = self.videoCapture.previewLayer {
        self.videoPreview.layer.addSublayer(previewLayer)
        videoCapture.previewLayer?.frame = videoPreview.bounds
    }

    if videoCapture.previewLayer?.frame != nil {

        videoCapture.previewLayer!.frame = CGRect(x:0, y:0, width:375, height: 667)

        let w = videoCapture.previewLayer!.frame.height
        let h = videoCapture.previewLayer!.frame.width

        NSLog("Print the height and width  w:%i, h:%i", w, h);

    }   
}

1 个答案:

答案 0 :(得分:1)

当视图布置其子视图时,您将获得图层的框架:

SELECT
  yourTable.Project,
  DATEADD(day, numbers.id, yourTable.Start),
  yourTable.ResourceA,
  yourTable.ResourceB
FROM
  yourTable
INNER JOIN
  numbers
    ON  numbers.id >= 0
    AND numbers.id <= DATEDIFF(day, yourTable.Start, yourTable.Finish)