2011-02-07 21 views
0

我想在左上角和右上角添加一個圓角到UISearchBar。爲什麼mask不能在UISearchBar上工作

但是,我發現遮罩層不能在UISearchBar上工作,無論我如何設置它。

這裏是我的代碼

// UIView* bar = [searchBar_.subviews objectAtIndex:0]; // try to add mask to background view but also failed 

    UIView* bar = searchBar_; 
    CGRect toolbarBounds = bar.bounds; 
    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect: toolbarBounds 
               byRoundingCorners:UIRectCornerTopLeft 
                cornerRadii:CGSizeMake(5.0f, 5.0f)]; 
    [maskLayer setPath:[path CGPath]]; 
    [maskLayer setFillColor:[[UIColor greenColor] CGColor]]; 
    bar.layer.masksToBounds = YES; 
    bar.layer.mask = maskLayer; 

我也曾嘗試「剪輯子視圖」,但它也不管用。

然後我嘗試了更多,我只是設置背景視圖(子視圖0)隱藏。令人驚訝的是,它仍然可見。

UISearchBar中有沒有什麼魔法? 該面罩在UIToolbar上工作。

+1

你試過`view.layer.cornerRadius`嗎? – 2011-02-07 11:19:11

回答

0

您的問題可能與mask屬性的實現方式有關。如果將遮罩層添加到已經是層次結構一部分的圖層,它將不起作用。爲CALayer文檔說:

當設置mask到一個新層,新層的superlayer必須首先被設置爲nil,否則該行爲是不確定的。

在添加遮罩層之前,您必須從superview中刪除搜索欄。包裝你的最後一行,像這樣:

UIView *superview = [bar superview]; 
[bar removeFromSuperview]; 
bar.layer.mask = maskLayer; 
[superview addSubview:bar]; 

您還可以使用removeFromSuperlayeraddSublayer:如果你喜歡。此外,如果您的搜索欄不是層次結構中最頂層的視圖,請確保找到它的位置,然後使用insertSubview:atIndex:或其中一種類似的方法將其放回正確的位置。

+0

謝謝,我會試試看。 – Slavik 2011-02-08 03:56:08

相關問題