2

そのため、以下のコードを使用して のテキストにストローク (および塗りつぶし) を適用すると、UILabel下の画像のようになります。ストロークは一方の側がもう一方の側よりも重くなっています (文字の上部を下部と比較し、右側を左側と比較してください。最後のピリオドも非常に目立ち、ぎょろ目のように見えます)。シャドウイングをまったくオンにしていないので、シャドウがストロークに干渉しているとは思いません。

何が原因でしょうか?

- (void) drawTextInRect: (CGRect) rect
{
    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextSetTextDrawingMode(c, kCGTextFillStroke);
    CGContextSaveGState(c);
    CGContextSetRGBFillColor(c, 1.0, 0.0, 0.0, 1.0);
    CGContextSetRGBStrokeColor(c, 0.0, 1.0, 0.0, 1.0);
    [super drawTextInRect: rect];
    CGContextRestoreGState(c);
}

ここに画像の説明を入力

編集:だから、キックのために、塗りつぶしとストロークだけのラベルを見てみました。ストロークをオフにすると、Interface Builder で色を塗ったかのように、完全に通常のテキストが作成されます。ただし、塗りつぶしをオフにすると、ストロークのみが表示され、他のどの面よりも重く見えません。**これにより、問題は塗りつぶしがストロークに対してどこに配置されているかであり、塗りつぶしまたはストローク自体に問題があるとは思えません。これについて他に考えはありますか?塗りつぶしをストロークの中央に直接配置するにはどうすればよいですか?

4

2 に答える 2

1

オーバーライドされたメソッドが、CGContextTranslateCTMまたは同様の関数を使用して CTM を変換している可能性があります。CTM はコンテキストの状態の一部であり、後続のすべての描画呼び出しの変換を指定します。

オーバーライドされたメソッドを呼び出す前にコンテキストを保存し、後で復元するようにしてください。

CGContextSaveGState(c);
[super drawTextInRect: rect];
CGContextRestoreGState(c);
于 2013-04-08T08:42:43.183 に答える