6

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

}

Usingallow magnification还会调整视图中所有内容的大小,因此不能像上面那样设置框架大小。
那么它类似于使用scaleUnitSquareToSize:来操纵坐标系吗?

4

1 回答 1

2

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

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

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

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

于 2014-04-10T09:55:33.567 回答