swift - slider 控制 NSScroller

标签 swift macos scroll

我正在使用带有网格的 NSScrollview 。一切正常,滚动条按预期移动 GridView 。我现在希望通过 slider 控制滚动。这工作正常并移动滚动条。不幸的是,这实际上并没有 ScrollView 。但如果你使用滚动条就会这样。我尝试过 NSScrollerNoPart,我认为它可能需要激活。我查看了所有 IB 窗口以找到可以打开它的东西。感谢您的转发

这是我的代码 Swift 3 Xcode8 OSX MacOS 而不是 IOS

 //  MainWindowController.swift

import Cocoa

class MainWindowController: NSWindowController {


    @IBOutlet weak var scrollView: NSScrollView!
    @IBOutlet weak var containerView: NSView!
    @IBOutlet weak var gridView: GridGUI!
    @IBOutlet weak var scrollbar: NSScroller!

    override func windowDidLoad() {
        super.windowDidLoad()

        //NSScrollerNoPart = true

    }//EO Overide


    @IBAction func mySlider(_ sender: AnyObject) {//set to min 0 max 1

        let data = sender.floatValue
        print("Data",data)

        scrollbar.floatValue = Float(data!)

        gridView.display()
        scrollView.display()
        containerView.display()

    }//eo slider

}//EnD oF thE wORld


class GridGUI: NSView {

    var xPosArray = [Int]()
    override func draw(_ dirtyRect: NSRect) {

        //--------- BACKGROUND
        let back1 = NSMakeRect(0,0,9000,482)
        let back1Color = NSColor(red: 0.3, green: 0.3, blue: 0.5, alpha: 0.2)
        let back1Path: NSBezierPath = NSBezierPath(rect: back1)
        back1Color.set()
        back1Path.fill()

        var gridY:CGFloat = 0.0 //Vertical position
        var gridYGray:CGFloat = 0.9

        for i in 0..<225{
            if (i % 16 == 0){gridYGray = 0.2}
            else{gridYGray = 0.7}

            //--------- VERTICAL GRID LINES
            let gridY1 = NSMakeRect(gridY,0, 4.0,480)
            let gridY1Color = NSColor(red: gridYGray, green: gridYGray, blue: gridYGray, alpha: 1.0)
            let gridY1Path: NSBezierPath = NSBezierPath(rect: gridY1)
            gridY1Color.set()
            gridY1Path.fill()
            gridY = gridY + 40.0
        }

        //HORIZONTAL GRID LINES
        var gridX:CGFloat = 0.0
        for _ in 0..<25{
            //--------- HORIZONTAL GRID LINES
            let gridX1 = NSMakeRect(0,gridX,9000,2)
            let gridX1Color = NSColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0)
            let gridX1Path: NSBezierPath = NSBezierPath(rect: gridX1)
            gridX1Color.set()
            gridX1Path.fill()
            gridX = gridX + 20.0
        }

    }}

最佳答案

为了回答我自己的问题,所需要做的就是在 mySlider 内创建一个 CGPoint

let myPoint = CGPoint(x:Double(data),y:0.0) 

然后使用

containerView.scroll(myPointer)

不需要删除的项目

    gridView.display()
    scrollbar.floatValue = Float(data!)
    scrollView.display()
    containerView.display()

关于swift - slider 控制 NSScroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42956167/

相关文章:

jquery - 在 Chrome 中滚动到页面加载时的元素

ios - systemLayoutSizeFittingSize 在第一次调用时给出了错误的尺寸

java - Tomcat在Eclipse中不起作用

macos - 如何从我的 Mac 连接到新的 Amazon Lightsail 实例?

java - 如何在 Mac OSX 10.7 Lion 上运行 32 位 Java

jQuery 左右滚动文本

java - 向 JPanel 添加滚动

ios - 来自 iPhone 的 CloudKit

swift - Swift 中索引超出范围错误

swift - Swift 枚举中的默认初始化被忽略