40

このメソッドは iOS 7.0 で廃止されました。

drawAtPoint:forWidth:withFont:fontSize:lineBreakMode:baselineAdjustment:

代わりに使用drawInRect:withAttributes:します。

fontSizeとbaselineAdjustmentのattributeNameが見つかりません。

編集

@Puneetの回答に感謝します。

実際、これらのキーがない場合、iOS 7 でこのメソッドを実装する方法を教えてください。

以下の方法のように:

+ (CGSize)drawWithString:(NSString *)string atPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font fontSize:(CGFloat)fontSize
           lineBreakMode:(IBLLineBreakMode)lineBreakMode
      baselineAdjustment:(UIBaselineAdjustment)baselineAdjustment {
    if (iOS7) {
        CGRect rect = CGRectMake(point.x, point.y, width, CGFLOAT_MAX);

        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.lineBreakMode = lineBreakMode;

        NSDictionary *attributes = @{NSFontAttributeName: font, NSParagraphStyleAttributeName: paragraphStyle};

        [string drawInRect:rect withAttributes:attributes];

        size = CGSizeZero;
    }
    else {
        size = [string drawAtPoint:point forWidth:width withFont:font fontSize:fontSize lineBreakMode:lineBreakMode baselineAdjustment:baselineAdjustment];
    }
    return size;
}

fontSize渡し方・渡しbaselineAdjustment方がわからない

attributes辞書。

例えば

NSBaselineOffsetAttributeNameキーはNSNumerそれに a を渡す必要がありますが、baselineAdjustmentEnum.

2 つの変数を渡す他の方法はありませんか?

4

2 に答える 2

38

次のように属性を使用NSDictionaryおよび適用できます。

NSFont *font = [NSFont fontWithName:@"Palatino-Roman" size:14.0];

NSDictionary *attrsDictionary =

[NSDictionary dictionaryWithObjectsAndKeys:
                              font, NSFontAttributeName,
                              [NSNumber numberWithFloat:1.0], NSBaselineOffsetAttributeName, nil];

引数として使用attrsDictionaryします。

参照: 属性付き文字列プログラミング ガイド

参照:標準属性

SWIFT: IN String drawInRect は使用できませんが、代わりにNSStringを使用できます。

let font = UIFont(name: "Palatino-Roman", size: 14.0)
let baselineAdjust = 1.0
let attrsDictionary =  [NSFontAttributeName:font, NSBaselineOffsetAttributeName:baselineAdjust] as [NSObject : AnyObject]
let str:NSString = "Hello World"
str.drawInRect(CGRectZero, withAttributes: attrsDictionary)
于 2013-10-18T06:08:40.430 に答える
34

以前よりも少し複雑で、最小フォント サイズを使用することはできませんが、最小フォント スケール ファクターを使用する必要があります。iOS SDK にもバグがあり、ほとんどのユース ケースで問題が発生します (下部のメモを参照)。これがあなたがしなければならないことです:

// Create text attributes
NSDictionary *textAttributes = @{NSFontAttributeName: [UIFont systemFontOfSize:18.0]};

// Create string drawing context
NSStringDrawingContext *drawingContext = [[NSStringDrawingContext alloc] init];
drawingContext.minimumScaleFactor = 0.5; // Half the font size

CGRect drawRect = CGRectMake(0.0, 0.0, 200.0, 100.0);
[string drawWithRect:drawRect
             options:NSStringDrawingUsesLineFragmentOrigin
          attributes:textAttributes
             context:drawingContext];

ノート:

  • 少なくともバージョン 7.0.3 までの iOS 7 SDK にはバグがあるようです: 属性でカスタム フォントを指定すると、miniumScaleFactor が無視されます。属性に nil を渡すと、テキストは正しくスケーリングされます。

  • NSStringDrawingUsesLineFragmentOriginオプションは重要です。テキスト描画システムに、描画四角形の原点が左上隅にある必要があることを伝えます。

  • 新しいメソッドを使用してbaselineAdjustmentを設定する方法はありません。最初に呼び出してからboundingRectWithSize:options:attributes:context:、 rect に渡す前に rect を調整して、自分でそれを行う必要がありますdrawWithRect:options:attributes:context

于 2013-11-05T11:50:37.760 に答える