Как сделать элемент пользовательского интерфейса добавленным через -addSublayer: отвечать на сенсорные события? - PullRequest
2 голосов
/ 13 ноября 2011

Ниже приведен код, который я использую для добавления UIButton в слой через -addSublayer:

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 Ответ

3 голосов
/ 24 января 2012

Вы не можете.Вместо этого вам придется добавить кнопку в качестве подпредставления.

Переадресация событий касания UIKit является функцией UIResponder, и CALayers не наследуют от UIResponder, поэтому, если вы не хотите реализовать обработку касаний из первых принципов,не путь.

Чтобы преобразовать слой градиента в представление, есть две опции:

1) Создайте новый подкласс UIView и переопределите его +(Class)layerClass метод для возврата CAGradientLayer.

2) Создайте обычный UIView и добавьте свой CAGradientLayer в качестве подслоя, затем добавьте свою кнопку в качестве подпредставления представления вместо непосредственного добавления его в CAGradientLayer.

...