首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UIView中获取drawRect大小

如何在UIView中获取drawRect大小
EN

Stack Overflow用户
提问于 2017-09-04 00:27:17
回答 3查看 734关注 0票数 2

我使用self.bound来获得drawRect方法中的UIView大小。但是现在,在XCode 9中,我收到了这样的警告:

主线程检查器:在后台线程上调用的UI API:-UIView边界

drawRect方法中获得视图大小的正确方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2017-09-04 01:13:25

如下所示:

代码语言:javascript
复制
override func drawRect(rect: CGRect)
    let bds = DispatchQueue.main.sync {
        return self.bounds
    }
    // ....
}

但是,drawRect最初是在后台线程上被调用的,这是一个不好的迹象--除非您使用的是CATiledLayer或其他内置架构。你首先应该担心的是这个。

票数 6
EN

Stack Overflow用户

发布于 2017-09-04 16:28:57

我终于找到了解决这个问题的办法。我现在正在重写layoutSubviews of UIView以保持类成员中的视图界限:

代码语言:javascript
复制
- (void)layoutSubviews
{
    [super layoutSubviews];
    m_SelfBounds = self.bounds;
}

之后,我只在drawRect方法中使用drawRect

票数 5
EN

Stack Overflow用户

发布于 2019-04-02 00:00:00

使用Grand Central Dispatch的“屏障”功能,允许并发读取操作,同时在写入过程中阻塞这些操作:

代码语言:javascript
复制
class MyTileView: UIView
{
  var drawBounds = CGRect(x: 0, y: 0, width: 0, height: 0)
  let drawBarrierQueue = DispatchQueue(label: "com.example.app",
                                             qos: .userInteractive, // draw operations require the highest priority threading available
                                             attributes: .concurrent,
                                             target: nil)

  override func layoutSubviews() {
    drawBarrierQueue.sync(flags: .barrier) { // a barrier operation waits for active operations to finish before starting, and prevents other operations from starting until this one has finished
      super.layoutSubviews();

      self.drawBounds = self.bounds

      // do other stuff that should hold up drawing
    }
  }

  override func draw(_ layer: CALayer, in ctx: CGContext)
  {
    drawBarrierQueue.sync {
      // do all of your drawing

      ctx.setFillColor(red: 1.0, green: 0, blue: 0, alpha: 1.0)
      ctx.fill(drawBounds)
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46028952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档