如何解释触控板捏合手势以缩放IKImageBrowserView

时间:2009-11-27 09:12:36

标签: cocoa macos imagekit ikimagebrowserview

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

“可可事件处理指南”的Handling Gesture Events部分说:

  

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

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

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

那么,是否有人知道如何解释-[NSResponder magnifyWithEvent:]中的事件以缩放IKImageBrowserView

2 个答案:

答案 0 :(得分: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 here是IKImageBrowserView子类。我这里有一个阈值,所以zoomValue不能小于0.45,但这就是我喜欢它。

祝你好运, 马蒂亚斯,永恒风暴软件

答案 1 :(得分:4)

如果将事件放大倍数添加到缩放系数,则根据当前缩放系数,相同的事件将不会产生相同的效果。将0.1的放大倍率添加到缩放系数1将缩放10%,但如果缩放系数为0.1,则添加0.1会使缩放倍增

将缩放系数乘以magnification + 1.0的结果将更加一致。

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