7

我有一个IKImageBrowserView我希望能够在最近的 Mac 笔记本电脑上使用多点触控触控板进行缩放。

Cocoa 事件处理指南,在处理手势事件部分中说:

放大访问器方法返回表示放大系数的浮点 (CGFloat) 值

..并继续显示通过将高度和宽度乘以来调整视图大小的代码magnification + 1.0

这似乎不是缩放的正确方法IKImageBrowserView,其zoomValue属性被限制在 0.0 和 1.0 之间。

那么,有谁知道如何将事件解释-[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将放大10%,但如果缩放因子为0.1,添加0.1将使缩放倍数加倍。

放大倍数乘以的结果magnification + 1.0会更加一致。

我更喜欢将缩放系数乘以std::exp(magnification),因为这似乎是一种更自然的解决方案。放大倍数-n将缩小与放大倍率相同的量n

于 2010-05-04T16:24:53.900 回答