Как привязать селектор к объекту CALayer

У CALayer нет механизма UIControl.addTarget: обработку касания добавляют UIView через gesture recognizer либо используют UIButton/UIControl.

Короткий ответ

Что ответить на собеседовании

У 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. Строки изменения цвета не связывают слой с событиями касания.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее