2010-07-23 11 views
5

Sto provando a posizionare un'immagine circolare su una vista iPhone e quindi a consumare i rubinetti all'interno del cerchio ma non al di fuori di esso. Il problema che sto incontrando è che quando metto UIImageView sulla visualizzazione dello schermo in Interface Builder, mi sembra di essere vincolato a una forma rettangolare. Ho provato a usare un'immagine di un cerchio con l'area esterna al cerchio a sinistra come trasparente ma l'immagine in totale è ancora rettangolare, quindi quando viene posizionata su UIImageView e collegata per riconoscere i gesti tocca ancora i tocchi all'esterno del cerchio stesso .Come limitare il riconoscimento del gesto del tocco dell'iPhone all'interno di un'immagine circolare?

L'immagine seguente mostra cosa intendo. I punti blu rappresentano il bordo esterno di UIImageView che contiene l'immagine. Il riconoscimento del gesto di tocco è attualmente collegato a UIImageView ma, come puoi vedere, c'è un po 'di spazio agli angoli di UIImageView che non sono coperti dall'immagine circolare. Esiste un modo per uniformare UIImageView a una forma non rettangolare o per posizionare un'immagine su una vista senza utilizzare UIImageView ed essere ancora in grado di agganciare il riconoscimento tocco?

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

Sono abbastanza nuovo per la grafica di iPhone, ma Qualcuno ha qualche idea su questo o mi può puntare nella giusta direzione?

Grazie!

risposta

4

assume un cerchio, e non solo un ovale:

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

Grazie per la risposta, e sto supponendo che avrebbe funzionato. Tuttavia, quello che volevo veramente sapere (e ora so che avrei dovuto essere più specifico con la mia domanda) era se fosse possibile collegare immagini di forma irregolare a un riconoscitore di gesti. Ho scelto un esempio di immagine circolare pensando (erroneamente) che qualsiasi cosa potesse funzionare per i bordi lisci di un cerchio potrebbe essere adattata a un poligono a forma di pazzo, ma non è questo il caso. Grazie ancora per la risposta e pubblicherò una domanda più specifica. – ScottS

+0

Se si dispone già di un 'CGPath', è possibile utilizzare' CGPathContainsPoint'. Se si dispone di un percorso parzialmente trasparente anziché di un percorso, è consigliabile provare a renderlo in un buffer e quindi a testare il pixel associato alla coordinata touch. – rpetrich

+0

Ho scoperto che posso ottenere CGPoint usando CGPoint tapLocation = [recognizer locationInView: self.view]; e questo mi darà le coordinate x, y di dove l'utente ha toccato l'immagine. Ma al momento non so come abbinare quella x, y coordinata con una particolare regione sulla mia immagine. Lo pubblicherò come una domanda separata molto presto se non trovo il modo di farlo. Forse la tua idea di "renderlo in un buffer e poi testare il pixel associato alla coordinata touch" farebbe il trucco, ma hai altre informazioni su come ottenerlo? – ScottS

Problemi correlati