6

IB 内で NSScrollView を作成し、チェックallow magnificationボックスをオンにしました。これは実際に何をしますか?

これは、手動拡大が実装されている Apples の例で見つけたものです。

- (void)magnifyWithEvent:(NSEvent *)event {

    [resultsField setStringValue:

    [NSString stringWithFormat:@"Magnification value is %f", [event magnification]]];

    NSSize newSize;

    newSize.height = self.frame.size.height * ([event magnification] + 1.0);

    newSize.width = self.frame.size.width * ([event magnification] + 1.0);

    [self setFrameSize:newSize];

}

を使用allow magnificationすると、ビュー内のすべてのサイズも変更されるため、上記のようにフレーム サイズを設定することはできません。では、座標系を操作するために
使用するようなものですか?scaleUnitSquareToSize:

4

1 に答える 1

2

私はこれを使用していませんが、ビューのコンテンツをスケーリングする古い方法は、フレームを同じサイズに保ちながらビューの境界を変更することでした。これにより、座標系が効果的に変換され、すべてのもの (およびビューの外側のほとんどのもの) が大きく描画されます。

私の推測では、自動拡大はトラックパッドのピンチ/ピンチ解除イベントをリッスンし、それに応じて境界を拡大/縮小します。

ドキュメントを見ると、このチェックボックスが -allowsMagnification プロパティを設定しているようです。倍率は、境界を変更するのと同じ効果があるように見えますが、独立しています。倍率プロパティと、minMagnification および maxMagnification プロパティがあります。そのため、つまむと倍率プロパティが調整され、描画が大きくなります。

私の推測では、lockFocus 内でコンテキスト変換マトリックスを設定するときに倍率が考慮されるだけです。scaleUnitSquare なども適切に更新されていることを願っていますが、図面を適切なサイズにするためには、それらは実際には必要ではないと思います。

于 2014-04-10T09:55:33.567 に答える