7

最近IKImageBrowserViewのMacラップトップでマルチタッチトラックパッドを使用してピンチズームできるようにしたいです。

Cocoa Event Handling Guide の「Handling Gesture Events 」セクションには、次のように記載されています。

倍率アクセサー メソッドは、倍率を表す浮動小数点 (CGFloat) 値を返します。

..さらに、高さと幅に を掛けてビューのサイズを調整するコードを示しますmagnification + 1.0

IKImageBrowserViewこれは、zoomValueプロパティが 0.0 と 1.0 の間に固定されているzooming の正しいアプローチではないようです。

-[NSResponder magnifyWithEvent:]では、イベントをズームに解釈する方法を知っている人はいIKImageBrowserViewますか?

4

2 に答える 2

15

これは私が行うことです。Snow Leopard では、完全に正常に動作します。

10.6 では、NSEventすでに適切な量を返すメソッド「倍率」があります。のように、これを古い値に追加するだけです[imageBrowser zoomValue]+[event magnification]

- (void)magnifyWithEvent:(NSEvent *)event
{
    if ([event magnification] > 0)
    {
        if ([self zoomValue] < 1)
        {
            [self setZoomValue:[self zoomValue] + [event magnification]];
        }
    }
    else if ([event magnification] < 0)
    {
        if ([self zoomValue] + [event magnification] > 0.45)
        {
            [self setZoomValue:[self zoomValue] + [event magnification]];
        }
        else
        {
            [self setZoomValue:0.45];
        }
    }
}

ここでの self はIKImageBrowserViewサブクラスです。zoomValueが 0.45 より小さくならないように、ここにしきい値を設定していますが、それが私の好みです。

マティアス、エターナル ストーム ソフトウェア

于 2009-11-27T23:46:03.907 に答える
5

イベント倍率をズーム倍率に追加すると、現在のズーム倍率によっては、同じイベントが同じ効果を持つことはありません。0.1のズーム倍率に の倍率を追加すると 倍になりますが、ズーム倍率が の場合は、倍率を追加する1とズームが 2 倍になります。10%0.10.1

ズーム係数を掛けた結果は、magnification + 1.0より一貫したものになります。

std::exp(magnification)より自然な解決策と思われるため、ズーム倍率に を掛けることを好みます。の倍率は、倍率の-nズームインとまったく同じ量だけズームアウトnします。

于 2010-05-04T16:24:53.900 に答える