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?
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:
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];
bonjour essayez ceci,
self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]];
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;
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)
Et si vous voulez le faire à Swift:
self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg"))
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)
}
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
.
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!
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")];
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:)") }
}
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]];
self.view.backgroundColor = background;
[background release];