Допустим, у меня есть плавающий круговой файл без полей NSWindow
.
Он круглый, потому что в представлении содержимого просто нарисован красный кружок.
Это представление содержимого должно иметь поддержку слоев ([contentView setWantsLayer:YES]
), потому что я применяю к нему CoreAnimations, например, анимированное масштабирование.
Обычно интерактивная область NSWindow определяется прозрачностью пикселей представления содержимого. Однако, как только представление содержимого NSWindow становится многослойным, прозрачные области, к сожалению, также будут получать щелчки.
В моем случае это серьезная проблема, потому что я хочу получать клики только в пределах радиуса. Но теперь щелчок внутри прямоугольника окна, но за пределами радиуса круга, активирует окно (и, следовательно, все приложение), чего не должно быть. Также окно можно перетаскивать через угол его представления содержимого.
Моя первоначальная мысль заключалась в том, чтобы реализовать [NSWindow sendEvent:]
в подклассе и проверить, был ли щелчок выполнен в пределах радиуса, используя [theEvent locationInWindow]
. Я подумал, что могу просто отбросить событие, если оно выходит за пределы радиуса, не вызывая тогда [super sendEvent:theEvent]
. Однако это не сработало: я заметил, что mouseDown :; метод окна вызывается еще до sendEvent :; метод.
Я много искал, но единственная идея, которую я нашел, заключалась в том, чтобы иметь прокси, например NSWindow без поддержки уровня, поверх окна, который условно делегирует щелчки, но это привело к непредсказуемому поведению пользовательского интерфейса.
Вы, ребята, знаете, как это решить?
NSApplication
и реализации-sendEvent:
переопределения? - person indragie   schedule 14.03.2014[super sendEvent:]
в подклассе NSApplication, окно продолжает перемещаться с помощью перетаскивания мышью. Кроме того, перезапись[NSApplication postEvent:]
не работает. - person Raffael   schedule 14.03.2014