wake-up-neo.net

So füllen Sie das Hintergrundbild einer UIView

Ich habe eine UIView und ich setze ein Hintergrundbild auf diese Weise:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"sfond-appz.png"]];

Mein Problem ist, dass das Hintergrundbild nicht in der Ansicht zentriert ist, es wurde jedoch einige Male abgespielt, um die gesamte Ansicht zu füllen. Gibt es eine Möglichkeit, das Bild in uiview zu zentrieren und die Bildschirmgröße zu bestimmen? 

Hinweis: Ich kann UIImageView nicht für Hintergrund verwenden, da ich scrollview habe.

65
JackTurky

Sie müssen das Bild zuvor bearbeiten, um ein zentriertes und gestrecktes Bild zu erstellen. 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];
274
mr.pppoe

Für Swift verwenden Sie diese ...

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

Die colorWithPattern:-Methode dient zum Erzeugen von Mustern aus Bildern. Daher ist die von Ihnen benötigte Anpassung höchstwahrscheinlich nicht möglich und auch nicht beabsichtigt. 

In der Tat müssen Sie eine UIImageView verwenden, um ein Bild zu zentrieren und zu skalieren. Die Tatsache, dass Sie eine UIScrollView haben, verhindert dies nicht: 

Machen Sie self.view zu einer generischen Ansicht, und fügen Sie dann sowohl die UIImageView als auch die UIScrollView als Unteransichten hinzu. Stellen Sie sicher, dass alle Komponenten im Interface Builder korrekt verkabelt sind, und machen Sie die Hintergrundfarbe der Bildlaufansicht transparent. 

Dies ist IMHO das einfachste und flexibelste Design für zukünftige Änderungen.

17
Mundi

Wiederholung:  

UIImage *img = [UIImage imageNamed:@"bg.png"];
view.backgroundColor = [UIColor colorWithPatternImage:img];

Gestreckt

UIImage *img = [UIImage imageNamed:@"bg.png"];
view.layer.contents = img.CGImage;
14

Für Swift 2.1 verwenden Sie diese ...

    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

Richtige Vorgehensweise in Swift 4 , Wenn Ihr Bild als Bildschirmgröße korrekt ist, setzen Sie es an eine andere Stelle, wichtig, dies in viewDidLayoutSubviews zu schreiben, da wir in viewDidLayoutSubviews einen aktuellen Frame erhalten können

   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

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

Die markierte Antwort ist in Ordnung, aber das Bild wird gestreckt ... In meinem Fall hatte ich ein kleines Kachelbild, das ich nicht wiederholen wollte. Und der folgende Code war der beste Weg, um das Problem mit dem schwarzen Hintergrund zu lösen:

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

Verwenden Sie für Swift 3.0 den folgenden Code: 

    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

Swift 4 Lösung:

@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