いくつかの円でマスクされた色あせた黒い背景色でビューを描画したいと思います。円の部分が空洞になっていて、下が見えるようになっているはずです。
CALayer マスキングが役に立たないか、適切な方法で適用していない可能性があります (以下のコメント付きコードを参照)。
以下は私のコードで、添付されているのは私が今見ているもののスクリーンショットです。
想定: 中が空洞の円が表示された、黒く色あせたビュー。
助言がありますか
#pragma Initializer
- (id)initWithFrame:(CGRect)iFrame andHollowFrames:(NSArray *)iHollowFrames {
if ((self = [super initWithFrame:iFrame]) != nil) {
self.hollowFrames = [NSArray arrayWithArray:iHollowFrames];
//self.layer.backgroundColor = CGColorCreateCopyWithAlpha([UIColor blackColor].CGColor, 0.5);
CAShapeLayer *circle1 = [self circleAt:CGPointMake(20.0, 20.0) ForRadius:10.0 withColor:[UIColor blackColor].CGColor andDashPattern:NO];
CAShapeLayer *circle2 = [self circleAt:CGPointMake(120.0, 20.0) ForRadius:10.0 withColor:[UIColor blackColor].CGColor andDashPattern:NO];
CALayer *myLayer = [CAShapeLayer layer];
myLayer.frame = self.frame;
myLayer.backgroundColor = CGColorCreateCopyWithAlpha([UIColor blackColor].CGColor, 0.5);
[self.layer addSublayer:myLayer];
// [circle1 setMask:myLayer];
// [circle2 setMask:myLayer];
[self.layer addSublayer:circle1];
[self.layer addSublayer:circle2];
}
return self;
}
#pragma Drawing Methods
- (CAShapeLayer *)circleAt:(CGPoint)iPoint ForRadius:(CGFloat)iRadius withColor:(CGColorRef)iColor andDashPattern:(BOOL)isDashPattern {
CAShapeLayer *aSignalcircle = [CAShapeLayer layer];
aSignalcircle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(iPoint.x, iPoint.y, 2.0 * iRadius, 2.0 * iRadius) cornerRadius:iRadius].CGPath;
aSignalcircle.position = CGPointMake(0.0 - iRadius, 0.0 - iRadius);
aSignalcircle.fillColor = [UIColor clearColor].CGColor;
aSignalcircle.strokeColor = iColor;
aSignalcircle.lineWidth = kPSSignalStrokeWidth;
aSignalcircle.backgroundColor = [UIColor clearColor].CGColor;
if (isDashPattern) {
aSignalcircle.lineDashPattern = @[@1, @1];
}
return aSignalcircle;
}