2011-02-07 1 views
0

UISearchBar에 둥근 모서리를 왼쪽 상단과 오른쪽 상단 모서리에 추가하려고합니다.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'를 사용해 보셨나요? –

답변

0

이 문제는 mask 속성이 구현 된 방식과 관련이 있습니다. 이미 계층 구조의 일부인 계층에 마스크 계층을 추가하면 작동하지 않습니다. CALayer에 대한 문서 말 :

새 레이어에 mask 설정, 새 레이어의 superlayer 처음 nil로 설정해야합니다, 그렇지 않으면 동작이 정의되지 않습니다.

마스크 레이어를 추가하기 전에 superview에서 검색 창을 제거해야합니다. 과 같이 당신의 마지막 줄 바꿈 : 당신이 원하는 경우도 removeFromSuperlayeraddSublayer:을 사용할 수 있습니다

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

. 또한 검색 창이 계층 구조에서 최상위 뷰가 아닌 경우 insertSubview:atIndex: 또는 유사한 방법 중 하나를 사용하여 올바른 위치에 다시 배치하고 올바른 위치에 다시 배치해야합니다.

+0

고맙다. 나는 그것을 시도 할 것이다. – Slavik