Hi!
Ich bastel mir gerade ein kleines Spielchen... Hierbei habe ich ein Feld von ImageViews, welche PNG-Grafiken enthalten, die sechseckige Felder darstellen (der Rest der Grafik ist transparent). Diese ImageViews überlappen sich - und ich möchte nun, wenn ein Touch registriert wird, herausfinden, welcher ImageView gemeint war. Der nicht-gemeinte View ist an dieser Stelle ja transparent, also dachte ich mir, dass man vielleicht den Alpha-Wert an dieser Stelle lesen könnte und anhand dessen dann entscheiden. Nur finde ich nirgends in der Doku passende Funktionen dazu (bin alle UIImage, UIImageView- und CG-Funktionen durchgegangen). -- Ein anderer Ansatz wäre, mit den CG-Funktionen einen Pfad zu erstellen, der die Sechseck-Form abbildet, und dann schauen, ob der Touch da drin ist, aber ich bekomme den Touch nicht von dem globalen View auf den Offset innerhalb der Zelle übertragen.
Habt ihr eine Idee?
Momentan ist das einfach so (ohne Prüfung; nimmt einfach die "obere" Zelle...)
Alles anzeigen
Achja, die Sechseck-Grafiken sehen so aus:
[Blockierte Grafik: http://ablage.ptec-media.de/uploads/hexagon.png]
Besten Dank! Ich hoffe ihr versteht, was ich will
Ich bastel mir gerade ein kleines Spielchen... Hierbei habe ich ein Feld von ImageViews, welche PNG-Grafiken enthalten, die sechseckige Felder darstellen (der Rest der Grafik ist transparent). Diese ImageViews überlappen sich - und ich möchte nun, wenn ein Touch registriert wird, herausfinden, welcher ImageView gemeint war. Der nicht-gemeinte View ist an dieser Stelle ja transparent, also dachte ich mir, dass man vielleicht den Alpha-Wert an dieser Stelle lesen könnte und anhand dessen dann entscheiden. Nur finde ich nirgends in der Doku passende Funktionen dazu (bin alle UIImage, UIImageView- und CG-Funktionen durchgegangen). -- Ein anderer Ansatz wäre, mit den CG-Funktionen einen Pfad zu erstellen, der die Sechseck-Form abbildet, und dann schauen, ob der Touch da drin ist, aber ich bekomme den Touch nicht von dem globalen View auf den Offset innerhalb der Zelle übertragen.
Habt ihr eine Idee?
Momentan ist das einfach so (ohne Prüfung; nimmt einfach die "obere" Zelle...)
Quellcode
- // (GameViewController.m)
- // Handles the end of a touch
- - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- {
- // Enumerate through all the touch objects.
- for (UITouch *touch in touches) {
- [self dispatchFirstTouchAtPoint:[touch locationInView:self.view] forEvent:nil];
- }
- }
- -(void) dispatchFirstTouchAtPoint:(CGPoint)touchPoint forEvent:(UIEvent *)event
- {
- UIImageView *cell;
- for(int i = 101; i <= 119; i++) { // Die Felder haben Tags von 101 bis 119
- cell = (UIImageView *)[self.view viewWithTag:i];
- if (CGRectContainsPoint([cell frame], touchPoint)) {
- [self clickOnCell:i];
- break; // nach der ersten passenden zelle aufhören
- }
- }
- }
Achja, die Sechseck-Grafiken sehen so aus:
[Blockierte Grafik: http://ablage.ptec-media.de/uploads/hexagon.png]
Besten Dank! Ich hoffe ihr versteht, was ich will