2010-07-23 7 views
5

Próbuję umieścić okrągły obraz w widoku iPhone'a, a następnie pochłaniam kliknięcia wewnątrz kręgu, ale nie poza nim. Problem polega na tym, że kiedy umieszczam UIImageView na widoku ekranu w Konstruktorze interfejsów, wydaje mi się, że jestem ograniczony do kształtu prostokątnego. Próbowałem użyć obrazu koła z obszarem poza okręgiem jako przezroczystym, ale obraz w sumie jest nadal prostokątny, więc gdy jest umieszczony na UIImageView i podłączony do rozpoznawania gestów dotykowych, wciąż podnosi krany poza samym kołem .Jak ograniczyć rozpoznawanie gestów dotykowych iPhone'a do wnętrza okrągłego obrazu?

Poniższy obrazek pokazuje, co mam na myśli. Niebieskie kropki reprezentują zewnętrzną granicę UIImageView, która przechowuje obraz. Rozpoznawanie gestów dotykowych jest obecnie powiązane z tym UIImageView, ale jak widać, jest trochę miejsca w rogach UIImageView, które nie są objęte okrągłym obrazem. Czy jest jakiś sposób, aby dopasować UIImageView do kształtu nieprostokątnego lub umieścić obraz w widoku bez użycia UIImageView i nadal być w stanie podłączyć rozpoznawanie zaczepów?

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

Jestem całkiem nowy grafik iPhone, ale czy ktoś ma jakieś pomysły na ten temat lub może wskazać mi w dobrym kierunku?

Dzięki!

Odpowiedz

4

Zakłada okrąg, a nie tylko owalny:

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

Dzięki za odpowiedź, a ja jestem przy założeniu, że będzie działać. Jednak to, co naprawdę chciałem wiedzieć (i wiem teraz, że powinienem był być bardziej szczegółowy z moim pytaniem), to czy możliwe jest podłączenie nieregularnych kształtów do aparatu do rozpoznawania gestów. Wybrałem myślenie o okrągłym obrazie (niepoprawnie), że cokolwiek by działało na gładkich krawędziach koła, mogłoby zostać dostosowane do wieloboku o zwariowanym kształcie, ale tak nie jest. Jeszcze raz dziękuję za odpowiedź, a ja opublikuję bardziej szczegółowe pytanie. – ScottS

+0

Jeśli masz już 'CGPath', możesz użyć' CGPathContainsPoint'. Jeśli masz ścieżkę częściowo przezroczystą zamiast ścieżki, możesz spróbować przekonwertować ją do bufora, a następnie przetestować piksel związany z współrzędną dotyku. – rpetrich

+0

Dowiedziałem się, że mogę uzyskać CGPoint za pomocą CGPoint tapLocation = [rozpoznawacz locationInView: self.view]; a to da mi współrzędne x, y miejsca, w którym użytkownik dotknął obrazu. Ale teraz nie wiem, jak dopasować współrzędne X, Y do określonego regionu na moim obrazie. Powiem to jako osobne pytanie wkrótce, jeśli nie znajdę sposobu, aby to zrobić. Być może twój pomysł "renderowania go do bufora, a następnie testowania piksela związanego ze współrzędną dotyku" może wystarczyć, ale czy masz więcej informacji o tym, jak to osiągnąć? – ScottS