2016-05-17 19 views
0

ich Bilder für Schaltflächen wie diese bin Einstellung:swift Bild für Knopf ist zu groß

let itemImageURL = "\(self.view.getServerPath())image?path=\(league.logo!)" 
let url = NSURL(string: itemImageURL) 
let data = NSData(contentsOfURL: url!) 
button.setImage(UIImage(data: data!), forState: UIControlState.Normal) 

Sie erscheinen vor dem Button-Text, und es ist genau das, was ich will. Aber wie kann ich die Bilder kleiner machen?

+0

Sie Inhaltskante Einsatz von Taste für beide einstellen Titel und Bild können Sie festlegen, um Bild/Titel kleiner zu machen. –

+0

Ich habe versucht und es scheint nicht die Größe des Bildes zu beeinflussen. Ich muss erwähnen, dass meine Taste ist so breit wie der Bildschirm und hat den Titel und das Bild zentriert – asheyla

Antwort

0

Die Antwort in den Skalenparameter für UIImage wurde mit:

button.setImage(UIImage(data: data!, scale: 3), forState: UIControlState.Normal) 
0

die Größe des Bildes auf Knopfgröße, und fügen Sie es als Hintergrundbild

func resizeImageWithAspect(image: UIImage,size: CGSize)->UIImage 
{ 
    let oldWidth = image.size.width; 
    let oldHeight = image.size.height; 

    let scaleFactor = (oldWidth > oldHeight) ? size.width/oldWidth : size.height/oldHeight; 

    let newHeight = oldHeight * scaleFactor; 
    let newWidth = oldWidth * scaleFactor; 
    let newSize = CGSizeMake(newWidth, newHeight); 

    if UIScreen.mainScreen().respondsToSelector(#selector(NSDecimalNumberBehaviors.scale)){ 
     UIGraphicsBeginImageContextWithOptions(newSize,false,UIScreen.mainScreen().scale); 
    } 
    else 
    { 
     UIGraphicsBeginImageContext(newSize); 
    } 

    image.drawInRect(CGRectMake(0, 0, newSize.width, size.height)); 
    let newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return newImage; 
} 

Verwendung:

button.setBackgroundImage(resizeImageWithAspect(UIImage(data: data!)!,size:button.bounds.size), forState: .Normal); 
button.contentMode = UIViewContentMode.ScaleAspectFit; 
button.clipsToBounds = true; 

Warnung an Ihrem Code Sie

schrieb
let url = NSURL(string: itemImageURL) 
let data = NSData(contentsOfURL: url!) 

Tun Sie dies in main thread ist eine wirklich schlechte Idee! werfen Sie einen Blick auf die nächsten Code:

let url = NSURL(string: "https://abrahampacana.files.wordpress.com/2013/10/quabbin-11.jpg") 
print(NSDate().timeIntervalSince1970) //1463505118 
let data = NSData(contentsOfURL: url!) 
print(NSDate().timeIntervalSince1970) //1463505138 

diese Belastung

20 Sekunden

dieser 20 Sekunden ist war, dass die App klemmt und Benutzer warten, wenn nichts passiert, und nichts reagiert. sollten Sie zumindest Hintergrund-Thread verwenden

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)) { 
    //this is background thread 
    let url = NSURL(string: "https://abrahampacana.files.wordpress.com/2013/10/quabbin-11.jpg") 
    let data = NSData(contentsOfURL: url!) 

    //now return to main thread to update the view 
    //UI should always update from main thread 
    dispatch_async(dispatch_get_main_queue()){ 
     button.setImage(...) 
    } 
} 

eine andere Lösung: NSURLSession

+0

großen Rat beachten Sie mit dispatch_async. Vielen Dank! – asheyla