【问题标题】:Is there hitTest:(CGPoint) in CAShapeLayer?CAShapeLayer 中有 hitTest:(CGPoint) 吗?
【发布时间】:2010-12-16 14:13:17
【问题描述】:

我在一个视图中有多个 CAShapeLayers,我想拖动它。(形状不规则)请给出一些建议。

【问题讨论】:

  • 由于 CAShapeLayer 继承自 CALayer,您应该可以使用 hitTest 获取它们。
  • 嗨,Alec,我无法检测到测试,我正在做的是在触摸 CAShapelayer 时没有在 touchBegans 触发事件:withEvent: 在 CAshapelayer 的子类中。

标签: iphone ipad calayer


【解决方案1】:

CALayer 及其子类不是响应者链的一部分,它们也不是来自UIResponder。因此,touchesBegan:withEvent: 等将永远不会在任何CALayer 子类上调用。您需要检测对层层次结构中托管UIViews 之一的触摸。然后,您在触摸处理程序中使用hitTest: 来检测触摸了哪一层。

如果你创建一个UIView 子类,并使用CAShapeLayer 作为它的支持层,你会更容易,如下所示:

@implementation MyShapeView

- (CALayer *)layerClass {
  return [CAShapeLayer class];
}

@end

然后,将自定义视图的实例作为子视图添加到主视图。之后,您可以使用UIResponder 方法,或者更好的是UIGestureRecognizer 来处理拖动。如果您可以针对 iOS 3.2 或更高版本,我强烈建议您使用手势识别器。它们使事件处理更加简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多