View inside View 吃了相同的位置

View inside View ate the same position

Here is my simulator

这是我的代码:

player = AVPlayer(URL: url!)

        layer.player = self.player

        layer.frame = CGRectMake(self.videoView.frame.origin.x, self.videoView.frame.origin.y, self.videoView.frame.width, self.videoView.frame.height)

        print(self.videoView.frame.origin.x) //67
        print(self.videoView.frame.origin.y) //37

        layer.backgroundColor = UIColor.clearColor().CGColor
        layer.videoGravity = AVLayerVideoGravityResizeAspectFill

        self.videoView.layer.addSublayer(layer)

        player.play()

videoView是我storyboard上的greenView,我想把视频放在greenview的同一个位置

更改下一行

layer.frame = CGRectMake(0, 0, self.videoView.frame.width, self.videoView.frame.height)

将 origin 设置为 0,0 将解决您的问题。记住原点是基于 SUPERview 的左上角。所以 avPlayer.frame 必须与 videoFrame 的框架不同,因为它们有不同的超级视图。

我没理解对,你想要什么,但假设你想把图层放在 videoView 的相同位置。

layer.frame = CGRectMake(0, 0, self.videoView.frame.width, self.videoView.frame.height)

为什么?

我们在 iOS 中有边界和框架。它们几乎相同,都是表示为位置的矩形:(x,y) 位置和 (width, height) 大小。但是:

  • bounds是相对于自身坐标系(0,0);
  • Frames 相对于父视图;

您正在为 videoView 设置图层,因为 videoView 是图层的父视图,所以您必须在帧 x = 0 和 y = 0 中设置。