我对斯威夫特还不太熟悉,而且我似乎不知道最基本的事情之一——为一个加莱尔设置框架和界限,这样我以后就可以阅读了。
我想看看一个盒子在一个卷轴上的位置,以确定它离层中心有多近。
我会假设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

我无法为三个视图/层中的任何一个设置帧或边界。当我读取帧或边界值时,得到的是0。
注意,我也尝试过在viewwill中调用代码,但结果相同。
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);

    }
}

最佳答案

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

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

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    if let previewLayer = self.videoCapture.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)
    }
}

关于swift - Swift-设置CALayer边界或框架不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48569864/

10-14 16:54