マウスのクリックを試しています。私はマウスの左クリックで元の値などを取得するなど、私は今右のマウスクリックを追加したいと思います。基本的な例をセットアップしました。マウスの右クリックが1つあれば、それは1つの機能を実行し、2つのマウスの右クリックがあれば、別の機能を実行します。問題は、2回のマウスクリックをすると明らかに2つのマウスを区別できないため、2回目のマウス機能を実行する前に1回のマウスクリック機能を起動することです。 私は多分、何らかの種類のタイマーを使用してクリック数を記録することを考えていました。しかし、私はちょうどタイマを何度も何度もやり直しているように見えるので、丸で囲まれてしまいます。私はある人が助けてくれることを望んでいる。ここで読んでいただきありがとうございますコードです。右クリックを読むクリック数
Xcodeの8スウィフト3マックOSXシエラませIOS .. NOT 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。今、コードは私がしたいことの多くを反映しています。私の唯一の問題は、メインウィンドウ内ではなく、すべてのマウス操作が 'myView'内でのみ起動されるようにすることです。私はそれが最初の応答者と関係があるかもしれないと思ったが、それはうまくいかないようだ。やはりどんな考えも認められるだろう。私が教えている悪いコードは許してください。
Xcodeの8スウィフト3マックOSXシエラませIOS .. NOT 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 私は今、ビューコントローラのサブクラスを更新しているので、マウスクリックは、今だけMYVIEWで作業しています。私はまだ 'func mouseDragged'に問題があります。私の達成する必要があるのは、私のビューの左下がx = 0、Y = 0です。私は変換を試みましたが、動作していません。誰かが私を導くかもしれないことを望みます。ここをクリックしてくれてありがとう、更新されたコードです。内部のマウスを定義するには
Xcodeの8スウィフト3マックOSXシエラませIOS .. NOT 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ははるかに簡単な方法です。必要に応じて 'func mouseDown(event:NSEvent)'をオーバーライドします。このメソッドでは、if event.clickCount == 2 {stuff} else {other stuff} 'を実行します。必要に応じて 'super.mouseDown(with:event)'を追加します。 – Moritz
なぜView Controllerではなくウィンドウをサブクラス化していますか? –
私はコードを生成して元の投稿に追加しました – oldman