У меня есть UIImageView
, который я хочу иметь возможность изменять размеры и вращаться и т. Д.
Можно UIGestureRecognizer
ли добавить к UIImageView
?
Я хотел бы добавить повернуть и ущипнуть распознаватель, UIImageView
который будет создан во время выполнения.
Как добавить эти распознаватели?
userInteractionEnabled
все еще должен быть установлен в ДА / истина в Xcode 8 Objective-C / SwiftДа, UIGestureRecognizer может быть добавлен в UIImageView. Как указано в другом ответе, очень важно помнить, чтобы разрешить взаимодействие с пользователем в представлении изображения, установив его
userInteractionEnabled
свойство равнымYES
. UIImageView наследует от UIView, чье свойство взаимодействия с пользователем установленоYES
по умолчанию, однако свойство взаимодействия с пользователем UIImageView установленоNO
по умолчанию.Из документов UIImageView:
Во всяком случае, основная часть ответа. Вот пример того, как создать
UIImageView
с aUIPinchGestureRecognizer
, aUIRotationGestureRecognizer
и aUIPanGestureRecognizer
.Во-первых,
viewDidLoad
или другим способом по вашему выбору создайте представление изображения, присвойте ему изображение, рамку и включите взаимодействие с пользователем. Затем создайте три жеста следующим образом. Обязательно используйте их делегатское свойство (скорее всего, для себя). Для этого потребуется использовать несколько жестов одновременно.Вот три метода, которые будут вызываться при обнаружении жестов на вашем экране. Внутри них мы проверим текущее состояние жеста, и если оно находится в начальном или измененном состоянии,
UIGestureRecognizerState
мы прочтем свойство масштаба / вращения / перевода жеста, применим эти данные к аффинному преобразованию, применим аффинное преобразование к изображению. просмотреть, а затем сбросить масштаб жестов / поворот / перевод.Наконец, что очень важно, вам нужно использовать метод UIGestureRecognizerDelegate,
gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer
чтобы жесты работали одновременно. Если эти три жеста являются единственными тремя жестами, которым этот класс назначен в качестве их делегата, то вы можете просто вернуться,YES
как показано ниже. Однако, если у вас есть дополнительные жесты, которым этот класс назначен в качестве их делегата, вам может потребоваться добавить логику в этот метод, чтобы определить, какой это жест, прежде чем разрешить им всем работать вместе.Не забудьте убедиться, что ваш класс соответствует протоколу UIGestureRecognizerDelegate . Для этого убедитесь, что ваш интерфейс выглядит примерно так:
Если вы предпочитаете поиграть с кодом в рабочем примере проекта, созданный мной пример проекта, содержащий этот код, можно найти здесь.
источник
Swift 4.2
и когда постучал:
источник
Решение Swift 2.0
Вы создаете распознавание жестов касанием, сжиманием или проведением пальцем в той же усадьбе. Ниже я проведу вас через 4 шага, чтобы настроить ваш распознаватель и запустить его.
4 шага
1.) Унаследовать от
UIGestureRecognizerDelegate
, добавив его в подпись вашего класса.2.) Управление перетаскиванием с вашего изображения в viewController для создания IBOutlet:
3.) В ваш viewDidLoad добавьте следующий код:
4.) Создайте функцию, которая будет вызываться при нажатии на распознаватель жестов. (Вы можете исключить,
= nil
если вы выберете).Ваш окончательный код должен выглядеть примерно так:
источник
Я только что сделал это с swift4, добавив 3 жеста вместе в одном представлении
Вот мой пример кода
Любой вопрос, просто введите комментарий. Спасибо
источник
SWIFT 3 Пример
Нет необходимости в делегатах-жестах или других реализациях, где это необходимо.
источник
Вы также можете перетащить распознаватель жестов касанием к представлению изображения в
Storyboard
. Затем создайте действие поctrl + drag
коду.источник
Для любителей Blocks вы можете использовать ALActionBlocks, чтобы добавить действие жестов в блоке
источник