web-dev-qa-db-de.com

Wie kann ich überprüfen, ob ein UIView in einem UIImage-Teil oder nicht in iOS platziert ist?

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.

Beispiel:

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

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: 

3
Mario Iannotta

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.

0

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:toViewDokumente

Ich hoffe es ist hilfreich 

0
  • 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 

0