将 NSImageView 添加到 NSScrollView

Posted

技术标签:

【中文标题】将 NSImageView 添加到 NSScrollView【英文标题】:adding NSImageView to NSScrollView 【发布时间】:2015-11-13 23:20:53 【问题描述】:

我有一张尺寸约为 200x2000 像素的图像。我想显示以 200x200 矩形为中心的图像,但我希望能够上下移动它。最好我能想出我需要将一个 NSImageView 添加到一个 NSScrollView 但我不知道如何或即使这是最好的方法。这是我开发 OS X 的第一天...

经过一番谷歌搜索后,我找到了this,从中我可以想出这个

class MasterViewController: NSViewController 

var Photo: NSImageView!
@IBOutlet var scroll: NSScrollView!

override func viewDidLoad() 
    super.viewDidLoad()

    var imageRect: NSRect
    self.Photo = NSImageView.init()
    self.Photo.image = NSImage.init(named:"horizon")

    imageRect = NSMakeRect(0.0, 0.0, self.Photo.image!.size.width, self.Photo.image!.size.height)
    print("image size", imageRect)
    self.Photo = NSImageView(frame: imageRect)
    self.Photo.setBoundsSize(NSSize(width: imageRect.width, height: imageRect.height))
    self.Photo.imageScaling = NSImageScaling.ScaleNone


    self.scroll.setFrameSize(NSSize(width: imageRect.width,height: imageRect.width))
    self.scroll.hasVerticalScroller = true
    self.scroll.hasHorizontalScroller = true
    self.Photo.setFrameSize(CGSize(width: imageRect.width,height: imageRect.width))
    self.scroll.documentView = self.Photo
    //print(self.scroll.documentView?.frame)

    //self.scroll.setC contentSize = NSSize(width: 200, height: 2000)
    //self.Photo.image = NSImage.init(named:"bezel")
    //self.scroll.addSubview(self.Photo)


但我无法让图像显示在滚动视图中

【问题讨论】:

【参考方案1】:

@lusher00:在您的示例中,您初始化了两次 self.Photo,首先使用 init(),然后使用 (frame: imageRect),这可能解释了为什么图像不显示。

你可以将imageView设置为NSScrollView的documentView,如下:

        @IBOutlet var scrollView: NSScrollView!


        var imageRect: NSRect
        // Initialize below the imageView image with appropriate content (to adapt)
        imageView.image = NSImage.init(named:"horizon")
        imageRect = NSMakeRect(0.0, 0.0, imageView.image!.size.width, imageView.image!.size.height)
        imageView.setFrameSize(CGSize(width: imageRect.width, height: imageRect.height))
        imageView.imageScaling = NSImageScaling.ScaleNone
        scrollView.documentView = imageView
        scrollView.hasVerticalScroller = true
        scrollView.hasHorizontalScroller = true

【讨论】:

【参考方案2】:

只需将图像视图添加为滚动视图的子视图。

scrollView.addSubview(imageView)

你可以设置imageview的位置,将它定位在scrollview里面。

滚动视图需要知道其内容大小有多大才能启用该区域的滚动。所以不要忘记更新滚动视图的contentSize 属性。

例如将 200x200 的 imageView 添加到具有 200x200 框架的 scrollView 中。将 contentSize 设置为 400x400 并调用 imageView.center = scrollView.center,将使图像居中并允许在滚动视图的 200x200 可见框架内围绕图像进行一些滚动。

你也可以通过查看contentOffset来获取scrollView的当前偏移量。

如果您需要在用户滚动时进行跟踪,可以使用scrollViewDidScroll。检查 docs 的滚动视图以获取其他一些选项。

【讨论】:

到目前为止,除了设置 contentSize 之外,我基本上已经完成了所有这些工作。但是, contentSize 是一个只能获取的属性。我仍然有一个无法滚动的居中图像 有一个documentView,对不起,我是从ios术语解释的。检查这个***.com/questions/3457926/…

以上是关于将 NSImageView 添加到 NSScrollView的主要内容,如果未能解决你的问题,请参考以下文章

NSImageView 拖放问题

如何通过路径绑定 NSImageView?

AlamofireImage:是不是可以从 Swift 中的 NSimageview 获取原始数据?

将子视图添加到 NSView

NSImageView:水平适应容器宽度,垂直纵横比

Swift OSX NSImageView 拖放