web-dev-qa-db-fra.com

Comment remplir l'image de fond d'un UIView

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.

65
JackTurky

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];
274
mr.pppoe

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")
 }
53
Zaid Pathan

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.

17
Mundi

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;
14
Rajan Twanabashu

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)
3
yazh

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!)
    }
2
Jack

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")];
1
Jayprakash Dubey

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];
1
CSawy

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)
1
farhad rubel

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)
        }
    }
}
0
Maor