我試圖在UIImageView中應用磨砂玻璃效果。iPhone SDK - 磨砂玻璃(iOS 7模糊)效果
我試圖執行我發現的in this question,但結果不可接受。 我想是這樣的:
任何想法?
UPDATE:
此外,我們可以看到的iOS 7使用這種效果在很多地方。我們如何重現它?
我試圖在UIImageView中應用磨砂玻璃效果。iPhone SDK - 磨砂玻璃(iOS 7模糊)效果
我試圖執行我發現的in this question,但結果不可接受。 我想是這樣的:
任何想法?
UPDATE:
此外,我們可以看到的iOS 7使用這種效果在很多地方。我們如何重現它?
約CoreImage一個很好的教程在這裏,展示如何應用濾鏡和更多:
http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5
更新1
那麼的一點點研究之後,我最終發現,與OS X版本的庫相比,iOS的核心映像仍然不完整。所以我搜索了很多,我找到了兩個解決方案,其中一個更簡單,另一個更廣泛和更復雜的庫。
驚人的,這值得編輯,庫由Brad Larson處理圖像和視頻使用OpenGL,GPUImage。它比Core Image快速高效。簡介:http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework。 GitHub的:GPUImage
因此,例如,在幾行,我可以得到我想要的結果(其中originalImage是UIImage的應用效果):
GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurSize = 2;
UIImage *blurImage = [blurFilter imageByFilteringImage:resizedImage];
更新2
在蘋果宣佈iOS 7之後,一些開發人員發現了一種解決方法,與Apple在默認的iOS應用程序中所做的相同,因爲Apple沒有爲此提供API。 The simplest and better solution, in my opinion, is this one。爲什麼我認爲這是最好的?因爲即使背後的某些視圖發生移動,模糊效果仍然很好,因爲我們預計它會起作用。但是,請記住,它依賴於iOS 7 SDK才能工作,如果Apple更改UIToolbar,則可能會有風險。
更新3
蘋果提到,在WWDC 2013(會話226 - iOS上實現引人入勝的用戶界面),他們將提供UIImage的一個類別類,稱爲的UIImage + ImageEffects(我GOOGLE了它,and found here,但它在Developer Portal - search for UIImageEffects in the search box中可用)。使用此類別,可以使用多種方法(光線,黑暗,具有特定顏色等)在靜態UIImage中應用模糊。另外,昨天I saw this component,發現它很有趣,因爲你可以在一個框架中應用效果(基於上述類別)。
UPDATE 4
最後,在iOS 8日,蘋果發佈了新的類,可以很容易地做直播模糊。使用UIVisualEffect
和UIVisualEffectView
,您可以快速將實時模糊添加到您的應用程序。 Here is a good tutorial from Ryan Nystrom on how to use those classes (and in blur in general):
您可能還需要將高斯模糊與白色混合,才能得到您上面要看的外觀,並且我將在某個時刻爲此進行專門的過濾。另外,我正要試驗紋理磨砂玻璃,就像這款着色器提供的一樣:http://coding-experiments.blogspot.com/2010/06/frosted-glass.html – 2012-07-23 16:15:51
我該怎麼做?我覺得我沒有閱讀文檔的地方=(也無法編譯文檔 – 2012-07-24 07:43:16
對於自定義過濾器,最好的參考是看看其他過濾器是如何工作的,例如,上面連接的紋理玻璃會可以通過使用自定義片段着色器來完成,因此您需要創建一個新的自定義過濾器(使用類似於模板的方式)並修改它們在OpenGL ES中提供的片段着色器。對於明亮的模糊,您可能能夠鏈接亮度濾鏡的高斯模糊,或者最差的情況下,爲亮化步驟創建一個具有自定義片段着色器的濾鏡組。核心文檔位於Readme.md文件中。 – 2012-07-24 14:01:31
看一看the Core Image Programming Guide。看起來好像stylize filter和blur filter可能適合您的需求。我以前從未與Core Image合作過,但我認爲可能會有一些涉及他們的良好WWDC會話。該文檔有a basic piece of sample code here。
它看起來像iOS沒有所有的OS X的過濾器。你可以通過代碼NSArray * properties = [CIFilter filterNamesInCategory:kCICategoryBuiltIn]; NSLog(@「%@」,屬性);' – 2012-07-22 16:01:21
沒有深入細節,你有沒有在iOS 6上運行該代碼? – Moshe 2012-07-22 19:25:36
還沒有。檢查我自己的答案 - 解決! – 2012-07-22 21:06:00
解決方案適用於iOS 7和8,而無需使用CoreImage或CoreGraphics中的所有:
- (void)addBlurToView:(UIView *)view {
UIView *blurView = nil;
if([UIBlurEffect class]) { // iOS 8
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
blurView.frame = view.frame;
} else { // workaround for iOS 7
blurView = [[UIToolbar alloc] initWithFrame:view.bounds];
}
[blurView setTranslatesAutoresizingMaskIntoConstraints:NO];
[view addSubview:blurView];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]];
}
(假設你不針對iOS版比7舊版本;如果你是,你必須測試else
區塊中的iOS版本)
此解決方案適用於任何視圖,而不僅適用於圖像。
如果你申請的時候模糊想要更多的控制,你可以利用蘋果的UIImageEffects
(通過他們的示例代碼可用)的。
您可以從蘋果的開發庫複製代碼爲UIImageEffects
:Blurring and Tinting an Image
這裏是如何使用它:
#import "UIImageEffects.h"
...
self.yourImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];
這裏的解決方案與UIToolbar: http://stackoverflow.com/a/19506076/774394 – 2013-10-21 22:51:56
我在編輯2中提到過類似的東西 - 它使用UIToolbar也是 – 2013-10-22 08:40:20
是的你是對的。但是這個解決方案在UIView動畫的動畫框/邊界上起作用。 – 2013-10-22 15:47:28