11

複数のフォントを使用する選択したリッチテキストのテキストサイズ(たとえば42)を設定する必要があります。

文字の各グループの属性を確認し、フォントサイズを変更し、属性を元に戻すことができると思いますが、フローティングフォントパネルを見ると、それを実現するための非常に簡単で簡単な方法があるはずです。明らかな何かが恋しいですか?

4

5 に答える 5

11

10.6では、属性を繰り返し処理してフォントサイズを大きくする便利な方法があります。このメソッドは、NSTextViewカテゴリに追加できます。

    - (IBAction)increaseFontSize:(id)sender
{
    NSTextStorage *textStorage = [self textStorage];
    [textStorage beginEditing];
    [textStorage enumerateAttributesInRange: NSMakeRange(0, [textStorage length])
                                     options: 0
                                  usingBlock: ^(NSDictionary *attributesDictionary,
                                                NSRange range,
                                                BOOL *stop)
     {
#pragma unused(stop)
         NSFont *font = [attributesDictionary objectForKey:NSFontAttributeName];
         if (font) {
             [textStorage removeAttribute:NSFontAttributeName range:range];
             font = [[NSFontManager sharedFontManager] convertFont:font toSize:[font pointSize] + 1];
             [textStorage addAttribute:NSFontAttributeName value:font range:range];
         }
     }];
    [textStorage endEditing];
    [self didChangeText];

}
于 2011-01-28T22:43:38.443 に答える
8

ジョナサンの答えを少し一般化すると、Xcodeプロジェクトの適切なファイルに簡単に貼り付けることができるカテゴリインターフェイスがあります。

@interface NSTextView (FrameworkAdditions)

-  (IBAction)decrementFontSize:(id)sender;
-  (IBAction)incrementFontSize:(id)sender;

@end

そして対応する実装:

@implementation NSTextView (FrameworkAdditions)

- (void)changeFontSize:(CGFloat)delta;
{
    NSFontManager * fontManager = [NSFontManager sharedFontManager];
    NSTextStorage * textStorage = [self textStorage];
    [textStorage beginEditing];
    [textStorage enumerateAttribute:NSFontAttributeName
                            inRange:NSMakeRange(0, [textStorage length])
                            options:0
                         usingBlock:^(id value,
                                      NSRange range,
                                      BOOL * stop)
     {
         NSFont * font = value;
         font = [fontManager convertFont:font
                                  toSize:[font pointSize] + delta];
         if (font != nil) {
             [textStorage removeAttribute:NSFontAttributeName
                                    range:range];
             [textStorage addAttribute:NSFontAttributeName
                                 value:font
                                 range:range];
         }
     }];
    [textStorage endEditing];
    [self didChangeText];
}

-  (IBAction)decrementFontSize:(id)sender;
{
    [self changeFontSize:-1.0];
}

-  (IBAction)incrementFontSize:(id)sender;
{
    [self changeFontSize:1.0];
}

@end
于 2011-08-23T21:52:06.163 に答える
4

これによりフォントサイズが2倍になりますが、scaleプロパティを任意の値に変更したり、固定サイズを指定したりできます。

    NSFont * font = ...;
    CGFloat fontSize =  [[font fontDescriptor].fontAttributes[NSFontSizeAttribute] floatValue];
    font = [NSFont fontWithDescriptor:[font fontDescriptor] size:fontSize * 2.];

    self.textField.font = font;
于 2016-02-27T19:17:11.390 に答える
2

:NSTextViewを使用していて、そのテキストストレージ(NSTextStorage)にアクセスできることを前提としています。

複数のフォントを使用するテキストでのみフォントのサイズを変更することはできないと思います。NSAttributedStringでは、フォントのサイズは、フォントとサイズの両方を制御するNSFontAttributeName属性の一部です。

1つの解決策は、選択を繰り返し、attribute:atIndex:longestEffectiveRange:inRange:各フォントが適用されるときに範囲をキャプチャするためにを使用し、フォントのサイズを変更してから、を使用addAttribute:value:range:して範囲全体に新しいフォントを設定することです。

更新

NSTextViewのGNUstepGUIソースコード(LGPLの下)を見ると、それらの実装が範囲反復を使用していることがわかります。

于 2010-02-11T16:47:16.577 に答える
1

NSTextViewはのサブクラスであるため、を使用してテキストビューの倍率レベルを変更NSViewできます。-scaleUnitSquareToSize:たとえば、すべてのテキストを2倍のサイズにするには、次のように呼び出します。

[textView scaleUnitSquareToSize:NSMakeSize(2.0, 2.0)];

NSTextContainerこの操作を実行した後、テキストが正しくレイアウトされるように、テキストビューのサイズを調整する必要がある場合があります。

于 2010-02-12T03:22:54.177 に答える