高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1346
Finding an NSView's current magnification.

Q:NSView の座標空間の拡大縮小率がデフォルトの設定から変更されている場合、現在の拡大縮小率を調べるにはどうしたらよいのでしょうか。

A:NSView は、-convertSize:fromView: というメソッドを提供して、ウインドウ内のさまざまなビューの座標空間の間でサイズを変換します。ウインドウの基本の座標空間から NSView の座標空間へ、既知のサイズを変換すると、結果は現在のズームレベルになります。

もう 1 つ、NSView には -scaleUnitSquareToSize: というメソッドがあり、これはビューの既存の座標系に対する相対的な拡大縮小率を設定します。Objective-C のカテゴリを使用していくつかのメソッドを NSView に追加することによって、NSView インスタンスを絶対的に拡大縮小する簡易版の API を提供することができます。

リスト 1: ScaleUtilites カテゴリ宣言

@interface NSView (ScaleUtilities)

- (NSSize) scale;
- (void) setScale:(NSSize) newScale;
- (void) resetScaling;

- (float) scalePercent;
- (void) setScalePercent:(float) scale;

@end

リスト 2: ScaleUtilites カテゴリ実装

@implementation NSView (ScaleUtilities)

const NSSize unitSize = { 1.0, 1.0 };

  // このメソッドは、レシーバの拡大縮小率がウインドウの基本座標系と
  // 等しくなるようにする。
- (void) resetScaling { [self scaleUnitSquareToSize: [self convertSize: unitSize fromView: nil]];  }

  // このメソッドは絶対的な拡大縮小率を設定する。
- (void) setScale:(NSSize) newScale
  {
  [self resetScaling];  // まず、拡大縮小率をウインドウの座標系と一致させる。
  [self scaleUnitSquareToSize:newScale]; // 次に、拡大縮小率を設定する。
  }

  // このメソッドは、ウインドウの基本座標系に対する、レシーバの座標系の
  // 拡大縮小率を返す。
- (NSSize) scale { return [self convertSize:unitSize toView:nil]; }

// パーセンテージを使用したい場合は以下を使用する。
- (float) scalePercent { return [self scale].width * 100; }

- (void) setScalePercent:(float) scale
  {
  scale = scale/100.0;
  [self setScale:NSMakeSize(scale, scale)];
  [self setNeedsDisplay:YES];
  }

@end

ドキュメントの改訂履歴

日付 メモ
2004-12-13 -resetScaling の実装に間違いがありました。-convertSize:fromView: とすべきだったところを -convertSize:toView: と記述していました。
2004-10-14 初版

掲載日: 2004-12-13