0

Quartz コンテキストにテキストを書いています。

500 x 200 ピクセルのボックスがあり、その中にテキストを書いています。ボックスの縦横比は任意ですが、テキストは常にフォントの縦横比をそのまま使用して書き込みます。私が望むのは、フォントを垂直方向にスケーリングし、水平方向のスケーリングを維持することです。

写真を見てください。最初のボックスは私が得ているものを表し、2 番目のボックスは私が欲しいものを表しています。

ここに画像の説明を入力

こんな感じで書いてます…

CGRect rect = CGRectMake(0,0,500,200);
[myText drawInRect:rect
        withFont:aFont
        lineBreakMode:UILineBreakModeTailTruncation
        alignment:UITextAlignmentCenter];

フォントを縦に拡大縮小する方法はありますか?

注:これはPDFコンテキストで書かれているため、解像度を失いたくないので、テキストを画像コンテキストにレンダリングして垂直方向に拡大縮小したくありません。

ありがとう

4

1 に答える 1

1
  - (void) scaleTextVerticallyWithContext:(CGContextRef)myContext withRect:(CGRect)contextRect
{
    CGFloat w, h;
    w = contextRect.size.width;
    h = contextRect.size.height;

    CGAffineTransform myTextTransform;    
    CGContextSelectFont (myContext, "Helvetica-Bold", h/10, kCGEncodingMacRoman);
    CGContextSetCharacterSpacing (myContext, 10);
    CGContextSetTextDrawingMode (myContext, kCGTextFillStroke); 

    CGContextSetRGBFillColor (myContext, 0, 1, 0, .5);
    CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1);  

         /*  
          *  CGAffineTransformMakeScale ( CGFloat sx, CGFloat sy );
          *  sx: The factor by which to scale the x-axis of the coordinate system.
          *  sy: The factor by which to scale the y-axis of the coordinate system.  
          */

    myTextTransform = CGAffineTransformMakeScale(1,8);

    CGContextSetTextMatrix (myContext, myTextTransform);
    CGContextShowTextAtPoint (myContext, 40, 0, "Hello There", 9);
}

- (void)drawRect:(CGRect)rect{

    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGRect viewBounds = self.bounds;
    CGContextTranslateCTM(context, 0, viewBounds.size.height);
    CGContextScaleCTM(context, 1, -1);

    [self scaleTextVerticallyWithContext:context withRect:viewBounds];
}
于 2012-09-26T14:36:24.590 に答える