2009-03-15 20 views
6

Obecnie widzę, że zdarzenie dotykowe pokaże mi UIView, gdzie nastąpiło dotknięcie. Ale co, jeśli muszę wykryć dotyk jakiegoś nieprostokątnego kształtu, na przykład koła. Jak chciałbym zrobić coś takiego?Jak wykryć dotyk w określonym obszarze?

Zasadniczo chcę zrobić coś tylko wtedy, gdy użytkownik dotknie gdzieś w obrębie okrągłego obszaru, który nie jest widoczny.

Każda pomoc/kierunek jest doceniany, TIA!

Odpowiedz

7

Zrobiłbyś to tak. Zwróć uwagę, że "locationInView" zwróci współrzędne dotknięcia w odniesieniu do określonego widoku, więc dotknięcie w lewym górnym rogu widoku powróci (0,0) bez względu na to, gdzie widok jest wyświetlany na ekranie.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 

    // gets the coordinats of the touch with respect to the specified view. 
    CGPoint touchPoint = [touch locationInView:self]; 

    // test the coordinates however you wish, 
    ... 
} 

Aby przetestować przeciwko kuli będzie można obliczyć odległość od punktu próbkowania do środka kuli, a następnie sprawdzić, czy ta była mniejsza niż promień kuli.

+0

Dzięki Andrew! Jakieś wskazówki dotyczące wykreślania niestandardowych kształtów? Zgaduję, że byłoby to coś w rodzaju rysowania kształtu za pomocą CGContext, a następnie w jakiś sposób sprawdzania przeciwko temu? albo co ? – dizy

+0

Do rysowania używałbyś CGContext, ale do obliczeń "IsInside" będziesz musiał użyć matematyki. Jeśli możesz wyrazić kształty jako wielokąty, jest to całkiem proste. Ten link może pomóc: http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/ –

Powiązane problemy