Как добиться щелчка мышью на NSView с помощью CALayer? - PullRequest
4 голосов
/ 21 марта 2011

У меня есть пользовательское NSWindow без рамки в форме круга.Для этого я использую пользовательский NSView, который рисует закрашенный круг.

Щелчки мышью по прозрачному пикселю внутри прямоугольника содержимого окна идут прямо через окно, чтобы любое приложение оказалось позади него.,Клики внутри закрашенного круга перехватываются моим заявлением.Пока все хорошо.

Проблема в том, что со следующей строкой вышеупомянутое поведение изменяется, и все щелчки внутри прямоугольника содержимого окон перехватываются, прозрачный пиксель или нет:

[circleView setWantsLayer:YES];

Есть лиспособ сделать клики на прозрачных пикселях CALayer экземпляров, чтобы перейти от до окна / вида / слоя к приложению позади него?

По сути, это та же проблема, что описана ниже (толькочто решение работает не во всех случаях, потому что оно не поддерживает анимацию):

http://www.cocoabuilder.com/archive/cocoa/235281-clicking-through-nsview-with-calayers.html

Ответы [ 2 ]

0 голосов
/ 01 июля 2014

CAShapeLayer с CGPath будет работать, или вы можете создать CAShapeLayer как маску для слоя контента.

0 голосов
/ 03 февраля 2013

Я не совсем уверен, работает ли это на видах со слоем, но возможное решение состоит в том, чтобы переопределить - (NSView *)hitTest:(NSPoint)aPoint в вашем подклассе вида круга и проверить, находится ли aPoint внутри пути круга.Если он находится за пределами круга, возврат nil из этого метода должен привести к тому, что щелчок будет пройден.

...