web-dev-qa-db-fra.com

Comment vérifier une UIView placée à l'intérieur de la partie UIImage ou non sous iOS?

Selon mes besoins, je dois vérifier UIView sont placés à l'intérieur d'une partie UIImage ou non. Supposons que j'ai UIImage d'humain avec capuchon, je dois ici vérifier si ma vue est placée à l'intérieur de la partie capuchon ou non.

Pourriez-vous s'il vous plaît me guider pour atteindre l'exigence suivante.

Exemple:

      ---------------------------------
     |                                |
     |          UIImage               |
     |   --------------------------   |
     |  |   Image portion          |  |
     |  |              ------      |  |
     |  |             | view |     |  |
     |  |              ------      |  |
     |  |                          |  |
     |   --------------------------   |
     |                                |
     |                                |
     --------------------------------  
11
bAthi

Vous pouvez utiliser la méthode contains(_:) ou intersects(_:) de CGRect. Votre code ressemblera à quelque chose comme

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

Vous devez simplement vous assurer que les coordonnées de imagePortionFrame et view.frame sont exprimées à l'aide du même système de coordonnées. sinon, vous pouvez utiliser la méthode convert(_:to:)

Référence: 

3
Mario Iannotta

En fait, il est intégré depuis iOS 4 (pour UIViewContentModeScaleAspectFit):

@import AVFoundation;

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

Étant donné que les composants de la trame ne sont peut-être pas des nombres arrondis, envisagez de mettre l’appel en boucle.

CGRectIntegral(…)

voir https://nshipster.com/image-resizing/ pour plus d'informations.

0

Vous savez déjà comment vérifier que deux CGRect se chevauchent ou non. avec la réponse de @ Mario. 

La question est de savoir comment vous pouvez obtenir la taille de l'image à partir de l'imageView qui est 

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

Mais une dernière chose à laquelle vous devez faire attention concernant contains(_:) ou intersects(_:) of CGRect est que les deux doivent avoir le même superview. comme 

Main (UIView) -> UIImageView

et 

Main (UIView) -> UIView (à vérifier) ​​

Si cette condition ne s'applique pas à votre hiérarchie de vues, vous avez la possibilité de convertir rect en utilisant 

1) convertRect:fromView:Docs

2) convertRect:toViewDocs

J'espère que c'est utile 

0
Prashant Tukadiya
  • importer AVFoundation

  • Obtenir Rect Pour visualiser et convertir une image selon la taille de l'image, en utilisant AVMakeRect.

  • Vérifier que le nouveau rect contient un cadre UIView en utilisant la méthode contient du système de coordonnées

Code: 

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
 }

Remarque: Le code ci-dessus fonctionnera pour la propriété d'ajustement d'image de la vue d'image et Assurez-vous que l'imageView et la vue appartiennent à la même vue de dîner 

0
Jatin Kathrotiya