2

私はさまざまな同様の質問を調べましたが、それでもコードを機能させることができないようです。画像が描画されたUIView([image drawInRect:bounds])がありますが、コンテキストクリッピングに何かがありません:

// Get context & bounds, and calculate centre & radius
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGRect bounds=[self bounds];
CGPoint centre;
centre.x=bounds.origin.x+0.5*bounds.size.width;
centre.y=bounds.origin.y+0.5*bounds.size.height;
CGFloat radius=centre.x;

// Draw image
UIImage *backImage=[UIImage imageNamed:@"backimage.png"];
[backImage drawInRect:bounds];

// Create clipping path and clip context
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, centre.x, centre.y, radius, 0, 2*M_PI, 0);
CGContextAddPath(ctx, path);
CGContextClip(ctx);

私がどこで間違ったのかについて何か考えはありますか?読んでくれてありがとう。

4

1 に答える 1

4

radius=centre.x間違っているようです。半径は、幅または高さの半分にする必要があります。

CGFloat radius = 0.5*bounds.size.width;

便利な機能も使えます

CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL);

更新:実際の問題は、画像の描画にクリッピングパスが変更されたことであることが判明しました。

クリッピングパスは、今後のすべての描画操作に使用されるため、描画に設定する必要があります。

于 2013-01-10T12:17:07.227 に答える