проблема
у меня прозрачный NSView
на прозрачном NSWindow
. Метод drawRect:
представления отображает некоторое содержимое (NSImage
s, NSBezierPath
s и NSString
s) в представлении, но оставляет его части прозрачными.
Нажатие на области вида, которые были нарисованы, вызывает обычные методы обработки событий мыши (mouseDown:
и mouseUp:
).
Нажатие на прозрачные области дает фокус любому окну, находящемуся за моим прозрачным окном.
Я бы хотел, чтобы части прозрачной области можно было щелкать , чтобы при случайном щелчке между элементами, нарисованными на моем виде, окно не теряло фокус.
Решения уже предприняты
- Переопределение
NSView
hitTest:
метода. Обнаружено, что hitTest:
вызывается только при нажатии на непрозрачную область вида.
- Переопределение
NSView
метода opaqueAncestor
. Обнаружено, что это не вызывается при нажатии на любую часть представления.
- Заполнение частей прозрачной области с помощью
[NSColor clearColor]
в методе drawRect:
и почти прозрачным цветом, но не совсем прозрачным. Это не имело никакого эффекта.
- Экспериментировал с классом
NSTrackingArea
. Похоже, это добавляет поддержку только для методов mouseEntered:
, mouseExited:
, mouseMoved:
и cursorUpdate:
, not mouseUp:
и mouseDown:
.