如何通过-addSublayer添加UI元素:响应触摸事件?

时间:2011-11-13 08:41:55

标签: ios cocoa-touch uibutton core-animation

以下是我用来通过-addSublayer将UIButton添加到图层的代码:

CAGradientLayer * tile = [[tile alloc] init];      

UIButton *XImageButton = [[UIButton alloc]init];
 XImageButton.frame= CGRectMake(kXButtonlocX, kXButtonlocY, kXButtonHeight,kXButtonWidth );

[XImageButton setTitle:@"xbutton" forState:UIControlStateNormal];
[XImageButton addTarget:nil action:@selector(XbuttonTouchEvent)    
forControlEvents:UIControlEventTouchUpInside];

[tile addSublayer:XImageButton.layer]; 

XImageButton没有响应触摸事件。我该如何解决这个问题以便它做出响应呢?

1 个答案:

答案 0 :(得分:3)

你做不到。您必须将该按钮添加为子视图。

UIKit触摸事件转发是UIResponder的一项功能,CALayers不会从UIResponder继承,所以除非您想从第一原则实施触摸处理,否则这不是可行的方法。

要将渐变图层转换为视图,有两个选项:

1)创建一个新的UIView子类并覆盖其+(Class)layerClass方法以返回CAGradientLayer。

2)创建一个常规UIView并将您的CAGradientLayer添加为子图层,然后将您的按钮添加为视图的子视图,而不是直接将其添加到CAGradientLayer。