Ich möchte eine UIImage
als Hintergrundbild auf einem UIView.
haben.
Hier ist mein Code:
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"login.png"]];
self.view.backgroundColor = background;
[background release];
Das Problem ist, dass die Waage nicht in Ordnung ist. Es skalierte 640 bis 480, daher kann ich es nicht 100% sicher sagen, aber es sieht so aus, als ob nur 300 bis 250 angezeigt werden oder so ähnlich.
Gibt es eine Anpassung an UIView/Anpassung an den Größenmodus?
Gemäß der UIColor
-API:
Sie können Musterfarben verwenden, um die Füll- oder Strichfarbe genau wie eine Volltonfarbe festzulegen. Während des Zeichnens wird das Bild in der Musterfarbe nach Bedarf gekachelt, um den angegebenen Bereich abzudecken.
Das bedeutet, dass versucht wird, ein Muster aus Ihrem Bild zu erstellen, um den Bereich auszufüllen. Ich denke, der optimale Weg, dies zu tun, besteht darin, Ihr Bild so zu skalieren, dass es genau der UIView
-Größe entspricht.
Es gibt eine nette Antwort, wie Sie die Größe Ihres Bildes zur Laufzeit ändern können:
sie müssen Ihr Bild bearbeiten, bevor Sie es hinzufügen. Versuchen Sie Folgendes:
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.view.backgroundColor = [UIColor colorWithPatternImage:image];
hallo versuch das,
self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]];
Geben Sie einen tatsächlichen Hintergrund an und senden Sie ihn an die Rückseite Ihrer Ansicht
//add background
UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bg.png"]];
[myView addSubview:background];
[myView sendSubviewToBack:background];
myView.contentMode = UIViewContentModeScaleAspectFit;
In Swift benutze das ...
UIGraphicsBeginImageContext(self.view.frame.size)
UIImage(named: "1.png")?.drawInRect(self.view.bounds)
var image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.view.backgroundColor = UIColor(patternImage: image)
Und wenn Sie es in Swift tun wollen:
self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg"))
Ich verwende die folgende Erweiterung in 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)
}
}
Im Code kannst du so verwenden:
if let image = UIImage(named: "HomeBg"){
self.view.setBackgroundImage(image)
}
Fügen Sie im Interface Builder einen Image View
zu View
hinzu und wählen Sie das gewünschte Bild in Attributes inspector
aus. Machen Sie schließlich den Image View
zum allerersten Kind der View
, indem Sie das Element in Document Outline
ziehen.
Wenn die Ansicht dieselbe Größe haben soll, können Sie eine Methode in Ihren AppDelegate.m
einfügen, mit der das Hintergrundbild beim ersten Durchlauf skaliert wird. Das skalierte Bild bleibt dann für eine spätere Verwendung im Speicher:
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];
}
Danke an @uneakharsh für seine Hilfe!
Sie können die UIGraphicsBeginImageContext -Methode verwenden, um die Größe des Bildes auf die Größe der Ansicht festzulegen.
Syntax: void UIGraphicsBeginImageContext (CGSize size);
#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")];
Ich wollte das auch tun und fand heraus, dass UIImageView
aufgrund von autolayout die enthaltende UIView
dehnt, wenn ich es anders will: Ich möchte, dass UIImageView
die Größe der UIView
nimmt.
Also habe ich diese Klasse erstellt. Es aktualisiert den UIImageView
-Rahmen entsprechend dem UIView
-Container, wenn er über layoutSubviews
angelegt wird.
/**
* 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];