Как проверить UIView, размещенный внутри части UIImage или нет в iOS? - PullRequest
0 голосов
/ 04 декабря 2018

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

Не могли бы вы помочь мне выполнить следующее требование.

Пример:

      ---------------------------------
     |                                |
     |          UIImage               |
     |   --------------------------   |
     |  |   Image portion          |  |
     |  |              ------      |  |
     |  |             | view |     |  |
     |  |              ------      |  |
     |  |                          |  |
     |   --------------------------   |
     |                                |
     |                                |
     --------------------------------  

Ответы [ 4 ]

0 голосов
/ 10 декабря 2018

У вас уже есть идея, как проверить, что два CGRect перекрываются или нет.с ответом @ Марио.

Вопрос в том, как вы можете получить размер изображения из imageView, равный

AVMakeRect(aspectRatio: myImage.size, insideRect: sampleImageView.frame)

Но еще одна вещь, о которой вам нужно позаботиться о contains(_:) или intersects(_:) из CGRect, заключается в том, что оба должны иметь одно и то же суперпредставление .например

Main (UIView) -> UIImageView

и

Main (UIView) -> UIView (необходимо проверить)

Если это условие не применяется к иерархии представлений, у вас есть варианты для преобразования прямоугольника с использованием

1) convertRect:fromView: Документов

2) convertRect:toView Документы

Надеюсь, что это полезно

0 голосов
/ 06 декабря 2018
  • import AVFoundation

  • Получить Rect для изображения Просмотр и преобразование прямоугольника в соответствии с размером изображения с помощью AVMakeRect.

  • Проверьте новый прямоугольник, содержащий фрейм UIView, используя метод содержит систему координат

Код:

import UIKit
import AVFoundation

func containViewInSideImage(imgView:UIImageView,innerView:UIView) -> Bool  {
        let size = imgView.image?.size  // size of image
        let imageRect = AVMakeRect(aspectRatio: size!, insideRect: imgView.frame)  // rect of image portion
        return imageRect.contains(innerView.frame)  // check view is inside image rect
 }

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

0 голосов
/ 07 декабря 2018

На самом деле, он встроен начиная с iOS 4 (для UIViewContentModeScaleAspectFit):

@import AVFoundation;

AVMakeRectWithAspectRatioInsideRect(imageView.image.size, imageView.bounds);

Поскольку компоненты кадра могут быть не круглыми числами, рассмотрите возможность упаковки вызова на

CGRectIntegral(…)

см. https://nshipster.com/image-resizing/ для получения дополнительной информации.

0 голосов
/ 05 декабря 2018

Вы можете использовать метод contains(_:) или intersects(_:) из CGRect.Ваш код будет выглядеть примерно так:

let imagePortionFrame = CGRect(....) // some rect based on your image view imagePortionFrame.contains(view.frame)

Вам просто нужно убедиться, что координаты imagePortionFrame и view.frame выражены с использованием одной и той же системы координат;если нет, вы можете использовать метод convert(_:to:)

Ссылка:

...