1

いくつかの円でマスクされた色あせた黒い背景色でビューを描画したいと思います。円の部分が空洞になっていて、下が見えるようになっているはずです。

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;
}

ここに画像の説明を入力

4

2 に答える 2

0

コードで何かをしようとしていたときに同様の問題が発生しました。新しいレイヤーを表示可能なウィンドウのサイズにすることでこれを修正しました。これは、色で塗りつぶし、背景を使用してcolorClear を使用し、そこにマスクを使用します (ああ、後で全画面表示に戻します)。あなたの問題は、レイヤーがレンダリングされているときに、ビュースタックの一番下にあるため、背景色がカット後もそのレベルではなく透けて見えることです。

于 2013-09-20T19:45:04.827 に答える