Ich habe mit Mausklicks experimentiert. Ich bin ok mit den linken Mausklicks, die rohe Werte usw. erhalten. Ich möchte jetzt rechte Mausklicks hinzufügen. Ich habe ein grundlegendes Beispiel eingerichtet. Was ich erreichen möchte, wenn es einen Mausklick mit der rechten Maustaste gibt, führt es eine Funktion aus, und wenn es zwei Mausklicks gibt, führt es eine andere Funktion aus. Das Problem ist, wenn Sie zwei Mausklicks machen, kann es offensichtlich nicht zwischen den beiden unterscheiden und so die eine Mausklick-Funktion auslösen, bevor die zweite Mausfunktion ausgeführt wird. Ich dachte daran, vielleicht einen Timer zu verwenden, um die Anzahl der Klicks zu erfassen. Aber ich gehe im Kreis herum, als ob ich die Timer immer und immer wieder starten würde. Ich hoffe, jemand könnte helfen. Danke fürs Lesen hier ist der Code.Lesen der rechten Mausklicks Anzahl der Klicks
Xcode 8 Swift 3 Mac OSX Sierra NICHT IOS .. NICHT IOS
import Cocoa
class MainWindowController: NSWindowController {
@IBOutlet weak var MyView: NSView!
override func windowDidLoad() {
super.windowDidLoad()
//Initialize mouse for Right Click numberOfClicksRequired = 1
let recogRightClick1 = NSClickGestureRecognizer(target: self, action: #selector(oneMouseClick))
recogRightClick1.buttonMask = 0x2
recogRightClick1.numberOfClicksRequired = 1
MyView.addGestureRecognizer(recogRightClick1)
//Initialize mouse for Right ClicknumberOfClicksRequired = 2
let recogRightClick2 = NSClickGestureRecognizer(target: self, action: #selector(twoMouseClick(myrec:myRightClick:)))
recogRightClick2.buttonMask = 0x2
recogRightClick2.numberOfClicksRequired = 2
MyView.addGestureRecognizer(recogRightClick2)
}//EO Overide
func oneMouseClick(myrec: NSPanGestureRecognizer,myRightClick:NSClickGestureRecognizer){
let rightClick = myRightClick.state.rawValue
print("oneMouseClick",rightClick)
}
func twoMouseClick(myrec: NSPanGestureRecognizer,myRightClick:NSClickGestureRecognizer){
let rightClick = myRightClick.state.rawValue
print("twoMouseClick",rightClick)
}
}//EnD oF thE wORld
UPDATE
ich wieder haben Sie den Code nach den Anweisungen gegeben erzeugt. Jetzt reflektiert der Code mehr von dem, was ich tun wollte. Mein einziges Problem ist, dass ich möchte, dass alle Mausoperationen nur in 'myView' statt im Hauptfenster ausgelöst werden. Ich dachte, es könnte etwas mit Ersthelfer zu tun haben, aber das scheint nicht zu funktionieren. Wieder würde jeder Gedanke geschätzt werden. Bitte entschuldigen Sie jeden schlechten Code, den ich selbst unterrichtet habe.
Xcode 8 Swift 3 Mac OSX Sierra NICHT IOS .. NICHT IOS
import Cocoa
class MainWindowController: NSWindowController {
@IBOutlet weak var myView: NSView!
var mouseX:CGFloat = 0
var mouseY:CGFloat = 0
override func windowDidLoad() {
myView.window?.becomeFirstResponder()
myView.window?.acceptsMouseMovedEvents = true
super.windowDidLoad()
myView.wantsLayer = true
myView.layer?.backgroundColor = CGColor(red: 0.05, green: 0.57, blue: 0.80, alpha: 0.6)
NSEvent.addLocalMonitorForEvents(matching:.leftMouseDown){
self.mouseEventFunction(data: 1)
return $0
}
NSEvent.addLocalMonitorForEvents(matching:.leftMouseUp){
self.mouseEventFunction(data:2)
return $0
}
NSEvent.addLocalMonitorForEvents(matching:.rightMouseDown){
self.mouseEventFunction(data: 3)
return $0
}
NSEvent.addLocalMonitorForEvents(matching:.rightMouseUp){
self.mouseEventFunction(data: 4)
return $0
}
NSEvent.addLocalMonitorForEvents(matching:.mouseMoved) {
self.mouseX = NSEvent.mouseLocation().x
self.mouseY = NSEvent.mouseLocation().y
return $0 }
}//EO Overide
func mouseEventFunction (data: Int){
switch data{
case 1 :
print("LeftMouseDown")
case 2 :
print("LeftMouseUp")
case 3 :
print("RightMouseDown")
case 3 :
print("RightMouseUP")
default: break
}
if data == 1 {print("mouseX",mouseX,"mouseY",mouseY)}
}//eo mouseEvent
}//EnD oF thE wORld
UPDATE 2 Ich habe jetzt aktualisiert Subklassen, welche die View-Controller, so dass die Mausklicks sind jetzt nur in myView arbeiten. Ich habe immer noch Probleme mit 'func mouseDragged' Was ich erreichen muss, ist die linke untere Seite meiner Ansicht ist x = 0 und Y = 0. Ich hatte einen Versuch mit der Konvertierung, aber das funktioniert nicht. Ich hoffe, jemand könnte mich führen. Danke für das Lesen hier ist der aktualisierte Code.
Xcode 8 Swift 3 Mac OSX Sierra NICHT IOS .. NICHT IOS
import Cocoa
class MainWindowController: NSWindowController {
@IBOutlet weak var myView: NSView!
override func windowDidLoad() {
myView.window?.becomeFirstResponder()
myView.window?.acceptsMouseMovedEvents = true
window?.contentView?.addSubview(myView)
super.windowDidLoad()
}//EO Overide
}//EnD oF thE wORld
class testView: NSView {
override func draw(_ dirtyRect: NSRect) {
let backgroundColor = NSColor.lightGray
backgroundColor.set()
NSBezierPath.fill(bounds)
}
override func mouseDragged(with theEvent: NSEvent) {
let myLocationInWindow = theEvent.locationInWindow
let location = convert(myLocationInWindow, to: self)
Swift.print("myLocationInWindow",myLocationInWindow,"location",location)
}
override func mouseDown(with theEvent: NSEvent) {
Swift.print("mouseDown")
}
override func mouseUp(with theEvent: NSEvent) {
Swift.print("mouseUp clickCount: \(theEvent.clickCount)")
}
}//eo testView
Ther e ist ein viel, viel einfacherer Weg: überschreiben Sie 'func mouseDown (mit event: NSEvent)' wo nötig, und machen Sie in dieser Methode 'if event.clickCount == 2 {stuff} else {sonstiges}}. Dann füge 'super.mouseDown (mit: event)' bei Bedarf hinzu. – Moritz
Warum erstellen Sie das Fenster anstelle des View-Controllers? –
Ich habe Code generiert und zum ursprünglichen Beitrag hinzugefügt – oldman