나는를 만든 UIView
내 주요 응용 프로그램의보기에 걸쳐 앉아 반투명 검은 배경으로. 여기서 제가 목표로하는 것은 UIView
반투명 한 검정색 배경이 보이지 않는 곳에 잘라낸 원 모양을 만들어 원형 영역을 제외한 전체 이미지에 검정색 마스크 효과를주는 것입니다. 해당 영역의 버튼).
나는 CAShapeLayer
원형 마스크를 만드는 데 사용할 수 있었지만 이것은 반대 효과를 가졌습니다 (즉,보기의 나머지 부분은 선명하고 원 안쪽은 반투명 검정색입니다. 내가 원하는 것은 바깥 쪽의 모든 것입니다. 반투명 검은 색을 유지하기 위해 원을 클릭 한 다음 내부를 명확하게합니다. 여기에 제가 사용한 코드가 있습니다. 반대 방향으로 작동하게하려면 어떻게해야합니까? My blackMask
는 반투명 검은 색 뷰이고 my buttonCircle
는 원입니다. 명확하게 유지하고 싶습니다.
어떻게 든 경로를 반전해야할까요?
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGRect maskRect = buttonCircle.frame;
CGPathRef path = CGPathCreateWithEllipseInRect(maskRect, NULL);
maskLayer.path = path;
CGPathRelease(path);
blackMask.layer.mask = maskLayer;
편집 : 지금 시도해보십시오. 이것으로 마스크가 전혀 보이지 않습니다.
UIView *circularMaskView = [[UIView alloc] initWithFrame:buttonCircle.frame];
circularMaskView.backgroundColor = [UIColor greenColor];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGPathRef path = CGPathCreateWithEllipseInRect(buttonCircle.frame, NULL);
maskLayer.path = path;
CGPathRelease(path);
circularMaskView.layer.mask = maskLayer;
[blackMask addSubview:circularMaskView];
그래서 여기에 내가 한 일이 있습니다. 다음 과 같이 UIView
라는 사용자 지정 하위 클래스를 만들었습니다 BlackoutView
.
BlackoutView.h
#import <UIKit/UIKit.h>
@interface BlackoutView : UIView
@property (nonatomic, retain) UIColor *fillColor;
@property (nonatomic, retain) NSArray *framesToCutOut;
@end
BlackoutView.m
#import "BlackoutView.h"
@implementation BlackoutView
- (void)drawRect:(CGRect)rect
{
[self.fillColor setFill];
UIRectFill(rect);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeDestinationOut);
for (NSValue *value in self.framesToCutOut) {
CGRect pathRect = [value CGRectValue];
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:pathRect];
[path fill];
}
CGContextSetBlendMode(context, kCGBlendModeNormal);
}
@end
그런 다음 정상적으로 인스턴스화하고 사용할 마스크의 색상과 마스크에서 잘라낼 프레임으로 속성을 설정합니다.
[blackMask setFillColor:[UIColor colorWithWhite:0.0f alpha:0.8f]];
[blackMask setFramesToCutOut:@[[NSValue valueWithCGRect:buttonCircleA.frame],
[NSValue valueWithCGRect:buttonCircleB.frame]]];
이것은 타원 이외의 다른 모양을 잘라내어 개선 할 수 있지만 여기에서는 내 목적에 적합하며 나중에 쉽게 적용 할 수 있습니다. 바라건대 이것이 다른 사람들에게 도움이되기를 바랍니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다