簡體   English   中英

iOS 8:設置view.layer.mask覆蓋視圖,mask是UI層次結構的頂部

[英]iOS 8: setting view.layer.mask covers view, mask is top of UI hierarchy

我的問題是,如何確保視圖的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”,[這是一個假名,只是為了避免讓您感到害怕],在其周圍具有邊框,該邊框在底部為正方形,在頂部為圓形):

帶有layer.mask的iOS 7

但是,在iOS 8上運行相同的代碼會將遮罩置於視圖的前部,如下所示:

iOS 8帶有layer.mask

這是通過查看UI層次結構確認的(不幸的是,無法查看iOS 7的層次結構):

UI層次結構

我試圖在當前視圖后面創建一個視圖,其唯一目的是將蒙版應用於該蒙版,並將layer.zPosition設置為0並將mask.zPosition設置為0,但是蒙版STILL出現在所有內容的頂部。 這是怎么回事? 我如何解決它?

是的...原來是一個insertSubview:belowSubview:視圖正在調用insertSubview:belowSubview:由於某種原因(也許'belowSubview'參數沒有完成加載?),它只是在所有其他視圖之上添加了新視圖(在iOS 8中,但不適用於iOS 7)。 insertSubview:belowSubview:更改為insertSubview:atIndex:的索引為0,為我解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM