2010-04-16 6 views
2

UIView를 특정 양만큼 "어둡게"하고 싶습니다. 지금,이 같은 어둡게하고 있어요 :UIView를 어둡게하기

UIView *overlay = [[UIView alloc] initWithFrame:mainView.bounds]; 
overlay.backgroundColor = [UIColor blackColor]; 
overlay.alpha = 0.5f; 
[mainView addSubview:overlay]; 

불행하게도,이 또한 투명 mainView의 부분에 반투명 블랙 오버레이를 추가합니다. 불투명 한 부분 만 어둡게 할 수있는 방법이 있습니까?

답변

5

여기에 시도해 볼만한 것이 있습니다. 나는 UIRectFillUsingBlendMode를 사용한 적이 없다.

-(void) drawRect:(CGRect)inDirty { 
    [[UIColor colorWithWhite:0.0 alpha:0.5] setFill]; 
    UIRectFillUsingBlendMode(inDirty , kCGBlendModeDarken); 
} 

이 기능을 구현하는보기는 영향을주고 싶은 다른보기와 합성되도록 설정되어야합니다. 이는 아마도이 뷰와 어두워지기를 원하는 다른 모든 뷰를 포함하는 하나의 상위 뷰를 의미합니다.

CGContextSetBlendMode를 살펴볼 수도 있습니다.

+0

이것은 유망 해 보입니다! 그래도 다른 뷰와 합성하는 것이 무슨 의미인지는 모르겠지만 (저는 UIView 멍청이입니다). 필자의 예에서는 mainView에서 drawRect :를 재정의 할 수 있습니까? – igul222

+0

블렌드 모드가 어두워지면 이미 동일한 컨텍스트에서 그려진 모든 것을 어둡게합니다. 그것은 당신이 어둡게하고 싶은 어떤 견해라도 당신이 그려야 할 동일한 맥락 속으로 이미 들어가야 만한다는 것을 의미합니다. 'drawRect :'에서 현재 컨텍스트를 제어하는 ​​것은 시스템에 달려 있으며, 어떻게 동작하는지 모르겠습니다. 각 뷰에 대해 새로운 컨텍스트를 만드는 경우이 코드는 아무 것도 수행하지 않을 수 있습니다. 그래도 효과가 없으면보기를 어둡게하여 이미지로 만든 다음 이미지를 그려서 위와 같이 어둡게 만들 수 있습니다. – drawnonward

+0

느리지 않니? – hfossli

0

이와 비슷한 것을 사용해보십시오 (분명히 색상을 조정하십시오)?

overlay.backgroundColor = [UIColor colorWithRed:0.317647 green:0.317647 blue:0.317647 alpha:0.85];

+0

배경색을 (0, 0, 0, 0.85)로 설정하지 않았습니까? –

관련 문제