【问题标题】:Loading subview above view's Layer加载视图层上方的子视图
【发布时间】:2012-01-13 17:44:49
【问题描述】:

我遵循了使用 AvFoundation Framework 拍照的教程。 所以我不精通它..这是一点。

在应用程序中..在笔尖中。 有一个视图(SUBVIEW)作为主视图(MAINVIEW)的子视图。 并且有一个图像视图和按钮作为子视图视图(SUBVIEW)而不是主视图的子视图。

教程中有代码(用于子视图)

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];


    [self.vImagePreview.layer addSublayer:captureVideoPreviewLayer];

但是在应用这个之后,图像视图出现在 SUBVIEW 的后面,而不是它应该在笔尖中的前面。 那么如何让图像视图出现在视图前面..vimagepreview 是 SUBVIEW

【问题讨论】:

  • 我可能会误解,但是:如果您在 Xcode 的 nib 编辑器中查看视图的顺序,列出的最上面的视图实际上是最靠后的。因此,在 Xcode nib 编辑器中视图列表的底部,将您想要的任何视图放在其他所有内容的前面。
  • 我做对了。 imageviw 作为子视图添加到 nib 中的 SUBVIEW。

标签: iphone objective-c ios xcode


【解决方案1】:

尝试以编程方式创建新视图,添加图层,然后将视图添加到子视图。

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
UIView *newView = [[UIView alloc] initWithFrame:SUBVIEW.bounds];
[newView.layer addSublayer: captureVideoPreviewLayer];
[SUBVIEW addSubview: newView];

这应该确保图层位于子视图之上。

【讨论】:

  • 如果您在这个新视图上有任何触摸按钮!不起作用!不适用于 iOS7
【解决方案2】:

我猜你需要把你的子视图(图像视图容器视图)放在前面。

看看这个:bringSubViewToFront:

它的 UIView 类方法。

让我知道这是否适合你

【讨论】:

  • 我尝试将子视图放在前面,但图像视图仍然在后面。
【解决方案3】:

这适用于 iOS7 和 iOS8。

[videoPreviewLayerParentView.layer insertSublayer:videoPreviewLayer atIndex:0];
[videoPreviewLayerParentView.layer insertSublayer:aboveView.layer atIndex:1];

【讨论】:

    【解决方案4】:

    尝试重新排序 z-index:

    //subview to go infront
    frontView.layer.zPosition = 100
    
    //layer to go to back
    backLayer.zPosition = 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多