iPhone:どのようにウィンドウ内のテキストを描画するには?

StackOverflow https://stackoverflow.com/questions/1115523

  •  12-09-2019
  •  | 
  •  

質問

奇妙な状況 - リンゴの作品例から、私はそれらを少し変更した後、テキストは表示されません。コードのこのビットは正しく青の背景を描画しますが、関係なく、私は何をすべきか、その上にテキストを描画しないことを拒否します:

#import <UIKit/UIKit.h>

@interface CWnd : UIWindow @end
@implementation CWnd

- (void) drawRect : (CGRect) i_poRect
{
  // This is working : windows is blue.
  CGContextRef oContex = UIGraphicsGetCurrentContext();
  CGContextSetRGBFillColor( oContex, 0, 0, 255, 1 );
  CGContextFillRect( oContex, i_poRect );
  // This is not working : not text is displayed.
  CGContextSelectFont( oContex, "Monaco", 10, kCGEncodingFontSpecific );
  CGContextSetRGBStrokeColor( oContex, 255, 0, 0, 1 ); 
  CGContextSetRGBFillColor( oContex, 255, 0, 0, 1 ); 
  CGContextSetTextDrawingMode( oContex, kCGTextFill );
  CGContextSetTextPosition( oContex, 100, 100 );
  CGContextShowText( oContex, "abc", 3 );
}

@end

@interface CDelegate : NSObject <UIApplicationDelegate> @end
@implementation CDelegate

- (void)applicationDidFinishLaunching : (UIApplication *) i_poApp
{
  CGRect oRect = [ [ UIScreen mainScreen ] bounds ];
    [ [ [ CWnd alloc] initWithFrame : oRect ] makeKeyAndVisible ];
}

@end

int main(int argc, char *argv[])
{    
  return UIApplicationMain( argc, argv, nil, @"CDelegate" );
}
役に立ちましたか?

解決

私はクォーツコンテキストに直接テキストを描画するために問題なく、次のコードを使用しました。

CGContextSetStrokeColorWithColor(context, strokeColor); 
CGContextSetFillColorWithColor(context, strokeColor);

CGContextSelectFont(context, "Helvetica", fontSize, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetTextPosition(context, 0.0f, round(fontSize / 4.0f));
CGContextShowText(context, [text UTF8String], strlen([text UTF8String]));

これはあなたのケースで間違って何が起こっているのか明らかではありません。この場合に注意するには、2つのものがあります:テキストはUIViewsとそのCALayersの座標空間による裏返しに逆さまに引き出すことができる、とリズミカルFistmanが指摘するように、これは、UTFエンコーディングを処理しません。

良く、あまりパフォーマンスが、アプローチのような何かを行うことです。

CGContextSetFillColorWithColor(context, strokeColor);
[text drawAtPoint:CGPointMake(0.0f, 0.0f) withFont:[UIFont fontWithName:@"Helvetica" size:fontSize]];

他のヒント

ねえ、私はちょうど私のコード内のノートを発見しました。

どうやらCGContextShowTextAtPointCGContextSetFontでは動作しません。
あなたは代わりにCGContextSelectFontを使用する必要があります。明白な、ハァッ?

とにかく、私は、これはそうではありません知っているが、あなたはCGContextShowTextAtPointを使用してみてください可能性があります。

これはおそらく、別の答えに属していませんでした。

他の人(こちらとこちら)いくつかのアフィン変換を行い、順番にCGContextShowTextAtPoint方法を使用していますそれを動作させるためにます:

CGContextSelectFont(oContex, @"Monaco", 10, kCGEncodingFontSpecific);
CGContextSetTextDrawingMode(oContex, kCGTextFill);
CGContextSetRGBFillColor(oContex, 1.0, 0.0, 0.0, 1.0);
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextSetTextMatrix(oContex, xform);
CGContextShowTextAtPoint(oContex, 100, 100, "abc", 3);

一つの他の可能な問題はCGContextSetRGBFillColor法は範囲0.0〜1.0で浮動小数点の引数を取ることです。あなたは、そのメソッドが期待するものではありません「フルカラー」を示すために255を使用しています。あなたは0〜255の範囲で、より快適にしている場合は、次のは、動作するはずます:

CGContextSetRGBFillColor(oContex, 255/255.0, 0/255.0, 0/255.0, 1.0);

ねえ、エンコーディングの問題である可能性があります。

kCGEncodingFontSpecifickCGEncodingMacRomanを変更してみてください。

あなたはそれがすべての作業を取得するときに

その後、CGContextShowTextAtPointを取り除く。
それはゴミ、非Unicodeだとあなたが
する必要がありますグリフのバージョンを使用します 禁断のAPIを呼び出します。あなたは、テキスト描画のためのUIKitを使用してオフにずっといいです。
それはユニコード精通だとも文字のためのまともなグリフ置換を行い
それはあなたのフォントで存在していない。

があり一つの他の可能性があり、それはテキストの位置はあなたが描くしようとしている中で、長方形の外に嘘を指定することです。それは、代入してこれをテストするのは簡単です。

CGContextSetTextPosition( oContex, 100, 100 );

タグ付き
CGContextSetTextPosition( oContex, CGRectGetMidX(i_poRect), CGRectGetMidY(i_poRect));

CGContextSetTextMatrixメソッドを使用します。 「逆さまの問題は、」マトリックスからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top