2013-01-20 64 views
1

我想要做的是使UIImageView變暗,以便在圖像頂部產生按鈕和視圖。我想給它在ios6中使用Facebook分享用戶的效果。它背後的所有內容都變得更暗,但它是可見的。我試過使用:變暗UIImageView IOS

UIImage *maskedImage = [self darkenImage:image toLevel:0.5]; 

- (UIImage *)darkenImage:(UIImage *)image toLevel:(CGFloat)level 
{ 
// Create a temporary view to act as a darkening layer 
CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height); 
UIView *tempView = [[UIView alloc] initWithFrame:frame]; 
tempView.backgroundColor = [UIColor blackColor]; 
tempView.alpha = level; 

// Draw the image into a new graphics context 
UIGraphicsBeginImageContext(frame.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[image drawInRect:frame]; 

// Flip the context vertically so we can draw the dark layer via a mask that 
// aligns with the image's alpha pixels (Quartz uses flipped coordinates) 
CGContextTranslateCTM(context, 0, frame.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 
CGContextClipToMask(context, frame, image.CGImage); 
[tempView.layer renderInContext:context]; 

// Produce a new image from this context 
CGImageRef imageRef = CGBitmapContextCreateImage(context); 
UIImage *toReturn = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef); 
UIGraphicsEndImageContext(); 
return toReturn; 
} 

但它沒有給我想要的效果。它會改變顏色,而我只是希望它變得更暗,就像當您使用ios Facebook共享時,背景變暗一樣。這可能嗎?

+4

爲什麼不簡單地放置一個新的(黑色填充)視圖頂部與阿爾法設置爲適當的水平? (雖然有猜測,但我懷疑這比操縱底層UIImage要少得多的資源密集度。是的,沒有必要的測試,這是沒有意義的,但是你去了。) –

+0

我之前使用過@middaparka給出的建議,並且它可以正常工作(只要你不想使用Facebook共享獲得漂亮的徑向漸變)。如果你想要的話,你需要創建一個自定義視圖並繪製它。 – petemorris

+0

@middaparka爲什麼不簡單地回答問題而不是評論它,並將答案寫入評論? – Mecki

回答

8

要製作一個UIView,其所有內容和子視圖顏色較深,您只需在其上繪製另一個UIView,它全黑且具有Alpha透明度,以便此「遮擋視圖」的黑色與內容混合下面的視圖。如果Alpha透明度爲0.5,則下面的所有內容看起來都會變暗50%。

爲了得到一個漸變效果,只需使用「屏蔽觀」的轉變:

// Make the view 100% transparent before you put it into your view hierarchy. 
[myView setAlpha:0]; 

// Layout the view to shield all the content you want to darken. 
// Give it the correct size & position and make sure is "higher" in the view 
// hierarchy than your other content. 
...code goes here... 

// Now fade the view from 100% alpha to 50% alpha: 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 
[myView setAlpha:0.5]; 
[UIView commitAnimations]; 

您可以更改動畫時間根據需要進行淡入淡出或快或慢。如果您沒有設置任何動畫持續時間,則會使用默認持續時間(當您分享Facebook時,就是這種情況)。

+0

Geat的想法,謝謝,即使它沒有給出好的Facebook效果 – Alessandro

+1

@Alessandroz:爲什麼它不給你的Facebook效果?由於過渡(衰落效應)?您可以輕鬆創建這種效果。只需使屏蔽視圖的alpha從0到0.5淡出即可。我會更新問題併發布一些代碼。 – Mecki