【问题标题】:How can I make a CALayer clickable?如何使 CALayer 可点击?
【发布时间】:2012-11-29 16:12:11
【问题描述】:

我正在使用 CATransformLayer 创建一堆图层并使用 3D 透视为它们制作动画以制作一个立方体(类似这样)

将 UIButton 添加到该立方体的一侧的最佳方法是什么?我希望能够接收事件并从 IBOutlet 访问按钮。

我尝试在我的 XIB 中创建一个带有按钮的 UIView,并将其图层插入 CATransformLayer,它显示但按钮不可点击。我有一种感觉,这是因为 UIKit 处理的是 Touch/events 方面的事情,这些层只是用来绘制的。

(顺便说一句,我见过this question,但觉得这个案子的不同之处足以保证新的帖子)

【问题讨论】:

    标签: ios uibutton core-animation calayer catransformlayer


    【解决方案1】:

    托管所有图层的根视图正在获取图层树的所有内容

    你必须在里面做

    CALayer *touchedLayer = [self.rootLayer hitTest:touches.anyObject.locationInWindow];
    

    来自评论:如果您想在动画期间检查,请询问您的表示层:

    CALayer *touchedLayer = [self.rootLayer.presentationLayer hitTest:touches.anyObject.locationInWindow];
    

    【讨论】:

    • 但是如果你有活动的动画,你必须将 hitTest 消息发送到你视图的根层的表示层。在您的示例中,如果视图的层是 rootLayer,您会将 hitTest 消息发送到 self.rootLayer.presentationLayer
    【解决方案2】:

    感谢 Daij 的提示,这是我的解决方案 - 感谢任何 cmets/改进

    - (IBAction)viewTapped:(UITapGestureRecognizer *)sender
    {
        CGPoint location = [sender locationInView:sender.view];
        CALayer *layer = [sender.view.layer hitTest:location];
    
        BOOL contains = [self.btnPlay.layer.sublayers containsObject:layer];
        if(contains)
        {
            [self.btnPlay sendActionsForControlEvents:UIControlEventTouchUpInside];
    
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 2019-08-05
      • 2016-02-13
      • 2014-09-12
      相关资源
      最近更新 更多