2010-07-23 75 views
5

我試圖在iPhone視圖上放置一個圓形圖像,然後在圓圈內部使用水龍頭,但不在其外部。我遇到的問題是,當我在界面生成器的屏幕視圖上放置UIImageView時,我似乎被限制爲矩形形狀。我嘗試使用一個圓圈圖像,左邊的區域保持透明,但總體上圖像仍然是矩形,所以當它放置在UIImageView上並且連接起來以識別輕擊手勢時,它仍會拾取圓圈本身之外的水龍頭。如何將iPhone輕拍手勢識別限制在圓形圖像內?

下圖顯示了我的意思。藍色圓點代表保存圖像的UIImageView的外邊框。輕擊手勢識別當前鏈接到該UIImageView,但正如您所看到的那樣,在UIImageView的角落有一些空間不在圓形圖像中。有什麼辦法可以使UIImageView符合非矩形形狀,或者在不使用UIImageView的情況下將圖像放在視圖上,並且仍然能夠連接水龍頭識別?

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

我很新的iPhone圖形,但沒有任何人有這方面的一些想法或者可以點我在正確的方向?

謝謝!

回答

4

假設一個圓圈,而不僅僅是一個橢圓形:

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

感謝您的答覆,並且我假設是可行的。但是,我真正想知道的(現在我知道我應該對自己的問題更加具體)是,如果可以將不規則形狀的圖像連接到手勢識別器。我選擇了一個圓形圖像的例子,思考(不正確),無論對圓的光滑邊緣起什麼作用,都可以適應一個瘋狂形狀的多邊形,但事實並非如此。再次感謝您的回覆,我會發布更具體的問題。 – ScottS 2010-07-25 01:06:11

+0

如果您已經擁有'CGPath',則可以使用'CGPathContainsPoint'。如果您具有部分透明而不是路徑,則可能需要嘗試將其渲染到緩衝區中,然後測試與觸摸座標關聯的像素。 – rpetrich 2010-07-25 01:33:37

+0

我發現我可以使用CGPoint獲取CGPoint tapLocation = [識別器locationInView:self.view];這會給我用戶在圖像上點擊的x,y座標。但現在我不知道如何匹配那個x,y座標與我的圖像上的特定區域。如果我沒有找到辦法,我會盡快將其作爲單獨的問題發佈。也許你的想法是「把它渲染成緩衝區,然後測試與觸摸座標相關聯的像素」就可以實現,但是你是否還有關於如何實現這一點的更多信息? – ScottS 2010-07-27 01:39:56