我正在開發一個應用程序,我的要求是改變點擊圖像的按鈕。圖像基本上是國家的地圖。所以,問題是我做了一個自定義按鈕,但它是檢測圖像外部的動作(因爲圖像是彎曲的,並且按鈕默認爲圓形)。所以,有沒有什麼方法可以根據圖像完全自定義按鈕。自定義按鈕檢測外部圖像的動作
感謝
我正在開發一個應用程序,我的要求是改變點擊圖像的按鈕。圖像基本上是國家的地圖。所以,問題是我做了一個自定義按鈕,但它是檢測圖像外部的動作(因爲圖像是彎曲的,並且按鈕默認爲圓形)。所以,有沒有什麼方法可以根據圖像完全自定義按鈕。自定義按鈕檢測外部圖像的動作
感謝
如果你的意思是使用自定義形狀(定製tapable區)按鈕,我寫了一些方法來檢查,在UIImage的那個點是透明與否:
- (BOOL) pointInNontransparentArea:(CGPoint)point {
CGImageRef imageRef = [imageView.image CGImage];
NSData* data = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
unsigned char *pixels = (unsigned char *)[data bytes];
size_t width = CGImageGetWidth(imageRef);
size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);
size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef);
size_t numberOfComponents = bitsPerPixel/bitsPerComponent;
int pixelNumber = point.y * width + point.x;
int byteNumber = pixelNumber * numberOfComponents + numberOfComponents - 1;
unsigned char transparencyColor = pixels[byteNumber];
[data release];
if(transparencyColor != 0)
return YES;
else
return NO;
}
如果您的按鈕圖像有透明背景將很容易 - 只需在按鈕視圖中檢查觸摸的位置並檢查透明區域中的忽略觸摸。
你也可以檢查奧萊Begemann類: http://oleb.net/blog/2009/10/obshapedbutton-non-rectangular-buttons-on-the-iphone/
感謝您的回答。但我無法理解代碼以及它的用途。但是你最後編寫的邏輯,我認爲是正確的方法,甚至我也嘗試了相同的事情與litle不同。 我試圖比較按鈕(它被點擊的位置)和圖像的座標(cgrect參數),如果在圖像區域出現了水龍頭,那麼我會改變其他的顏色。 您認爲這是一種正確的方法嗎? –
在這個方法中,我檢查像素與座標x,y(CGPoint)從圖像(imageView.image)有alpha分量= 0.這意味着這一點是100%透明。首先我從圖像複製像素數據。像素數組是我的代碼中的一維數組,我必須計算我必須檢查哪個像素(pixelNumber)。接下來,取決於圖像格式,我計算哪個字節我必須檢查像素數據。這將適用於RGBA格式,因爲我總是檢查一個像素的最後一個字節(alpha值)。如果這個字節= 0,這意味着這個像素是透明的。 是的,你的方法在我看來是正確的。 –
非常感謝。 甚至你發佈的鏈接都非常有幫助,我完成了我的工作。 –
我沒有得到任何答案,難道是難以實現? –