J'ai une UIView
et je définis une image de fond de cette façon:
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];
Mon problème est que l'image d'arrière-plan n'est pas centrée à l'intérieur de la vue, mais qu'elle est parfois rejouée pour remplir toute la vue. Existe-t-il un moyen de centrer l'image dans uiview et de sélectionner une taille d'écran?
Remarque: Je ne peux pas utiliser UIImageView
comme arrière-plan car j'ai un scrollview
.
Vous devez d'abord traiter l'image pour créer une image centrée et étirée ..__
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:image];
Pour Swift use this ...
UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "ImageName.png")?.draw(in: self.view.bounds)
if let image = UIGraphicsGetImageFromCurrentImageContext(){
UIGraphicsEndImageContext()
self.view.backgroundColor = UIColor(patternImage: image)
}else{
UIGraphicsEndImageContext()
debugPrint("Image not available")
}
La méthode colorWithPattern:
sert vraiment à générer des motifs à partir d'images. Ainsi, la personnalisation dont vous avez besoin est fort probablement impossible et n’est pas censée l’être.
En effet, vous devez utiliser une UIImageView
pour centrer et redimensionner une image. Le fait que vous ayez une UIScrollView
n'empêche pas ceci:
Faites de self.view
une vue générique, puis ajoutez les UIImageView
et UIScrollView
en tant que sous-vues. Assurez-vous que tout est correctement câblé dans Interface Builder et rendez la couleur d'arrière-plan de la vue de défilement transparente.
C'est à mon humble avis la conception la plus simple et la plus flexible pour les modifications futures.
Répéter:
UIImage *img = [UIImage imageNamed:@"bg.png"];
view.backgroundColor = [UIColor colorWithPatternImage:img];
étiré
UIImage *img = [UIImage imageNamed:@"bg.png"];
view.layer.contents = img.CGImage;
Pour Swift 2.1, utilisez cette ...
UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "Cyan.jpg")?.drawInRect(self.view.bounds)
let image: UIImage! = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.view.backgroundColor = UIColor(patternImage: image)
Bonne façon de faire dans Swift 4 , Si votre cadre est correctement dimensionné à l’écran, placez-le ailleurs, sinon. important d'écrire ceci dans viewDidLayoutSubviews
car nous pouvons obtenir le cadre réel dans viewDidLayoutSubviews
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
UIGraphicsBeginImageContext(view.frame.size)
UIImage(named: "myImage")?.draw(in: self.view.bounds)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
view.backgroundColor = UIColor.init(patternImage: image!)
}
Vous pouvez utiliser UIGraphicsBeginImageContext méthode pour définir la taille de l’image identique à celle de la vue.
Syntaxe: void UIGraphicsBeginImageContext (taille CGSize);
#define IMAGE(imageName) (UIImage *)[UIImage imageWithContentsOfFile:
[[NSBundle mainBundle] pathForResource:imageName ofType:IMAGE_TYPE_PNG]]
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@“MyImage.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:IMAGE(@"mainBg")];
La réponse marquée est correcte, mais l’image est étirée… __. Dans mon cas, j’avais une petite image en mosaïque que je voulais répéter et non étirer. Et le code suivant était le meilleur moyen pour moi de résoudre le problème de fond noir:
UIImage *tileImage = [UIImage imageNamed:@"myTileImage"];
UIColor *color = [UIColor colorWithPatternImage:tileImage];
UIView *backgroundView = [[UIView alloc] initWithFrame:self.view.frame];
[backgroundView setBackgroundColor:color];
//backgroundView.alpha = 0.1; //use this if you want to fade it away.
[self.view addSubview:backgroundView];
[self.view sendSubviewToBack:backgroundView];
Pour Swift 3.0, utilisez le code suivant:
UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "bg.png")?.drawAsPattern(in: self.view.bounds)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
self.view.backgroundColor = UIColor(patternImage: image)
Solution rapide 4:
@IBInspectable var backgroundImage: UIImage? {
didSet {
UIGraphicsBeginImageContext(self.frame.size)
backgroundImage?.draw(in: self.bounds)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
if let image = image{
self.backgroundColor = UIColor(patternImage: image)
}
}
}