Nano Hash - криптовалюты, майнинг, программирование

Добавление распознавателя жестов в UIImage, а не в UIImageView

У меня есть UIImageView, чей «Режим просмотра» установлен на «Соотношение сторон» в Interface Builder. Я хочу добавить распознаватель жестов только к моему изображению внутри UIImageView. Чтобы уточнить, что я говорю:

У меня есть UIImageView, чьи bounds.size.width = 100; и bounds.size.height = 100;, и у меня есть UIImage, размер которого 100x50. Итак, когда я добавляю свой UIImage к моему UIImageView, существует несколько пробелов 25 сверху и 25 снизу. Но я не хочу распознавать нажатие пользователя, когда он нажимает на эти пробелы. Я просто хочу знать, когда пользователь нажал на UIImage.

Как я могу это сделать?


Ответы:


1

Поскольку UIImage простирается от NSObject, вы не можете добавить к нему UITapGestureRecognizer, вы должны добавить жест к самому UIImageView. Затем в любом из методов делегата UIGestureRecognizer:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;

or

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

получить местоположение касания в UIImageView. Затем, используя CGPoint location = [_gesture locationInView:yourImageView], получите точку касания, теперь получите кадр изображения, используя эта ссылка. Теперь проверьте, находится ли точка в кадре изображения или нет, используя:

bool CGRectContainsPoint ( CGRect rect, CGPoint point );

Это может помочь вам.

19.06.2015
  • Это полностью то, о чем я спрашивал. Спасибо. Вы многое для меня решили. 20.06.2015
  • Я сделал это с помощью - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer; 20.06.2015

  • 2

    Вы должны добавить распознаватель жестов в imageView. Что вы можете сделать, используя методы делегата распознавания жестов:

    - gestureRecognizerShouldBegin:
    //OR
    - gestureRecognizer:shouldReceiveTouch:
    

    Затем вы можете выяснить, где пользователь нажал в imageView, и вычислить, произошло ли касание внутри изображения в imageView или за его пределами.

    Вы можете сделать это, используя следующее:

    CGPoint tapPoint = [gestureRecognizer locationInView:imageView];
    // use tap point to compute if it lands inside the image.
    
    19.06.2015
  • Спасибо и вам. Но в другом ответе все части покрыты. Поэтому я принял другой. Данная ссылка о том, как рассчитать кадр изображения imageView и CGRectContainsPoint, включены в другой ответ. 20.06.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..