3

为这个菜鸟问题道歉 - 来自 iOS 背景,我在 OSX 上有点挣扎。

好消息 - 我有一个带有大 NSView 的 NSScrollView,因为它是 documentView。我一直在调整 contentView 的边界以有效放大 documentView - 并且对于我在 drawRect (documentView)中所做的任何事情都运行良好

不太好的消息 - 我现在添加了另一个 NSView 作为大型 documentView 的子视图,并希望它可以像在 iOS 领域一样简单地缩放 - 但事实并非如此。如果有人能帮助填补我对这一切的理解中相当大的空白,我将不胜感激

谢谢。

[更新]我自己修复了它-“问题”是启用了自动布局(布局约束)。一旦我禁用它们并适当地设置自动调整大小,那么一切都很好。我想我应该了解布局约束......

4

2 回答 2

1

我知道这已经很老了,但是我花了几天时间尝试使用其他人发布的各种解决方案来解决问题后,才使用以下方法实现了鼠标滚动缩放,所有这些解决方案都存在基本问题。作为背景,我在 NSView 子类中使用 CALayers,在后台使用大型 PDF 建筑布局,并在其上叠加了 100 多个可拖动的 CALayer 对象。

缩放是即时且平滑的,并且一切都可以完美缩放,没有我所期望的“放大”的像素化。我为此浪费了很多天。

  override func scrollWheel(with event: NSEvent) {

        guard event.modifierFlags.contains(.option) else {
            super.scrollWheel(with: event)
            return
        }

        let dy = event.deltaY
        if dy != 0.0 {

            let magnification = self.scrollView.magnification + dy/30
            let point = self.scrollView.contentView.convert(event.locationInWindow, from: nil)

            self.scrollView.setMagnification(magnification, centeredAt: point)
        }
    }
于 2020-05-26T23:40:25.227 回答
0

大声笑,我有完全相同的问题。我失去了两天左右的自动布局。在我阅读了您的更新后,我进入并在视图中添加了另一个 NSBox,它被正确绘制并缩放。

不过,它是否也适用于 NSImageViews 作为子视图?

于 2012-10-04T19:16:39.697 回答