2016-11-02 4 views
2

Ich möchte Etikett in ein Bild, das ein rotes Rechteck mit Eckenradius ist (unter der Bedingung, dass die Bildgröße gleich oder etwas höher als die Bezeichnung eins sein muss). Dafür habe ich eine ähnliche question gefunden. Getestet habe ich diese:Swift: Machen Sie ein Bild im Hintergrund des Etiketts

theLabel.backgroundColor = UIColor(patternImage: UIImage(named: "blah")!) 

Aber ich habe Probleme mit der Bildgröße. So testete ich die zweite Antwort:

UILabel *myLabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)]; 

UIImage *img = [UIImage imageNamed:@"a.png"]; 
CGSize imgSize = myLabel.frame.size; 

UIGraphicsBeginImageContext(imgSize); 
[img drawInRect:CGRectMake(0,0,imgSize.width,imgSize.height)]; 
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

myLabel.backgroundColor = [UIColor colorWithPatternImage:newImage]; 

die letzte Version von Xcode (Xcode 8.0) mit den CGRectMake nicht verfügbar ist.

Kann mir bitte jemand helfen?

+0

Warum gehst du nicht einfach verwenden '' UIImageView' und UILabel' mit der gleiche Rahmen? – alexburtnik

+0

Wie wäre es mit dem Erstellen der UIImageView zuerst und legen Sie das gewünschte Bild darauf. Fügen Sie dann das Label als Unteransicht hinzu. – Windindi

+0

wegen der Größe UIImageView. Mein Bild ist manchmal größer als der darin enthaltene Text. –

Antwort

3

Versuchen Sie diesen Code: Getestet in Swift 3.

Antwort 1:

override func viewDidLoad() { 
    super.viewDidLoad() 

    let label = UILabel() 
    label.frame = CGRect(x:0, y:0, width:imageView.frame.width , height:imageView.frame.height) 
    label.text = "Some Title" 
    label.textAlignment = .center 
    label.textColor = .yellow 
    label.font = UIFont(name: "HelveticaNeue-medium", size: CGFloat(20)) 
    imageView.addSubview(label) 
} 

Ausgang:

enter image description here

Antwort 2:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    imageView.layer.cornerRadius = 10 
    imageView.layer.masksToBounds = true 

    let label = UILabel() 
    label.frame = CGRect(x:0, y:0, width:imageView.frame.width , height:imageView.frame.height) 
    label.text = "Some Title" 
    label.textAlignment = .center 
    label.textColor = .yellow 
    label.layer.borderColor = UIColor.red.cgColor 
    label.layer.cornerRadius = 10 
    label.layer.masksToBounds = true 
    label.layer.borderWidth = 5 
    label.font = UIFont(name: "HelveticaNeue-medium", size: CGFloat(26)) 

    imageView.addSubview(label) 
} 

Hinweis Aktualisiert: Sie müssen die Bildgröße und Etikettenschriftgröße zu trainieren.

Ausgang:

enter image description here

+0

Ich denke, dass in diesem Fall die Label-Frame-Größe auf das Bild eins gesetzt ist, aber was ich will ist, dass die Bildgröße ähnlich dem Label eins sein –

+0

Danke für das Update aber wird das Bild in Abhängigkeit von dem darin enthaltenen Text in der Größe verändert? –

0

Ihr Ziel Code c in Frage geändert wird in schnellen 3,0

var myLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21)) 

var img = UIImage(named:"a") 

var imgSize : CGSize = myLabel.frame.size 

UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight)) 

image.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight)) 

let newImage = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

myLabel.backgroundColor = UIColor(patternImage: newImage) 
Verwandte Themen