2010-10-06 62 views
1

我編程方式創建一個UIButton,然後添加一個模板圖像與setImage:如何使UIButton正確使用蒙版圖像?

CGRect photoFrame = CGRectMake(11, 11, 180, 120); 
UIButton *cardPhotoButton = [[UIButton alloc] initWithFrame:photoFrame]; 
cardPhotoButton.backgroundColor = [UIColor clearColor]; 

UIImage *cardPhoto = [[UIImage alloc] init]; 
cardPhoto = [self maskImage: 
[UIImage imageNamed:[metaDict objectForKey:@"Photo"]] withMask:[UIImage imageNamed:@"CardPhotoFrame.png"]]; 

[cardPhotoButton setImage:cardPhoto forState:UIControlStateNormal]; 

cardPhotoButton.contentMode = UIViewContentModeScaleAspectFit; 

[self addSubview:cardPhotoButton]; 

掩蔽是用這種方法我從網上得到了實現:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
             CGImageGetHeight(maskRef), 
             CGImageGetBitsPerComponent(maskRef), 
             CGImageGetBitsPerPixel(maskRef), 
             CGImageGetBytesPerRow(maskRef), 
             CGImageGetDataProvider(maskRef), NULL, false); 

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
    return [UIImage imageWithCGImage:masked]; 
} 

現在的問題是默認狀態的掩碼不起作用,但奇怪的是,當我實際點擊按鈕並且按鈕進入「突出顯示」狀態時,掩模圖像的透明部分開始工作。

我猜我需要設置一些BG顏色clearColor的地方,但我已經試過它們都沒有工作。

任何想法可能會失蹤?

回答

1

您的實際需求是什麼?您需要不同的圖像以顯示正常狀態和突出顯示的狀態,或者圖像尺寸未正確安裝按鈕?

如果問題是圖像不適合,那麼原因是您需要將按鈕的類型設置爲自定義類型。

+0

我希望所有國家都具有相同的圖像,但我需要的圖像掩模工作和當前圖像的透明度沒有出現在默認狀態下,只有在高亮狀態下。 – margusholland 2010-10-07 07:23:47

+0

是否有任何特定的掩蔽需要?如果你想要相同的圖像,即你想讓按鈕顯示爲圖像的尺寸,那麼只需將按鈕類型設置爲自定義,並將圖像設置爲正常,突出顯示和選擇狀態。所以在所有情況下,圖像將保持不變。現在,您可以找到解決方案。 – 2010-10-07 07:55:24

+0

圖像實際上是一張照片,我想添加一張遮罩,使照片具有特定的框架,我正在嘗試添加。並創建一個新的UIButton我的默認使它成爲UIButtonTypeCustom不是嗎? – margusholland 2010-10-07 13:10:16