iOS 8:设置view.layer.mask覆盖视图,mask是UI层次结构的顶部

时间:2014-10-23 19:00:38

标签: ios ios8 calayer mask

我的问题是,如何确保视图的layer.mask位于UI层次结构的后面,或者,因为不一定需要实现我想要的效果,我该如何设置边框在iOS 7和iOS 8上,视图周围有圆角顶角和底角?以下是我当前解决方案遇到的问题。

在iOS 7中,当我像这样设置视图的图层掩码时:

UIBezierPath *maskPath;
maskPath = [UIBezierPath bezierPathWithRoundedRect:self.view.bounds
                                 byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight)
                                       cornerRadii:CGSizeMake(WDFeedItemViewCornerRadius,
                                                                  WDFeedItemViewCornerRadius)];

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath;
self.view.layer.mask = maskLayer;

结果实际上是视图周围的边界(顶部,“Bruce Morgan”[这是一个假名,只是让你不害怕],在它周围有一个边框,底部是方形的圆形在顶部):

iOS 7 with layer.mask

但是,在iOS 8上运行相同的代码会将视图的掩码设置为FRONT,如下所示:

iOS 8 with layer.mask

通过查看UI层次结构确认

(遗憾的是,无法查看iOS 7的层次结构):

UI Hierarchy

我尝试在当前视图后面创建一个视图,其唯一目的是为其应用蒙版,以及将layer.zPosition设置为0并将mask.zPosition设置为0,但是掩码STILL出现在所有内容的顶部。这是怎么回事?我该如何解决?

1 个答案:

答案 0 :(得分:0)

Yeaaaaah ......事实证明超级视图正在调用insertSubview:belowSubview:,并且出于某种原因(或许下面的“查看”这个论点没有完成加载?),它只是添加了新的查看所有其他人(在iOS 8中,但在iOS 7中没有)。使用索引0将insertSubview:belowSubview:更改为insertSubview:atIndex:解决了我的问题。