2012-06-21 19 views
43

Momentan baue ich eine iPhone App, die eine komplette UIView verwischen muss. Wie kann ich das erreichen? Ich habe this framework gesehen, aber ich denke nicht, dass das mit UIView funktioniert. Gibt es eine alternative Möglichkeit, eine UIView zu verwischen?Wie verwische ich eine UIView?

UPDATE: Überprüfen Sie für meine aktualisierte Antwort unten, mehr Relevanz mit dem Aufkommen von iOS 7 und iOS 8.

Antwort

27

Seit der Veröffentlichung von iOS 7 hat diese Frage viele Treffer bekommen und ich dachte, ich sollte weiterverfolgen, was ich getan habe.

ich persönlich das Bild zu der Zeit mit Photoshop verschwommen, aber es gibt viele große Bibliotheken von Drittanbietern zur Verfügung, die dynamische und statische Unschärfe zu tun, hier sind ein paar:

ich wollte das, weil yo posten Sie brauchen nicht mehr müssen Screenshots von einzelnen Bildern oder Bildschirm zu nehmen.

iOS 8: Mit der kommenden Veröffentlichung von iOS 8 hat Apple eine in verschwommenen UIView, UIVisualEffectView (https://developer.apple.com/documentation/uikit/uivisualeffectview)

+0

FXBlurView funktioniert auf iOS5 + [https://github.com/nicklockwood/FXBlurView](https://github.com/nicklockwood/FXBlurView). –

+0

Bitte beachten Sie, dass mindestens eine App von der Verwendung einiger dieser Bibliotheken abgelehnt wurde (iOS-Unschärfe https://github.com/JagCesar/iOS-blur/issues/25). Diese Bibliotheken verwenden eine Ebene innerhalb von "UITabBar", um den Effekt zu erzielen, und Apple scheint diese abzulehnen. – pgb

+1

Dies scheint mit einem neuen Commit behoben worden zu sein. Außerdem wurde die abgelehnte Anwendung aus einem anderen Grund abgelehnt. – virindh

47

Dies sollte das Hinzufügen arbeiten. Ich bemerkte in den Code damit Sie verstehen, was los ist:

//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]; 

Wenn Sie Fragen haben, über den Code, lassen Sie es in den Kommentaren.

Hinweis: CIGaussianBlur nicht vorhanden ist auf iOS ab 5.1, so müssen Sie eine andere Art und Weise verschwimmen die Ansicht für Geräte 5.x + (Dank @BradLarson für diesen Tipp) finden. Die angenommene Antwort in this question sieht als Ersatz vielversprechend aus, ebenso wie this library.

+10

Beachten Sie, dass CIGaussianBlur nicht als von 5.1 auf iOS präsentieren, so dass Sie einen anderen Weg, dies zu erreichen, auf 5.x und älter finden müssen. –

+0

Sie erhalten die Unschärfe zwischen self.view und myView in diesem Code, richtig? –

+0

Hi @qegal, wie kann ich die Intensität des Blurr-Effekts ändern? –

10

In iOS 8 gebaut enthalten Sie UIVisualEffectView verwenden können verschwommene Ansicht zu erhalten. Siehe: https://developer.apple.com/documentation/uikit/uivisualeffectview

+0

Wenn Sie eine UIVisualEffectView festlegen und dann den Effekt ändern, wie laden Sie diese Ansicht neu? –

+0

Ich glaube nicht, dass es möglich ist, es neu zu laden, wenn Sie den Effekt ändern - Sie müssen es erneut initiieren. – Robert

0

Die einfachste Möglichkeit, eine Ansicht zu verwischen, ist UIToolbar hinzufügen, ändern Sie einfach den Alpha-Wert, um die Unschärfe zu ändern.

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

Dies wird in der akzeptierten Antwort diskutiert. Dies ist jedoch nicht mehr effizient (oder empfohlen) mit dem Start von iOS 8 und den UIVisualEffect-Klassen und APIs. – virindh

+0

So können wir UIToolbar als eine Unschärfe-Ansicht für iOS7, ohne Verwendung von Drittanbieter-Bibliotheken. – YaBoiSandeep

1

Einfach mit diesem Code gelöst.

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]; 
Verwandte Themen