gpt4 book ai didi

objective-c - NSView 上以椭圆为内容的鼠标事件

转载 作者:行者123 更新时间:2023-12-03 17:32:23 25 4
gpt4 key购买 nike

我创建了一个 NSView 的子类,它绘制了一个红色实心圆圈,我想拦截仅进入红色圆圈而不是透明像素的鼠标单击。我认为我必须使用 hitTest: 函数,但我不确定这是正确的方法。

(我的 View 有 AcceptFirstMouseMouseDown 实现,isOpaque 返回 NO。)

我该怎么做才能获得这种行为?

最佳答案

使用hitTest:withEvent:在这种情况下不会对您有帮助,因为如果该点位于 View 框架内的任何位置,则该点将通过此测试。
假设您至少知道圆的中心位置(可能与 View 位置相同)以及圆的半径,也许(相当)简单的计算可​​以满足您的要求。现在的问题是确定圆心和您的点之间的距离是否小于半径。

然后你可以轻松编写一个函数,例如:

+(BOOL)ispoint:(CGPoint)aPoint inCircleWithCenter:(CGPoint)aCenterPoint
radius:(CGFloat)aRadius {
CGFloat squareDistance = (aCenter.x - aPoint.x) * (aCenter.x - aPoint.x) +
(aCenter.y - aPoint.y) * (aCenter.y - aPoint.y);
return squareDistance <= aRadius * aRadius;
}

我们实际上可以讨论<= ,这可能只是 < ...这是一个类方法,您可以为您的自定义子类配备。或者写一个函数:

BOOL CGPointInCircle(CGPoint aPoint, CGPoint aCenter, CGFloat aRadius) {
CGFloat squareDistance = (aCenter.x - aPoint.x) * (aCenter.x - aPoint.x) +
(aCenter.y - aPoint.y) * (aCenter.y - aPoint.y);
return squareDistance <= aRadius * aRadius;
}

关于objective-c - NSView 上以椭圆为内容的鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com