2016-04-06 3 views
1

Ich habe ein Layout wie folgt. Bildansicht in einer Ansicht, die die Hälfte des View-Controllers (weiß) enthält. Die Bildansicht füllt den Container unter Berücksichtigung einiger Ränder oben und unten. Ich habe den Skalierungsmodus in der Bildansicht auf "aspect fit" eingestellt. All dies gibt mir den genauen visuellen Effekt, den ich möchte.So erkennen Sie richtig Taps auf UIImageView mit AspectFit Maßstabsmodus

enter image description here

Jedoch habe ich auch Gestenerkenner auf der Bildansicht installiert tippen, und ich möchte es Taps nur auf der Fläche zu erfassen, wo aktuelle Bild angezeigt wird (aufgrund Aspekt passt es dauert nur einen Teil der zur Verfügung stehenden Raum). Das Bild selbst wird dynamisch geändert, so dass ich nicht weiß, welches Seitenverhältnis es haben wird. Was wäre der einfachste Weg, dies zu erreichen?

Ich denke, ich würde Traililnig und führende Beschränkungen auf die Bildansicht loswerden müssen, aber was nun?

+1

Sie werden wollen [den Rahmen berechnen, dass das Bild in der Bildansicht einnimmt] (http://stackoverflow.com/a/35510271/2976878) und dann reagieren nur innerhalb dieses rect zu Armaturen. – Hamish

+0

Ja, berechnen, wenn der Wasserhahn im Bereich des Bildes ist, war meine erste Idee. Allerdings habe ich auf eine einfachere Lösung gerechnet, da dies ein recht häufiges Problem zu sein scheint. Aber wenn es keine bessere Option gibt ... – Wujo

Antwort

0

Zuerst finden Sie die Größe des Bildes und aktualisieren Sie Frame von ImageView. Stellen Sie die x- und y-Position entsprechend der Bildgröße und der Anforderung ein.

UIImageView *myImageView = [[UIImageView alloc]init]; 
UIImage *img = [UIImage imageNamed:@"draft"]; 

CGSize mySize = [img size]; 

CGRect newFrame=CGRectMake(0, 0, mySize.width, mySize.height); 
NSLog(@"height : %f width : %f",mySize.height,mySize.width); 

myImageView.frame = newFrame; 
myImageView.image = img; 
+0

nicht genau festlegen. Auf diese Weise passt das Bild nicht in den Container. Es ist jedoch ziemlich einfach, die richtige Größe zu berechnen, aber ich hatte gehofft, dass ich es vermeiden kann, den Rahmen programmatisch zu verändern. – Wujo

+1

müssen Sie den Rahmen aktualisieren. Es gibt keine andere Möglichkeit. Wenn Sie das Bild in der Mitte behalten möchten, verwenden Sie (self.view.frame.size.width/2) - (imageView.frame.size.width/2) als Wert von x und setzen Sie y entsprechend. – Lion

+0

Ok, danke. In diesem Fall werde ich eher berechnen, ob der Abgriff innerhalb des Bereichs des tatsächlichen Bildes ist und die nachlaufenden und führenden Ränder belassen. – Wujo

Verwandte Themen