Это связано с тем, что Dock переопределяет любые изменения курсора. Что вам нужно сделать, это установить таймер, который многократно срабатывает, чтобы изменить курсор.
Сначала нужно создать метод, который позволяет изменять курсор, а затем установите customCursor
func changeCursor() {
/* Code here to create custom cursor */
customCursor.set()
}
Затем, когда вы готовы изменить курсор, вы должны звезда таймер и пусть он неоднократно срабатывала
//cursorTimer is an NSTimer object that you need to keep track of
self.cursorTimer = NSTimer.scheduledTimerWithTimeInterval(0.001, target:self, selector: "changeCursor", userInfo: nil, repeats: true)
И когда вы закончите, вы можете аннулировать таймер
self.cursorTimer.invalidate()
Кроме того, это будет работать, только если ваше приложение больше всего. Если кто-то нажмет команду + вкладку, ваше приложение больше не сможет установить курсор. Чтобы ваше приложение могло управлять курсором, в то время как в фоновом режиме вы должны использовать частные API, поэтому нет Mac App Store.
В вашем заголовке мостиком вы можете добавить следующий код
typedef int CGSConnectionID;
CGError CGSSetConnectionProperty(CGSConnectionID cid, CGSConnectionID targetCID, CFStringRef key, CFTypeRef value);
int _CGSDefaultConnection();
И тогда в вашем AppDelegate вы можете добавить этот код в applicationDidFinishLaunching
let propertyString = CFStringCreateWithCString(kCFAllocatorDefault, "SetsCursorInBackground", 0)
CGSSetConnectionProperty(_CGSDefaultConnection(), _CGSDefaultConnection(), propertyString, kCFBooleanTrue)
вы нашли способ сделать это? –
Как именно курсор изменился в вашем коде, в настоящее время? В моем случае реализация метода 'resetCursorRects' в подклассе' NSView' (для вызова 'addCursorRect: cursor:' на 'ограничениях ') была достаточной; форма курсора восстанавливается. –