2012-06-21 19 views
43

Hiện tại tôi đang xây dựng một ứng dụng iPhone yêu cầu làm mờ toàn bộ UIView. Làm thế nào tôi có thể đạt được điều này? Tôi đã thấy this framework, nhưng tôi không nghĩ rằng nó hoạt động với UIView. Có cách nào khác để làm mờ UIView không?Làm cách nào để áp dụng hiệu ứng mờ cho UIView?

CẬP NHẬT: Kiểm tra câu trả lời của tôi cập nhật dưới đây, thêm phù hợp hơn với sự ra đời của iOS 7 và iOS 8.

Trả lời

27

Kể từ khi phát hành iOS 7, Câu hỏi này đã nhận được nhiều lượt truy cập và tôi nghĩ tôi nên theo dõi những gì tôi đã làm.

Cá nhân tôi mờ hình ảnh đồng thời với photoshop, nhưng có rất nhiều thư viện của bên thứ ba tuyệt vời có sẵn mà làm độngtĩnh mờ, đây là một vài:

tôi muốn đăng bài này vì yo u không còn cần để chụp ảnh màn hình của từng khung hoặc màn hình riêng lẻ.

iOS 8: Với việc phát hành sắp tới của iOS 8, Apple đã bao gồm tích hợp sẵn trong mờ UIView, UIVisualEffectView (https://developer.apple.com/documentation/uikit/uivisualeffectview)

+0

FXBlurView hoạt động trên iOS5 + [https://github.com/nicklockwood/FXBlurView](https://github.com/nicklockwood/FXBlurView). –

+0

Xin lưu ý rằng ít nhất một ứng dụng đã bị từ chối sử dụng một số thư viện này (iOS-blur https://github.com/JagCesar/iOS-blur/issues/25). Các thư viện này sử dụng một lớp bên trong 'UITabBar' để đạt được hiệu quả, và Apple dường như đang từ chối chúng. – pgb

+1

Điều này dường như đã được khắc phục với một cam kết mới. Ngoài ra, ứng dụng bị từ chối bị từ chối vì lý do chính khác. – virindh

47

này nên làm việc. Tôi đã nhận xét trong mã để giúp bạn hiểu những gì đang diễn ra:

//To take advantage of CIFilters, you have to import the Core Image framework 
#import <CoreImage/CoreImage.h> 

//Get a UIImage from the UIView 
UIGraphicsBeginImageContext(myView.bounds.size); 
[myView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

//Blur the UIImage with a CIFilter 
CIImage *imageToBlur = [CIImage imageWithCGImage:viewImage.CGImage];  
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"]; 
[gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"]; 
[gaussianBlurFilter setValue:[NSNumber numberWithFloat: 10] forKey: @"inputRadius"]; 
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"]; 
UIImage *endImage = [[UIImage alloc] initWithCIImage:resultImage]; 

//Place the UIImage in a UIImageView 
UIImageView *newView = [[UIImageView alloc] initWithFrame:self.view.bounds]; 
newView.image = endImage; 
[self.view addSubview:newView]; 

Nếu bạn có bất kỳ câu hỏi nào về mã, hãy để lại trong phần nhận xét.

Lưu ý: CIGaussianBlur không có trên iOS là 5.1, vì vậy bạn phải tìm cách khác để làm mờ chế độ xem cho thiết bị 5.x + (Cảm ơn @BradLarson cho mẹo này). Câu trả lời được chấp nhận trong this question trông đầy hứa hẹn như một sự thay thế, cũng như this library.

+10

Lưu ý rằng CIGaussianBlur không có trên iOS là 5.1, vì vậy bạn có thể cần phải tìm cách khác để hoàn thành bước này từ 5.x trở lên. –

+0

Bạn bị mờ giữa self.view và myView trong mã này, phải không? –

+0

Hi @qegal, làm thế nào tôi có thể thay đổi cường độ của hiệu ứng blurr? –

10

Trong iOS 8 bạn có thể sử dụng để có được UIVisualEffectView mờ Views. Xem: https://developer.apple.com/documentation/uikit/uivisualeffectview

+0

Nếu bạn đặt UIVisualEffectView và sau đó thay đổi hiệu ứng, làm thế nào để bạn tải lại chế độ xem đó? –

+0

Tôi không nghĩ rằng nó có thể tải lại nó khi bạn thay đổi hiệu ứng - bạn phải khởi động lại nó. – Robert

0

Cách đơn giản nhất để làm mờ chế độ xem là thêm UIToolbar, chỉ cần thay đổi giá trị alpha để thay đổi độ mờ.

self.toolbar = [[UIToolbar alloc]initForAutoLayout]; 
[self.view addSubview:self.toolbar]; 
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:0]; 
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:0]; 
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:NAVBAR_HEIGHT]; 
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:0]; 
self.toolbar.alpha = 0.5; 
+0

Điều này được thảo luận trong câu trả lời được chấp nhận. Tuy nhiên, điều này không còn hiệu quả (hoặc được khuyến nghị) với sự ra mắt của iOS 8 và Lớp UIVisualEffect và API của – virindh

+0

Vì vậy, chúng tôi có thể UIToolbar làm chế độ xem mờ cho ios7 mà không sử dụng bất kỳ libs bên thứ ba nào. – YaBoiSandeep

1

Chỉ cần giải quyết bằng cách sử dụng mã này.

UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:yourView.bounds]; 
toolBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 7.0) { 
    toolBar.barTintColor = nil; 
    toolBar.translucent = YES; 
    toolBar.barStyle = UIBarStyleBlack; 
} 
else 
    [toolBar setTintColor:[UIColor colorWithRed:5 green:31 blue:75 alpha:1]]; 
[yourView insertSubview:toolBar atIndex:0]; 
Các vấn đề liên quan