我有IKImageBrowserView
我希望能够使用最近的Mac笔记本电脑上的多点触控板进行缩放。
“可可事件处理指南”的Handling Gesture Events部分说:
放大器访问器方法返回表示放大倍数的浮点(CGFloat)值
..继续显示通过将高度和宽度乘以magnification + 1.0
来调整视图大小的代码。
这似乎不是缩放IKImageBrowserView
的正确方法,zoomValue
属性被限制在0.0和1.0之间。
那么,是否有人知道如何解释-[NSResponder magnifyWithEvent:]
中的事件以缩放IKImageBrowserView
?
答案 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
放大倍率相同的量。