2016-06-23 14 views
0

Zwei Möglichkeiten der Set UIImage zu A UIImageView:Unterschied zwischen UIImageView.image = ... und UIimageView.layer.content =

Erstens:

self.imageview.image = [UIImage imageNamed:@"clothing.png"]; 

Zweitens:

self.imageview.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]); 

Was ist der Unterschied zwischen den beiden Möglichkeiten?

welches ist besser?

In fact.What ich tun möchte, ist Teil eines PNG in UIImageView anzeigt. Es gibt zwei Möglichkeiten:

Erstens:

UIImage *image = [UIImage imageNamed:@"clothing.png"]; 
CGImageRef imageRef = CGImageCreateWithImageInRect(image, rect); 
self.imageview.image = [UIImage imageWithCGImage:imageRef]; 

Zweitens:

self.imageview2.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]);//way2 
self.imageview2.layer.contentsRect = rect; 

Welches ist besser? Warum? Vielen Dank!

+0

Erste Option ist besser als zweite .. –

+0

Wenn die 'UIImage' Orientierung nicht' UIImageOrientationUp' ist, können Sie ein anderes Ergebnis erhalten. – KudoCC

+0

Sie können meine Bearbeitung sehen. – AnthoPak

Antwort

0

Natürlich ist der bessere Weg ist die erste:

self.imageview.image = [UIImage imageNamed:@"clothing.png"]; 

der Tat, dies ist die Art und Weise ist ein UIImageView für gebaut wird.

Zur Klarstellung, jede Ansicht (UIView, UIImageView, usw.) hat eine .layer Eigenschaft, um visuellen Inhalt hinzuzufügen. Hier fügen Sie ein Bild hinzu. Sie hätten dasselbe Ergebnis mit einer einzigen UIView erreichen können. Aber in Bezug auf die Leistung und Klarheit sollten (müssen) Sie die Eigenschaft .image verwenden.

Edit:

Auch mit Ihrem neuen bearbeiten, erste Option ist immer noch die bessere.

0

Erste:

self.imageview.image = [UIImage imageNamed:@"clothing.png"]; 

Durch die Verwendung dieser Sie direkt Ihr Bild jeder UIImageView zuweisen Während in

Zweite:

self.imageview.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]); 

Sie nicht Bild zuordnen können direkt schichten. Sie müssen also ein CGImage in eine Ebene einfügen.

So Zuerst ist immer am besten. Vielen Dank.

0

Erste Option ist besser, Brücke Konzept vor der Einführung von ARC verwendet wird

0

Sie können das tun, aber es ist Ihre Verantwortung, um das Bild zu ändern, die image.CGImage respektieren zieht richtig imageOrientation, contentMode und so weiter zu machen. Wenn Sie das Bild mit imageView.image = image; einstellen, ist Apple dafür verantwortlich.

Ich gebe Ihnen ein Beispiel, das das Problem verursacht: als image.CGImage nicht Bildausrichtung enthält, so dass, wenn Sie es direkt eingestellt und wenn das Quellbild nicht UIImageOrientationUp ist, wird das Bild gedreht werden, es sei denn, Sie die „fix Orientierung "des Quellbildes so. (Sie können ein Bild, das nicht UIImageOrientationUp ist, nehmen Sie nur ein Foto mit Ihrem iPhone)

- (UIImage *)fixOrientation { 
    if (self.imageOrientation == UIImageOrientationUp) return self; 

    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); 
    [self drawInRect:(CGRect){0, 0, self.size}]; 
    UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return normalizedImage; 
} 

Hier sind zwei Screenshot, der erste image.CGImage zu layer.contents direkt gesetzt, das zweite ist eingestellt Bild zu imageView.image. enter image description here enter image description here

Also immer imageView.image verwenden, wenn Sie wissen, was Sie tun.