En ce moment, je construis une application iPhone qui nécessite de brouiller tout UIView. Comment puis-je atteindre cet objectif? J'ai vu ce cadre , mais je ne pense pas que cela fonctionne avec UIView. Existe-t-il un autre moyen de brouiller UIView?
UPDATE: vérifiez la réponse mise à jour ci-dessous, ce qui ajoute plus de pertinence avec l'avènement de iOS 7 et iOS 8.
Depuis la sortie d'iOS 7, cette question a eu beaucoup de succès et j'ai pensé que je devrais faire un suivi sur ce que j'ai fini par faire.
Personnellement, j’ai rendu la photo floue à l’époque avec photoshop, mais il existe de très bonnes bibliothèques tierces disponibles qui font dynamic et static floues, voici une couple:
UITabBar
et s'applique à toutes les vues pour obtenir le flou natif d'iOS 7: https://github.com/JagCesar/iOS-blur/Je voulais poster ceci parce que vous n'avez plus besoin de prendre des captures d'écran de cadres ou d'écrans individuels.
iOS 8: Avec la prochaine version d'iOS 8, Apple a intégré un UIView
, UIVisualEffectView
flou intégré ( https://developer.Apple.com/documentation/uikit/uivisualeffectview )
Cela devrait marcher. J'ai commenté dans le code pour vous aider à comprendre ce qui se passe:
//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];
Si vous avez des questions sur le code, laissez-le dans les commentaires.
Remarque: CIGaussianBlur n'est pas présent sur iOS à partir de la version 5.1, vous devez donc trouver un moyen différent de rendre la vue floue pour les appareils 5.x + (Merci à @BradLarson pour cette astuce). La réponse acceptée dans cette question semble prometteuse comme solution de remplacement, tout comme cette bibliothèque .
Dans iOS 8, vous pouvez utiliser UIVisualEffectView
pour obtenir des vues floues ..__ Voir: https://developer.Apple.com/documentation/uikit/uivisualeffectview
Simplement résolu en utilisant ce code.
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];
Le moyen le plus simple de rendre une vue floue consiste à ajouter UIToolbar, il suffit de modifier la valeur alpha pour modifier le flou.
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;