2009-11-27 27 views
7

我有,我希望能够用在最近的Mac笔记本电脑的多点触摸触控板捏变焦的IKImageBrowserView如何解释触控板手势捏放大IKImageBrowserView

可可事件处理指南,在节Handling Gesture Events说:

倍率存取方法返回表示倍率

的因子浮点(CGFloat的)值..并继续显示通过将高度和宽度乘以magnification + 1.0来调整视图大小的代码。

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

因此,没有人知道如何解释事件-[NSResponder magnifyWithEvent:]放大IKImageBrowserView

回答

14

这是我做的,雪豹,它运转很好:

在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]; 
     } 
    } 
} 

自己在这里是一个IKImageBrowserView子类。我在这里有一个门槛,所以zoomValue不能小于0.45,但这就是我喜欢它的方式。

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

+0

完美的作品。谢谢。 – 2009-11-28 00:07:48

4

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

magnification + 1.0变焦倍率相乘将更加一致的结果。

我更喜欢通过std::exp(magnification)乘以放大倍数,因为它似乎是一个更自然的解决方案。的-n放大倍数将通过的n放大缩小中相同数量的准确缩小。