У CALayer нет механизма UIControl.addTarget: обработку касания добавляют UIView через gesture recognizer либо используют UIButton/UIControl.
Как привязать селектор к объекту CALayer
У CALayer нет механизма UIControl.addTarget: обработку касания добавляют UIView через gesture recognizer либо используют UIButton/UIControl.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно выяснить, каким образом можно привязать метод‑селектор к слою (CALayer).
let containerView = UIView()
containerView.backgroundColor = .red
let containerLayer = containerView.layer
containerLayer.backgroundColor = UIColor.green.cgColor
containerView.backgroundColor = .red
print(containerView.layer.backgroundColor) // ?
self.addTarget(for: self, #selector(foo: 1))
Ответ
У CALayer нет механизма UIControl.addTarget: обработку касания добавляют UIView через gesture recognizer либо используют UIButton/UIControl.
Для обычного представления подходящий пример внутри контроллера:
let tap = UITapGestureRecognizer(target: self, action: #selector(foo(_:)))
containerView.addGestureRecognizer(tap)
@objc func foo(_ sender: UITapGestureRecognizer) {
// Реакция на касание представления.
}
Объявление метода должно находиться в теле класса, а создание recognizer — в методе настройки. Для UIImageView также потребуется включить userInteractionEnabled. #selector описывает сигнатуру метода, а не вызов с аргументом 1; произвольное значение передают через состояние или иной API. Строки изменения цвета не связывают слой с событиями касания.