gpt4 book ai didi

objective-c - UIBezierPath 包含点 : don't work correctly?(更新 : touch location in superview how to handle?)

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:44 28 4
gpt4 key购买 nike

所以我有 2 个 UIViews 女巫可以绘制 bezierpath 然后返回路径。然后我需要检查路径是否包含我在 [path containsPoint:currentObject.position] 的帮助下执行此操作的点,它适用于其中一个 View ,但不适用于另一个 View 。一个 View 在 iPhone 的上半部分,另一个 View 在下半部分。最下面那个不行我试过切换 View ,还是一样的问题,最下面那个不行。

这是一些代码:

在主视图 Controller 中:

-(void)didEndPath:(UIBezierPath *)path DrawView:(DrawView *)draw {
if ([path containsPoint:currentObject.position]) {
//do stuff
}
}

在 drawview touches 结束时我这样做:

[self.delegate didEndPath:currentPath DrawView:self];

为什么不行,会不会是view除了self.view还有其他的origin?我该如何解决?

编辑:

好的,所以我找到了问题,但没有找到解决方案。

如果我从此更改 UIView 中的触摸方法:startPoint = [touch locationInView:self];到这个startPoint = [touch locationInView:self.superview];然后它正确读取触摸但我的路径不会绘制。问题仍然只是底部的 uiview。那么我怎样才能改变它返回一个在 superview 中带有触摸位置的路径,但在它自己中绘制它?

最佳答案

查看文档:

A point is not considered to be enclosed by the path if it is inside an open subpath,   
regardless of whether that area would be painted during a fill operation. Therefore, to
determine mouse hits on open paths, you must create a copy of the path object and
explicitly close any subpaths (using the closePath method) before calling this method.

我的猜测是您打开了一个子路径,因此 containsPoint 返回 NO。

关于objective-c - UIBezierPath 包含点 : don't work correctly?(更新 : touch location in superview how to handle?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13787971/

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