[英]Difference between UIImageView.hidden and UIImageView.image = nil
[英]difference between UIImageView.image = … and UIimageView.layer.content =
將UIImage
設置為A UIImageView
兩種方法:
第一:
self.imageview.image = [UIImage imageNamed:@"clothing.png"];
第二:
self.imageview.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]);
兩種方式有什么區別?
哪一個更好?
實際上,我要做的是在UIImageView中顯示一個PNG的一部分。 有兩種方法:
第一:
UIImage *image = [UIImage imageNamed:@"clothing.png"];
CGImageRef imageRef = CGImageCreateWithImageInRect(image, rect);
self.imageview.image = [UIImage imageWithCGImage:imageRef];
第二:
self.imageview2.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]);//way2
self.imageview2.layer.contentsRect = rect;
哪一個更好? 為什么? 謝謝!
當然,更好的方法是第一個:
self.imageview.image = [UIImage imageNamed:@"clothing.png"];
實際上,這就是構建UIImageView
的方式。
為了澄清起見,每個視圖( UIView
, UIImageView
等)都有一個.layer
屬性以在其上添加視覺內容。 在這里,您要在其中添加圖片。 您可以使用單個UIView
獲得相同的結果。 但是,就性能而言,您應該(必須)使用.image
屬性。
編輯:
即使進行了新的編輯,第一個選項仍然是更好的選擇。
首先 :
self.imageview.image = [UIImage imageNamed:@"clothing.png"];
通過使用此功能,您可以將圖像直接分配給任何UIImageView
第二 :
self.imageview.layer.contents = (__bridge id _Nullable)([[UIImage imageNamed:@"clothing.png"] CGImage]);
您不能將圖像直接分配給圖層。 因此您需要將CGImage放入圖層中。
因此,First永遠是最好的。 謝謝。
第一種選擇更好,在引入ARC之前先使用Bridge概念
您可以執行此操作,但是您有責任修改圖像以使該圖像image.CGImage
根據imageOrientation
, contentMode
等正確繪制。 如果使用imageView.image = image;
設置imageView.image = image;
,這樣做是蘋果的責任。
我給您提供一個導致問題的示例:由於image.CGImage
不包含圖像方向,因此如果直接設置它並且源圖像不是UIImageOrientationUp
,則圖像將被旋轉,除非您“固定”圖像的方向。這樣的源圖像。 (您可以獲得的圖像不是UIImageOrientationUp
,只需使用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;
}
這是兩個屏幕截圖,第一個是將image.CGImage直接設置為layer.contents,第二個是將圖像設置為imageView.image。
因此,除非您知道自己在做什么,否則請始終使用imageView.image
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.