自动放大在NSScrollView中的作用是什么?

DaP*_*hil 6 objective-c nsscrollview magnification coordinate-transformation

我在IB中编写了一个NSScrollView并选中了该allow magnification框.这实际上是做什么的?

这是我在Apples示例中发现的,其中实现了手动放大:

- (void)magnifyWithEvent:(NSEvent *)event {

    [resultsField setStringValue:

    [NSString stringWithFormat:@"Magnification value is %f", [event magnification]]];

    NSSize newSize;

    newSize.height = self.frame.size.height * ([event magnification] + 1.0);

    newSize.width = self.frame.size.width * ([event magnification] + 1.0);

    [self setFrameSize:newSize];

}
Run Code Online (Sandbox Code Playgroud)

使用allow magnification也会调整视图中的所有内容,因此不能像上面那样设置帧大小.
这就像scaleUnitSquareToSize:用来操纵坐标系一样吗?

uli*_*ess 2

我没有使用过这个,但是缩放视图内容的旧方法是更改​​边界,同时保持其框架大小相同。这有效地改变了坐标系,以将所有东西绘制得更大(以及视图之外的大多数东西)。

我的猜测是,自动放大功能会监听触控板上的捏合/松开事件,并相应地向上/向下缩放边界。

查看文档,看起来这个复选框设置了 -allowsMagnification 属性。放大倍率似乎与更改边界具有相同的效果,但它们是独立的。有一个 magnification 属性以及 minMagnification 和 maxMagnification 属性。因此捏合会调整放大属性,从而导致绘图变大。

我的猜测是,在 lockFocus 内设置上下文转换矩阵时仅考虑放大倍率。我希望他们也适当地更新了scaleUnitSquare 和其他内容,但我认为这些对于您的绘图最终达到正确的尺寸来说并不是真正需要的。