UIImageView.image = ...和UIimageView.layer.content =之间的区别

时间:2016-06-23 09:32:10

标签: ios uiimageview uiimage

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;

哪一个更好?为什么?谢谢!

4 个答案:

答案 0 :(得分:0)

当然更好的方法是第一个:

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

实际上,这是为UIImageView构建的方式。

为了澄清,每个视图(UIViewUIImageView等)都有一个.layer属性,可以在其上添加可视内容。在这里你要添加一个图像。您可以使用单个UIView获得相同的结果。但是,在表演术语和清晰度方面,您应该(必须)使用.image属性。

修改:

即使使用新的编辑,第一个选项仍然是更好的选择。

答案 1 :(得分:0)

<强>第一

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

使用此功能,您可以在

中直接将图像分配给任何UIImageView

<强>第二

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

您无法直接将图像分配给图层。所以你需要把CGImage放到一个图层中。

所以First永远是最好的。谢谢。

答案 2 :(得分:0)

第一个选项更好,在引入ARC之前使用Bridge概念

答案 3 :(得分:0)

您可以这样做,但您有责任修改图片,使image.CGImage正确地绘制imageOrientationcontentMode等等。如果您使用imageView.image = image;设置图片,那么苹果有责任这样做。

我举一个导致问题的例子: 由于image.CGImage不包含图像方向,因此如果您直接设置它并且源图像不是UIImageOrientationUp,则图像将被旋转,除非您&#34;修正方向&#34; 34;像这样的源图像。 (您可以获得不是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,第二个是将image设置为imageView.image。 enter image description here enter image description here

所以请始终使用imageView.image,除非您知道自己在做什么。