gpt4 book ai didi

iOS CALayer 和 TapGestureRecognizer

转载 作者:行者123 更新时间:2023-12-02 11:36:40 26 4
gpt4 key购买 nike

我正在 iOS 6.1 上为 iPad 开发一个应用程序。我的 CALayerTapGestureRecognizer 有问题。

我有 7 个 CALayers 形成彩虹(每一层都是一种颜色)。每个层都是使用从 CGMutablePathRef 生成的 CAShapeLayer 构建的。一切正常。所有图层都绘制在屏幕上,我可以看到美丽的彩虹。

现在我想检测单一颜色/图层上方的点击。我尝试这样:

- (void)tap:(UITapGestureRecognizer*)recognizer
{
//I've had the tapGestureRecognizer to rainbowView (that is an UIView) in viewDidLoad
CGLayer* tappedLayer = [rainbowView.layer.presentationlayer hitTest:[recognizer locationInView:rainbowView];

if (tappedLayer == purpleLayer) //for example
NSLog(@"PURPLE!");
}

我不明白为什么这段代码不起作用!我已经在这里红色了其他主题:所有主题都建议使用 hitTest: 方法来解决此类问题。但就我而言,我无法获得想要的结果。谁能帮我?谢谢!!

编辑:

以下是创建路径和图层的代码:

- (void)viewDidLoad
{
//Other layers
...
...
//Purple Arc
purplePath = CGPathCreateMutable();
CGPathMoveToPoint(purplePath, NULL, 150, 400);
CGPathAddCurveToPoint(purplePath, NULL, 150, 162, 550, 162, 550, 400);
purpletrack = [CAShapeLayer layer];
purpletrack.path = purplePath;
purpletrack.strokeColor = [UIColor colorWithRed:134.0/255.0f green:50.0/255.0f blue:140.0/255.0f alpha:1.0].CGColor;
purpletrack.fillColor = nil;
purpletrack.lineWidth = 25.0;
[rainbowView.layer insertSublayer:purpletrack above:bluetrack];
}

这是我解决这个问题的第一个方法。而且触摸不起作用。

我还尝试创建一个 RainbowView 类,其中使用 UIBezierPathsdrawRect 方法中绘制彩虹。然后我按照http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/BezierPaths/BezierPaths.html中的“在路径上进行命中检测”部分进行操作。在本例中,问题在于传递给方法的路径变量。我尝试将传递的 UIBezierPathRainbowView 中的路径进行比较,但没有结果。

我可以尝试创建曲线而不是路径。在这种情况下,图形可能没有填充部分,并且触摸区域仅限于笔画。但是我怎样才能识别曲线上的触摸呢?

我对所有这些东西都很困惑! :D

最佳答案

您面临的问题是,您在 HitTest 时再次检查图层的框架/边界,而不是检查形状图层的路径。

如果您的路径已满,您应该使用 CGPathContainsPoint()以确定水龙头是否在路径内。如果您的路径没有被填充而是被抚平,我建议您引用 Ole Begemann's article about CGPath Hit Testing .

为了使代码更简洁,您可以在自己的子类中进行 HitTest 。另外,除非该层在 HitTest 时具有动画效果,否则使用presentationLayer 是没有意义的。

关于iOS CALayer 和 TapGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14673657/

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