webentwicklung-frage-antwort-db.com.de

iOS UIView-Hintergrundbild

Ich möchte eine UIImageals 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?

38
Kovu

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:

Der einfachste Weg, um einen UIImage zu verkleinern?

8
GooKSL

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];
51
uneakharsh

hallo versuch das,

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

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;
11

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)
9
Zaid Pathan

Und wenn Sie es in Swift tun wollen:

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

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)
    }
2
Hossam Ghareeb

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.

1
Dino Tw

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! 

0
Zorayr

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

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:)") }
}
0
Ferran Maylinch
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]];
self.view.backgroundColor = background;
[background release];
0
Manu P