如何获取UIImageView的子视图(UIView)以完全覆盖它?

时间:2019-05-14 03:17:04

标签: ios swift

我在情节提要板上放置了UIImageView,并尝试以编程方式将UIView作为其子视图添加,并使该UIView与父UIImageView的大小和位置完全匹配,以使其覆盖它。

UIView是UIView的自定义类,可以绘制一个填满其框架的CAShapeLayer(如果有的话)。

除了以下代码,我还尝试了“ redOverlay.center = parentImage.center”。

在我的viewdidload()中,我有:

fr

这是我的UIView的RedOverlay子类,如果有区别的话:

String response = basicResponse.getResponse();
if(response!=null){
   String responseBody = response.body();
   if(!responseBody.isEmpty()){
      // non empty response, you can map Json via Gson to POJO classes...

   }
   else{
       // empty response...
   }
}

我得到的结果实际上可以在iPhone 6上完美运行,但是像6s或ipads一样大的东西,并且子UIView实际上比UIImageView小得多。在iPad中,UIView位于左侧,而在6s中则仅剩一点。

基本上,即使使用parentImage.bounds.width确定UIView的宽度,似乎正在生成的UIView也不像图像那么宽。我确实在IB中设置了“边界限制”和“宽高比调整”功能,所以我不知道为什么图像可能会超出其边界。

使此子视图与所有设备尺寸的父视图相匹配的最干净方法是什么?

编辑:我发现的解决方案是通过重写layoutSubviews并在其中调用pie()来调用函数pie()(绘制CAShapeLayer),以便每当视图更改时我的shapeLayer都会更新。我从pie()中删除了.addSublayer(shapeLayer),现在在viewdidload中调用它,以防重复调用layoutsubviews可能会导致创建许多图层。

let redOverlay = RedOverlay(frame: CGRect(x: 0.0, y: 0.0, width: parentImage.bounds.width, height: parentImage.bounds.height))

parentImage.addSubview(redOverlay)

0 个答案:

没有答案
相关问题