2010-07-23 15 views
5

Estoy tratando de colocar una imagen circular en una vista de iPhone y luego utilizar los toques dentro del círculo, pero no fuera de él. El problema al que me estoy enfrentando es que cuando coloco un UIImageView en la vista de pantalla en Interface Builder, parece que estoy limitado a una forma rectangular. Intenté usar una imagen de un círculo con el área fuera del círculo como transparente, pero la imagen en total sigue siendo rectangular, así que cuando se coloca en un UIImageView y se engancha para reconocer los gestos de tap, sigue captando los grifos fuera del círculo mismo .¿Cómo limitar el reconocimiento de gestos de toque de iPhone dentro de una imagen circular?

La imagen siguiente muestra a qué me refiero. Los puntos azules representan el borde exterior del UIImageView que contiene la imagen. El reconocimiento de gestos táctiles está actualmente vinculado a ese UIImageView, pero como puedes ver, hay un poco de espacio en las esquinas del UIImageView que no está cubierto por la imagen circular. ¿Hay alguna forma de adaptar un UIImageView a una forma no rectangular o de colocar una imagen en una vista sin usar un UIImageView y aún así poder conectar el reconocimiento de tap?

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

Soy bastante nuevo a los gráficos iPhone, pero ¿alguien tiene algunas ideas sobre esto o me puede apuntar en la dirección correcta?

Gracias!

Respuesta

4

Supone un círculo, y no sólo un óvalo:

- (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

Gracias por la respuesta, y estoy suponiendo que iba a funcionar. Sin embargo, lo que realmente quería saber (y ahora sé que debería haber sido más específico con mi pregunta) era si es posible conectar imágenes de forma irregular a un reconocedor de gestos. Elegí un ejemplo de imagen circular pensando (incorrectamente) que cualquier cosa que funcione para los bordes suaves de un círculo podría adaptarse a un polígono de forma loca, pero ese no es el caso. Gracias de nuevo por la respuesta y publicaré una pregunta más específica. – ScottS

+0

Si ya tiene un 'CGPath', puede usar' CGPathContainsPoint'. Si tiene una ruta parcialmente transparente en lugar de una ruta, puede intentar representarla en un búfer y luego probar el píxel asociado con la coordenada táctil. – rpetrich

+0

Descubrí que puedo obtener el CGPoint usando CGPoint tapLocation = [recognizer locationInView: self.view]; y esto me dará las coordenadas x, y de donde el usuario tocó la imagen. Pero ahora mismo no sé cómo hacer coincidir esa coordenada x, y con una región particular en mi imagen. Lo publicaré como una pregunta separada muy pronto si no encuentro una manera de hacerlo. Tal vez su idea de "convertirla en un búfer y luego probar el píxel asociado con la coordenada táctil" sería suficiente, pero ¿tiene más información sobre cómo lograr eso? – ScottS

Cuestiones relacionadas