1

ビューを描画します。ビューs frame = (0,0,44,44) and the viewの背景色は黒です。ビューを次のように表示するためにマスクを追加します。マスクはビューの中央にある小さな円です。しかし、逆の結果が得られます。ビューの中央のみがマスクされていません。このような間違った結果ここに画像の説明を入力してください

私のコードは:

aView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];

[aView.layer setBackgroundColor:[[UIColor blackColor] CGColor]];

CAShapeLayer *mask = [[CAShapeLayer alloc] init];
mask.frame = aView.bounds;
CGMutablePathRef p2 = CGPathCreateMutable();
CGPathAddEllipseInRect(p2, NULL, CGRectInset(mask.bounds, 10, 10));

mask.path = p2;
aView.layer.mask = mask;

CGPathRelease(p2);

[self addSubview:aView];

コードの何が問題になっていますか?ありがとう。

4

1 に答える 1

1

まず、マスキングパスに長方形を追加します。

次に、fillRuleシェイプレイヤーのプロパティをに設定しkCAFillRuleEvenOddて、中央部分がくり抜かれたままにします。

aView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];

[aView.layer setBackgroundColor:[[UIColor blackColor] CGColor]];

CAShapeLayer *mask = [[CAShapeLayer alloc] init];
mask.fillRule = kCAFillRuleEvenOdd;
mask.frame = aView.bounds;
CGMutablePathRef p2 = CGPathCreateMutable();
CGPathAddRect(p2, &CGAffineTransformIdentity, mask.bounds);
CGPathCloseSubpath(p2);
CGPathAddEllipseInRect(p2, NULL, CGRectInset(mask.bounds, 10, 10));

mask.path = p2;
aView.layer.mask = mask;

CGPathRelease(p2);
于 2012-09-07T10:25:02.287 に答える