i new swift , xcode , have next problem:
i have simple cocoa swift application 1 counter (label
).
how handle mouse clicks in mac (in applications) , display in label
?
i use xcode 7.3.1.
update 1. have alredy found it's monitoring events , addglobalmonitorforeventsmatchingmask:handler:
function in cocoa, i'm not sure i'm on right way.
you correct using addglobalmonitorforeventsmatchingmask:handler:
a simple example might this:
appdelegate.swift
class appdelegate: nsobject, nsapplicationdelegate { @iboutlet weak var window: nswindow! @iboutlet var textlabel : nstextfield! var eventhandler : globaleventmonitor? var gecount : int = 0 func applicationdidfinishlaunching(anotification: nsnotification) { eventhandler = globaleventmonitor(mask: .leftmousedownmask, handler: { (mouseevent: nsevent?) in self.gecount += 1 self.textlabel.stringvalue = "global event monitor: \(self.gecount)" }) eventhandler?.start() } }
globaleventmonitor.swift
public class globaleventmonitor { private var monitor: anyobject? private let mask: nseventmask private let handler: nsevent? -> () public init(mask: nseventmask, handler: nsevent? -> ()) { self.mask = mask self.handler = handler } deinit { stop() } public func start() { monitor = nsevent.addglobalmonitorforeventsmatchingmask(mask, handler: handler) } public func stop() { if monitor != nil { nsevent.removemonitor(monitor!) monitor = nil } } }
events delivered asynchronously app , can observe event; cannot modify or otherwise prevent event being delivered original target application. key-related events may monitored if accessibility enabled or if application trusted accessibility access (see axisprocesstrusted).
note handler not called events sent own application.
in order capture events within app can either use addlocalmonitorforeventsmatchingmask:handler:
or nsclickgesturerecognizer
object.
if wanted combine global event monitor gesture recognizer object it's matter of implementing both objects class.
Comments
Post a Comment