【问题标题】:UIView Becomes Visible DelegateUIView 变为可见委托
【发布时间】:2017-03-08 17:47:24
【问题描述】:

当我们更改视图的隐藏属性时,有没有办法确定视图完全可见或隐藏的确切点,即绘制操作完成。

在我的应用程序中,一旦视图被隐藏,我必须截取屏幕截图,目前我添加了 330 毫秒的延迟以确保视图完全隐藏,我想摆脱这种任意延迟。

我已经在视图隐藏属性上尝试过 KVO,我将 UIView 类子类化并尝试使用 viewDidMoveToSuperView 委托,但所有这些都不能保证视图绘制已经完成。

【问题讨论】:

    标签: ios objective-c iphone uiview


    【解决方案1】:

    两个想法立即浮现在脑海:

    1. 在主队列上调度一个块,该块可能会在运行循环的下一次迭代之后被调用(此时视图重绘应该已经发生)。

      dispatch_sync(dispatch_get_main_queue(), ^{
          // take your snapshot
      });
      
    2. 在动画块中操作视图的不透明度(hidden 不能动画,但 alpha 可以)并使用完成处理程序。

      [UIView animateWithDuration:0 animations:^{
          view.alpha = 0;
      } completion:^(BOOL finished) {
          // take your snapshot
      }];
      

    【讨论】:

    • 当动画持续时间设置为 0 时,会立即调用完成块。我尝试了这些方法,但它们没有帮助,所以我想知道是否有某种委托/通知/回调可以保证他们查看绘图已完成。
    • @MohammadSalman:你用什么方法来截屏?
    • 我尝试了多种截屏方式,如下图UIGraphicsBeginImageContextWithOptions(self.view.bounds.size‌​, self.view.opaque, 0.0);[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage *image = UIGraphicsGetImageFromCurrentImageContext();`UIGraphicsEndImageContext();'但仍然是我面临的问题(我看过其他与我的问题类似的帖子)我无法找到一种方法来确保视图绘制已经完成,而不会在代码中添加任何任意延迟。
    猜你喜欢
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2015-08-13
    • 1970-01-01
    相关资源
    最近更新 更多