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

Fra*_*irs 7 macos cocoa imagekit ikimagebrowserview

IKImageBrowserView想要能够在最近的Mac笔记本电脑上使用多点触控板进行双指缩放.

"可可事件处理指南"中的处理手势事件部分说:

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

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

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

那么,有没有人知道如何解释事件-[NSResponder magnifyWithEvent:]进行缩放IKImageBrowserView

小智 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];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

self这里是一个IKImageBrowserView子类.我这里有一个阈值,所以zoomValue不能小于0.45,但这就是我喜欢的方式.

最好的问候,马蒂亚斯,永恒风暴软件


Tho*_*mas 5

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

乘以缩放因子的结果magnification + 1.0会更加一致。

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