【问题标题】:OS X Cocoa - how can one detect trackpad zoom gestures?OS X Cocoa - 如何检测触控板缩放手势?
【发布时间】:2015-02-05 04:39:56
【问题描述】:

如何检测 MacBook 触控板上的两个手指缩放手势? (在选定的 NSView 内)

【问题讨论】:

    标签: objective-c macos cocoa trackpad


    【解决方案1】:

    一个简单的快速解决方案:

    var zoom:CGFloat = 0
    override func magnify(with event: NSEvent) {
        super.magnify(with: event)
        if(event.phase == .changed){
            zoom += event.deltaZ
        }else if(event.phase == .began){
            zoom = 0//reset
        }else if(event.phase == .ended){
            //Swift.print("zoom: " + "\(zoom)")
            var dir:Int
            if(zoom < -100){
                Swift.print("zoom out")
                dir = 1
            }else if(zoom > 100){
                Swift.print("zoom in")
                dir = -1
            }else{
                Swift.print("no zoom")
                dir = 0
            }
        }
    }
    

    它检测是否发生了缩放手势 +-100 deltaZ (又名捏合缩放)

    有关此方法的更多信息和研究:
    http://eon.codes/blog/2016/02/10/Gesture-research/

    【讨论】:

    • 如何在 swift 3.0 中对按钮操作事件进行 func 放大(带有事件:NSEvent)调用
    • 这里为什么需要超级调用?
    • @Bohdan Savych 嗯。我不认为这是代表团。如果您覆盖,转发事件是否明智?
    【解决方案2】:

    有用于捏合手势的事件类型 (NSEventTypeMagnify),以及用于处理此类事件的 NSResponder 方法 (-magnifyWithEvent:)。 Cocoa 在这方面与 Cocoa Touch 有点不同。在桌面上,您通常让操作系统为您解释手势,并且您响应手势的含义而不是尝试识别手势本身。

    【讨论】:

      【解决方案3】:

      更新的 Swift 解决方案

      看起来 eonist 的答案有点过时,因为 deltaZ 似乎已被弃用(我使用 macOS 10.13.6 aka High Sierra,Xcode 9.4.1)。 解决方案是针对 NSScrollView。

      override func magnify(with event: NSEvent) {
          if(event.phase == .changed){
              onZoomChanged(magnification: self.magnification * (1 + event.magnification))
          }
      }
      
      func onZoomChanged(magnification: CGFloat) {
          allowsMagnification = true
          let centerPos =  documentVisibleRect.midPoint // midPoint is a simple CGRect extension
          setMagnification(magnification, centeredAt: centerPos)
      }
      

      【讨论】:

      • 变化很大。我的答案在常规 NSView 中有效,还添加了更多信息✌️
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 2016-03-25
      • 2016-01-27
      • 1970-01-01
      相关资源
      最近更新 更多