2012-04-03 22 views
34

ich auf einem UIView.iOS UIView Hintergrundbild

Hier ein UIImage als Hintergrundbild haben will, 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 skaliert 640 bis 480, also kann ich es nicht 100% sicher sagen, aber es sieht so aus, als ob nur 300 bis 250 angezeigt wird oder so ähnlich.

Gibt es eine Anpassung an UIView/fit to size modus?

+0

Was ist die Größe des ursprünglichen PNG? Siehst du das auch auf einem Retina-Gerät? –

Antwort

7

Nach der UIColor API:

Sie Musterfarben können Sie die Fläche oder Kontur Farbe einzustellen wie würden Sie eine feste Farbe. Während des Zeichnens wird das Bild in der Musterfarbe nach Bedarf gekachelt, um den gegebenen Bereich abzudecken.

Das bedeutet, es versucht, ein Muster aus Ihrem Bild zu erstellen, um den Bereich zu füllen. Ich denke, der beste Weg ist, das Bild so zu skalieren, dass es exakt der Größe UIView entspricht.

Es gibt eine nette Antwort hier, wie Ihr Bild während der Laufzeit, um die Größe:

The simplest way to resize an UIImage?

27

hallo versuchen diese,

 self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"login.png"]]; 
+0

Funktioniert nicht ... – Kovu

+1

beste Antwort, klar und funktioniert sofort. Perfekt für eine schnelle Recherche. – Heckscheibe

+0

Funktioniert nicht korrekt. – bapi

12

Geben Sie einen aktuellen Hintergrund und auf der Rückseite Ihrer Ansicht senden

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

Sie verpflichtet sind, Um Ihr Bild zu 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]; 
+0

Vielen Dank, es hat gut für mich funktioniert – swiftBoy

+0

Dies ist die richtigste Art zu tun ... arbeitete für mich..Thanks. – bapi

+2

in swift: https://gist.github.com/asiviero/c9e63b3607bf58373cab – asiviero

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

Fügen Sie im Interface Builder Image View zu View hinzu und wählen Sie das Bild aus, das Sie in Attributes inspector verwenden möchten. Schließlich machen Sie das Image View das allererste Kind des View, indem Sie das Element in Document Outline ziehen.

0

Wenn die Ansicht die gleiche Größe haben wird, können Sie eine Methode in Ihrem AppDelegate.m platzieren, die das Hintergrundbild auf dem ersten Lauf skaliert, und dann hält das skalierte Bild im Speicher für die zukünftige Verwendung:

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!

6

Und wenn Sie wollen, dass es in swift tun:

self.view.backgroundColor = UIColor(patternImage: UIImage(named:"background.jpg")) 
+0

ändern und ja, ich möchte es in Swift: D tun –

-1
this.View.BackgroundColor = UIColor.FromPatternImage (UIImage.FromFile ("body_background.png")); 
0

Sie UIGraphicsBeginImageContext Methode können gleiche die Größe des Bildes festgelegt, dass der Ansicht.

Syntax: void UIGraphicsBeginImageContext (CGSize-Größe);

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

In Swift Verwendung dieses ...

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

    var image: UIImage = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 

    self.view.backgroundColor = UIColor(patternImage: image) 
2

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) 
    } 
} 

In Code können Sie wie folgt verwenden:

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

Ich wollte auch, dies zu tun, und ich fand, dass aufgrund automatischen Layout, die UIImageView erstreckt sich das enthaltende UIView, wenn ich es in die andere Richtung wollen: Ich möchte die UIImageView die Größe des UIView zu nehmen.

Also habe ich diese Klasse erstellt. Es aktualisiert den UIImageView Rahmen entsprechend dem UIView Behälter, wann immer es über layoutSubviews ausgelegt 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:)") } 
} 
Verwandte Themen