web-dev-qa-db-fra.com

image d'arrière-plan iOS UIView

Je veux avoir une UIImage comme une image d'arrière-plan sur un UIView.

Voici mon code:

UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login.png"]];
self.view.backgroundColor = background;
[background release];

Le problème est que l'échelle n'est pas correcte. Il a été mis à l'échelle de 640 à 480, donc je ne peux pas le dire à 100%, mais il semble que seulement 300 à 250 s'affiche ou quelque chose comme ça.

Existe-t-il un ajustement pour adapter/adapter à UIView/adapter à la taille modus?

38
Kovu

Selon l'API UIColor:

Vous pouvez utiliser les couleurs de motif pour définir la couleur de remplissage ou de trait comme vous le feriez pour une couleur unie. Pendant le dessin, l’image dans la couleur du motif est mise en mosaïque si nécessaire pour couvrir la zone donnée.

Cela signifie qu'il essaie de créer un motif à partir de votre image pour remplir la zone. Je pense que la meilleure façon de le faire est de redimensionner votre image pour l’adapter exactement à la taille UIView.

Il y a une bonne réponse ici comment redimensionner votre image pendant l'exécution:

Le moyen le plus simple de redimensionner un UIImage?

8
GooKSL

vous devez traiter votre image avant de l'ajouter, essayez ceci: 

UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.view.backgroundColor = [UIColor colorWithPatternImage:image];
51
uneakharsh

bonjour essayez ceci,

     self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]];
27
Dipak Chaudhari

Spécifiez un arrière-plan réel et envoyez-le à l'arrière de votre vue. 

//add background
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg.png"]];
[myView addSubview:background];
[myView sendSubviewToBack:background];
myView.contentMode = UIViewContentModeScaleAspectFit;
11
girl_meets_droid

Dans Swift use this ...

    UIGraphicsBeginImageContext(self.view.frame.size)
    UIImage(named: "1.png")?.drawInRect(self.view.bounds)

    var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    self.view.backgroundColor = UIColor(patternImage: image)
9
Zaid Pathan

Et si vous voulez le faire à Swift:

self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg"))
7
Kevin Delord

J'utilise l'extension suivante dans Swift:

extension UIView{

    func setBackgroundImage(img: UIImage){

        UIGraphicsBeginImageContext(self.frame.size)
        img.drawInRect(self.bounds)
        let patternImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        self.backgroundColor = UIColor(patternImage: patternImage)
    }
}

Dans le code, vous pouvez utiliser comme ceci:

if let image = UIImage(named: "HomeBg"){
        self.view.setBackgroundImage(image)
    }
2
Hossam Ghareeb

Dans Interface Builder, ajoutez un Image View à View et sélectionnez l'image que vous souhaitez utiliser dans Attributes inspector. Enfin, faites de Image View le tout premier enfant de View en faisant glisser l’élément dans Document Outline.

1
Dino Tw

Si la vue a la même taille, vous pouvez placer une méthode dans votre AppDelegate.m qui redimensionne l'image d'arrière-plan lors de la première exécution, puis conserve en mémoire l'image redimensionnée pour une utilisation ultérieure:

UIImage *backgroundImage = nil;
- (void)setBackground:(UIView *)view
{
    if (backgroundImage == nil)
    {
        UIGraphicsBeginImageContext(view.frame.size);
        [[UIImage imageNamed:@"Background"] drawInRect:view.bounds];
        backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    view.backgroundColor = [UIColor colorWithPatternImage:backgroundImage];
}

Merci à @uneakharsh pour son aide! 

0
Zorayr

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

Je voulais aussi faire cela et j’ai trouvé que, en raison de autolayout , la variable UIImageView étend la variable UIView contenant, lorsque je le veux dans l’autre sens: je veux que la variable UIImageView prenne la taille de la variable UIView.

Alors j'ai créé cette classe. Il met à jour le cadre UIImageView en fonction du conteneur UIView chaque fois qu'il est structuré via layoutSubviews.

/**
 * View with an image whose frame is adjusted to the frame of the view. 
 */
class ViewWithImage: UIView {

    let image: UIImageView

    init(image: UIImageView) {
        self.image = image
        super.init(frame: .zero)
        self.addSubview(image)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        updateImageFrame()
    }

    private func updateImageFrame() {
        image.frame = CGRect(Origin: .zero, size: self.frame.size)
    }

    required init?(coder: NSCoder) { fatalError("no init(coder:)") }
}
0
Ferran Maylinch
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]];
self.view.backgroundColor = background;
[background release];
0
Manu P