将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;
哪一个更好?为什么?谢谢!
答案 0 :(得分:0)
当然更好的方法是第一个:
self.imageview.image = [UIImage imageNamed:@"clothing.png"];
实际上,这是为UIImageView
构建的方式。
为了澄清,每个视图(UIView
,UIImageView
等)都有一个.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
正确地绘制imageOrientation
,contentMode
等等。如果您使用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。
所以请始终使用imageView.image
,除非您知道自己在做什么。