【问题标题】:UIView subviews updating visually but interact as though in previous stateUIView 子视图在视觉上更新但交互就像在以前的状态
【发布时间】:2015-01-15 10:44:44
【问题描述】:

我正在创建一个 UIViewController,其中包含一些 RosyWriter 的功能,我正在对其进行改造以创建一个录像机。屏幕包含一个标题,一个包含 AVCaptureVideoPreviewLayer 的裁剪到边界的子视图(因此视频内容的子层 CALayer 被添加到该子视图中,所以我认为它的嵌套很深),以及两个按钮,就像一个切换按钮- 在 UIViewController 的 Storyboard 中以 Start 和 Stop 按钮的形式。

“开始”按钮可以正常工作,即使视频的预览层在屏幕上并显示摄像头。但是,当我开始录制时,我会切换按钮,使开始按钮隐藏,停止按钮隐藏=false。

开始按钮有效 - 当视频预览在屏幕上并更新时按下,但实际录制(在缓冲区中抓取样本并将它们写入文件 - 据我所知,与 UIKit 没有任何关系)开始了。

当视频录制处于活动状态时,显示“停止”按钮并隐藏“开始”按钮,可见的停止按钮不可按下,但仍可按下隐藏的开始按钮。

我尝试将停止按钮移到包含视频的 UIView 上方,以防 CALayer 或其他东西超出剪裁的 UIView 边界。这没有帮助。停止按钮总是表现得好像它没有启用一样 - 但它是启用的,并且没有任何东西与按钮重叠。如果包含视频的 UIView(我将重申,它低于损坏的按钮)从未显示,则该按钮可以正常工作。

谁能想到为什么会发生这种情况?我立即想到了 setNeedsLayout 和 setNeedsDisplay 并尝试将其中的一些扔进去,因为它几乎就像视图已经根据我的隐藏或显示按钮的请求进行了更新,但交互层没有更新。

谢谢

【问题讨论】:

    标签: ios video uibutton hidden behavior


    【解决方案1】:

    我现在认为这是由于我对调度队列的无知使用(或误用)。我仍然不确定我是如何与未显示的按钮进行交互的——也许是因为它们自己的状态更改部分立即响应,其余的不能发生,除非在主队列上(视觉刷新,例如)。

    所以从某种意义上说,我通过强制在主队列上调用特定的异步委托方法解决了这个问题。这不会影响我录制过程中此特定步骤的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多