2010-07-23 7 views
5

Ich versuche, ein kreisförmiges Bild auf einer iPhone-Ansicht zu platzieren und dann Taps innerhalb des Kreises, aber nicht außerhalb davon zu konsumieren. Das Problem, auf das ich stoße, ist, dass ich, wenn ich ein UIImageView in der Bildschirmansicht in Interface Builder platziere, scheinbar auf eine rechteckige Form beschränkt bin. Ich habe versucht, ein Bild eines Kreises mit dem Bereich außerhalb des linken Kreises als transparent zu verwenden, aber das Bild ist insgesamt immer noch rechteckig. Wenn es auf einem UIImageView platziert wird und angeschlossen wird, um Tap-Gesten zu erkennen, nimmt es immer noch die Taps außerhalb des Kreises auf .Wie kann die Erkennung von iPhone-TAP-Gesten auf ein kreisförmiges Bild beschränkt werden?

Das Bild unten zeigt was ich meine. Die blauen Punkte stellen den äußeren Rand der UIImageView dar, die das Bild enthält. Die TAP-Gestenerkennung ist derzeit mit dieser UIImageView verknüpft, aber wie Sie sehen können, ist an den Ecken der UIImageView ein wenig Platz vorhanden, der nicht durch das kreisförmige Bild abgedeckt wird. Gibt es eine Möglichkeit, entweder ein UIImageView einer nicht rechteckigen Form anzupassen oder ein Bild auf eine Ansicht zu setzen, ohne eine UIImageView zu verwenden und trotzdem die Tap-Erkennung anzuschließen?

image of walter with transparent background on a UIImageView http://img237.imageshack.us/img237/2164/walterheadshot.png

Ich bin auf das iPhone Grafiken ziemlich neu, aber hat jemand einige Ideen auf dieser oder mich in die richtige Richtung zeigen kann?

Danke!

Antwort

4

Geht davon einen Kreis, und nicht nur ein ovalen:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGFloat halfSize = [self bounds].size.width * 0.5f; 
    CGPoint location = [[touches anyObject] locationInView:self]; 
    location.x -= halfSize; 
    location.y -= halfSize; 
    CGFloat squaredDistanceFromCenter = location.x * location.x + location.y + location.y; 
    if (squaredDistanceFromCenter < (halfSize * halfSize)) { 
     NSLog(@"Within circle :)"); 
    } else { 
     NSLog(@"Not within circle :("); 
    } 
} 
+0

Danke für die Antwort, und ich gehe davon aus, dass funktionieren würde. Was ich jedoch wirklich wissen wollte (und ich weiß jetzt, dass ich mit meiner Frage genauer hätte sein sollen), war, wenn es möglich ist, unregelmäßig geformte Bilder mit einem Gestenerkenner zu verbinden. Ich wählte ein kreisförmiges Bild, das (fälschlicherweise) dachte, dass alles, was für die glatten Kanten eines Kreises funktionieren würde, an ein verrücktes Polygon angepasst werden könnte, aber das ist nicht der Fall. Nochmals vielen Dank für die Antwort und ich werde eine genauere Frage stellen. – ScottS

+0

Wenn Sie bereits einen 'CGPath' haben, können Sie' CGPathContainsPoint' verwenden. Wenn Sie einen teilweise transparenten Pfad anstelle eines Pfads haben, möchten Sie möglicherweise versuchen, ihn in einen Puffer zu rendern und dann das Pixel zu testen, das der Berührungskoordinate zugeordnet ist. – rpetrich

+0

Ich fand heraus, dass ich den CGPoint mit CGPoint tapLocation = [recognizer locationInView: self.view]; und das gibt mir die x, y Koordinaten wo der Benutzer auf das Bild geklopft hat. Aber im Moment weiß ich nicht, wie ich diese x, y Koordinaten mit einer bestimmten Region auf meinem Bild abgleichen soll. Ich werde das als eine separate Frage ziemlich bald veröffentlichen, wenn ich keinen Weg finde, es zu tun. Vielleicht würde Ihre Idee, "es in einen Puffer umzuwandeln und dann das mit der Berührungskoordinate verknüpfte Pixel zu testen", den Zweck erfüllen, aber haben Sie weitere Informationen darüber, wie Sie das erreichen können? – ScottS

Verwandte Themen