複数のフォントを使用する選択したリッチテキストのテキストサイズ(たとえば42)を設定する必要があります。
文字の各グループの属性を確認し、フォントサイズを変更し、属性を元に戻すことができると思いますが、フローティングフォントパネルを見ると、それを実現するための非常に簡単で簡単な方法があるはずです。明らかな何かが恋しいですか?
複数のフォントを使用する選択したリッチテキストのテキストサイズ(たとえば42)を設定する必要があります。
文字の各グループの属性を確認し、フォントサイズを変更し、属性を元に戻すことができると思いますが、フローティングフォントパネルを見ると、それを実現するための非常に簡単で簡単な方法があるはずです。明らかな何かが恋しいですか?
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];
}
ジョナサンの答えを少し一般化すると、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
これによりフォントサイズが2倍になりますが、scaleプロパティを任意の値に変更したり、固定サイズを指定したりできます。
NSFont * font = ...;
CGFloat fontSize = [[font fontDescriptor].fontAttributes[NSFontSizeAttribute] floatValue];
font = [NSFont fontWithDescriptor:[font fontDescriptor] size:fontSize * 2.];
self.textField.font = font;
注:NSTextViewを使用していて、そのテキストストレージ(NSTextStorage)にアクセスできることを前提としています。
複数のフォントを使用するテキストでのみフォントのサイズを変更することはできないと思います。NSAttributedStringでは、フォントのサイズは、フォントとサイズの両方を制御するNSFontAttributeName属性の一部です。
1つの解決策は、選択を繰り返し、attribute:atIndex:longestEffectiveRange:inRange:
各フォントが適用されるときに範囲をキャプチャするためにを使用し、フォントのサイズを変更してから、を使用addAttribute:value:range:
して範囲全体に新しいフォントを設定することです。
更新:
NSTextViewのGNUstepGUIソースコード(LGPLの下)を見ると、それらの実装が範囲反復を使用していることがわかります。
NSTextView
はのサブクラスであるため、を使用してテキストビューの倍率レベルを変更NSView
できます。-scaleUnitSquareToSize:
たとえば、すべてのテキストを2倍のサイズにするには、次のように呼び出します。
[textView scaleUnitSquareToSize:NSMakeSize(2.0, 2.0)];
NSTextContainer
この操作を実行した後、テキストが正しくレイアウトされるように、テキストビューのサイズを調整する必要がある場合があります。