webentwicklung-frage-antwort-db.com.de

Wie verwende ich einen UIView?

Im Moment baue ich eine iPhone-App, bei der ein ganzer UIView verwischt werden muss. Wie kann ich das erreichen? Ich habe dieses Framework gesehen, aber ich glaube nicht, dass dies mit UIView funktioniert. Gibt es eine alternative Möglichkeit, eine UIView zu verwischen?

UPDATE: Suchen Sie unten nach meiner aktualisierten Antwort und fügen Sie mit dem Aufkommen von iOS 7 und iOS 8 mehr Relevanz hinzu.

44
virindh

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

Ich persönlich habe das Bild damals mit Photoshop unscharf gemacht, aber es gibt viele großartige Bibliotheken von Drittanbietern, die dynamic und static verwischen, hier sind ein Paar:

Ich wollte das hier posten, weil Sie nicht mehr brauchen, um Screenshots von einzelnen Frames oder Bildschirmen aufzunehmen.

iOS 8: Mit der kommenden Version von iOS 8 hat Apple eine eingebaute unscharfe UIView, UIVisualEffectView ( https://developer.Apple.com/documentation/uikit/uivisualeffectview ) integriert.

28
virindh

Das sollte funktionieren. Ich habe den Code kommentiert, um zu 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 zum Code haben, lassen Sie ihn einfach in den Kommentaren.

Hinweis: CIGaussianBlur ist in iOS ab 5.1 nicht vorhanden. Sie müssen also einen anderen Weg finden, um die Ansicht für die Geräte 5.x + zu verwischen (Danke an @BradLarson für diesen Tipp). Die akzeptierte Antwort in diese Frage sieht als Ersatz vielversprechend aus, ebenso wie diese Bibliothek .

47
pasawaya

In iOS 8 können Sie UIVisualEffectView verwenden, um unscharfe Ansichten zu erhalten ..__ Siehe: https://developer.Apple.com/documentation/uikit/uivisualeffectview

11
Robert

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];
1
Yano Ratheez

Die einfachste Möglichkeit zum Verwischen einer Ansicht ist das Hinzufügen von UIToolbar. Ä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
YaBoiSandeep