簡體   English   中英

UIImageView.image =…和UIimageView.layer.content =之間的區別

[英]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的方式。

為了澄清起見,每個視圖( UIViewUIImageView等)都有一個.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根據imageOrientationcontentMode等正確繪制。 如果使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM