Entsprechend meiner Anforderung muss ich überprüfen, dass UIView
innerhalb von UIImage
-Teil platziert ist oder nicht. Angenommen, ich habe UIImage
des Menschen mit einer Kappe.
Könnten Sie mich bitte anleiten, um folgende Anforderung zu erfüllen.
---------------------------------
| |
| UIImage |
| -------------------------- |
| | Image portion | |
| | ------ | |
| | | view | | |
| | ------ | |
| | | |
| -------------------------- |
| |
| |
--------------------------------
Sie können die Methode contains(_:)
oder intersects(_:)
von CGRect
..__ verwenden. Ihr Code sieht ungefähr so aus
let imagePortionFrame = CGRect(....) // some rect based on your image view
imagePortionFrame.contains(view.frame)
Sie müssen nur sicherstellen, dass die Koordinaten von imagePortionFrame
und view.frame
mit demselben Koordinatensystem ausgedrückt werden. Wenn nicht, können Sie die Methode convert(_:to:)
verwenden.
Referenz:
Tatsächlich ist es seit iOS 4 integriert (für UIViewContentModeScaleAspectFit):
@import AVFoundation;
AVMakeRectWithAspectRatioInsideRect(imageView.image.size, imageView.bounds);
Da Rahmenkomponenten möglicherweise keine runden Zahlen sind, ziehen Sie in Betracht, den Anruf zu umgehen
CGRectIntegral(…)
siehe https://nshipster.com/image-resizing/ für weitere Informationen.
Sie haben bereits die Idee, wie Sie überprüfen können, ob zwei CGRect sich überschneiden oder nicht. mit @ Marios Antwort.
Die Frage ist, wie Sie die Bildgröße von imageView erhalten können
AVMakeRect(aspectRatio: myImage.size, insideRect: sampleImageView.frame)
Aber noch etwas, was Sie bei contains(_:)
oder intersects(_:)
von CGRect
beachten müssen, ist, dass beide dasselbe Superview haben. mögen
Main (UIView) -> UIImageView
und
Main (UIView) -> UIView (die überprüft werden müssen)
Wenn diese Bedingung nicht für Ihre Ansichtshierarchie gilt, haben Sie Optionen zum Konvertieren von rect mit
1) convertRect:fromView:
Dokumente
2) convertRect:toView
Dokumente
Ich hoffe es ist hilfreich
aVFoundation importieren
Get Rect Für Bildansicht und -konvertierung mit der Bildgröße mit AVMakeRect.
Prüfen Sie, ob das neue Rechteck den UIView-Frame enthält, und enthält die Methode Des Koordinatensystems
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
}
Hinweis: Der obige Code funktioniert für die Seitenanpassung der Bildansicht. Stellen Sie sicher, dass imageView und view beide zu derselben Supper-Ansicht gehören. Andernfalls müssen Sie rect konvertieren