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.
---------------------------------
| |
| UIImage |
| -------------------------- |
| | Image portion | |
| | ------ | |
| | | view | | |
| | ------ | |
| | | |
| -------------------------- |
| |
| |
--------------------------------
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:
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.
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:toView
Docs
J'espère que c'est utile
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