【问题标题】:Is it possible to change value by scrolling OSX trackpad (Swift)?是否可以通过滚动 OSX 触控板(Swift)来更改值?
【发布时间】:2015-08-27 18:32:07
【问题描述】:

是否可以根据触控板滚动/魔术鼠标“滚轮”滚动等的方向更改 Cocoa 中的值。

例如

var value = 0

func startsScrolling() {
    if direction == up {
        value += 5
    } else if direction == down {
        value -= 5
    }
}

这将是连续的,因此当您在触控板上向上滚动时,方向是向下的,因此每次手指向上移动时它会减 5 次,反之亦然。

感谢和抱歉糟糕的伪代码。

【问题讨论】:

    标签: macos swift


    【解决方案1】:

    您可以创建自定义窗口并覆盖 scrollWheel NSEvent。您可以检查 scrollingDeltaX 和 scrollingDeltaY 属性。

    class CustomWindow: NSWindow {
        override func scrollWheel(theEvent: NSEvent) {
            println( "Mouse Scroll scrollingDeltaX = \(theEvent.scrollingDeltaX)" )
            println( "Mouse Scroll scrollingDeltaY = \(Int(theEvent.scrollingDeltaY))" )
    
        }
    }
    

    如果您使用情节提要,则必须覆盖 viewController 的 scrollWheel NSEvent:

    import Cocoa
    
    class ViewController: NSViewController {
    
        @IBOutlet weak var strDeltaX: NSTextField!
        @IBOutlet weak var strDeltaY: NSTextField!
        @IBOutlet weak var strScrollingDeltaX: NSTextField!
        @IBOutlet weak var strScrollingDeltaY: NSTextField!
        @IBOutlet weak var strValueX: NSTextField!
        @IBOutlet weak var strValueY: NSTextField!
    
        var xValue:CGFloat = 0
        var yValue:CGFloat = 0
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
        override var representedObject: AnyObject? {
            didSet {
            }
        }
        override func scrollWheel(theEvent: NSEvent) {
            strDeltaX.stringValue = "deltaX: \(theEvent.deltaX)"
            strDeltaY.stringValue = "deltaY: \(theEvent.deltaY)"
            strScrollingDeltaX.stringValue = "scrollingDeltaX: \(theEvent.scrollingDeltaX)"
            strScrollingDeltaY.stringValue = "scrollingDeltaY: \(theEvent.scrollingDeltaY)"
    
            xValue += theEvent.scrollingDeltaX
            yValue += theEvent.scrollingDeltaY
            strValueX.stringValue = "xValue: \(xValue)"
            strValueY.stringValue = "yValue: \(yValue)"
        }
    }
    

    【讨论】:

      【解决方案2】:

      首先,您需要将滚动视图添加到您的 ViewController 并链接它。如果您不希望它显示,可以使其透明。如果您的 ViewController 上有按钮,则可以将其发送回去。我已经转换了代码fromobjective-c。给你更多的力量:)

          var pointNow: CGPoint?
      func scrollViewWillBeginDragging(scrollView: UIScrollView) {
           pointNow = scrollView.contentOffset
      }
      
      func scrollViewDidScroll(scrollView: UIScrollView) {
          if scrollView.contentOffset.y < pointNow!.y {
              println("down")
          }
          else {
              if scrollView.contentOffset.y > pointNow!.y {
                  println("up")
              }
          }
      }
      

      【讨论】:

      • 这个问题被标记为 OSX
      • 所以? OSX 项目也有滚动视图。 @LeoDabus
      • OS X 项目没有 UIScrollView,它们有 NSScrollView 但它们不一样。 NSScrollView 没有 contentOffset 属性。
      • 好的,谢谢@LeoDabus
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2022-08-19
      • 1970-01-01
      相关资源
      最近更新 更多