iOS开发基础3-UIImage

在iOS开发中,UIImageUIImageView 是用于处理和显示图像的核心类。UIViewContentMode 则用于控制子视图在其父视图中的位置和缩放方式。下面我们将详细介绍这三个概念,并结合示例代码深入分析它们的用法和特点。

UIImage

UIImage 类表示一个图像对象,包含一个图像的像素数据,并提供了多种方法和属性来处理图像数据。

特点

  • 支持多种图片格式:包括 PNG、JPEG、GIF 等等。
  • 图片加载:从文件、数据、URL 或者内置资源中加载图片。
  • 图片修改:进行拉伸、裁剪、缩放等图像处理。

用法示例

// 从文件加载图片
UIImage *imageFromFile = [UIImage imageNamed:@"example.png"];

// 从数据加载图片
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://example.com/image.png"]];
UIImage *imageFromData = [UIImage imageWithData:imageData];

// 调整大小
CGSize newSize = CGSizeMake(100, 100);
UIGraphicsBeginImageContext(newSize);
[imageFromFile drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

底层实现

UIImage 的底层实现主要依赖于 Core Graphics 框架,用于处理位图和向量图像。它通过 CGImage 对象来管理图像的实际像素数据,而 UIImage 本身是这些低级图像数据的高层次封装。

UIImageView

UIImageView 是一个用于显示 UIImage 对象的视图,它是 UIView 的子类。它不仅能显示静态图片,还能显示动画图片。

特点

  • 高效的图片呈现:直接将 UIImage 对象渲染到视图中。
  • 动画支持:可以显示一系列图片形成的动画。
  • 内容模式:通过 UIViewContentMode 属性来控制图片在视图中的显示方式。

用法示例

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 110, 300, 200)];
imageView.image = [UIImage imageNamed:@"example.png"];
imageView.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:imageView];

// 设置动画图片
NSArray *imageArray = @[[UIImage imageNamed:@"frame1.png"], [UIImage imageNamed:@"frame2.png"], [UIImage imageNamed:@"frame3.png"]];
imageView.animationImages = imageArray;
imageView.animationDuration = 1.0; // 1秒一轮动画
[imageView startAnimating];

底层实现

UIImageView 的底层实现依赖于 Core Animation。它通过 CALayercontents 属性来显示图像,并通过 CABasicAnimation 等实现图片动画。具体来说,UIImageView 会根据 UIImage 的内容创建一个 CAContentLayer,然后把图像数据存放在这个图层的 contents 属性中,最后通过 draw 方法进行渲染。

UIViewContentMode

UIViewContentModeUIView 的一个属性,用于控制子视图在其父视图中的显示和对齐方式。常见的模式包括:

  • scaleToFill:拉伸内容以填充视图边界(不按比例)。
  • scaleAspectFit:按比例缩放内容以适应视图边界(内容可能会留空白)。
  • scaleAspectFill:按比例缩放内容以填充视图边界(内容可能会裁剪)。
  • center:不缩放,内容保持在视图中心。

用法示例

UIImageView *imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(10, 320, 100, 100)];
imageView1.image = [UIImage imageNamed:@"example.png"];
imageView1.contentMode = UIViewContentModeScaleToFill;
[self.view addSubview:imageView1];
    
UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(120, 320, 100, 100)];
imageView2.image = [UIImage imageNamed:@"example.png"];
imageView2.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:imageView2];
    
UIImageView *imageView3 = [[UIImageView alloc] initWithFrame:CGRectMake(230, 320, 100, 100)];
imageView3.image = [UIImage imageNamed:@"example.png"];
imageView3.contentMode = UIViewContentModeScaleAspectFill;
[self.view addSubview:imageView3];

UIImageView *imageView4 = [[UIImageView alloc] initWithFrame:CGRectMake(340, 320, 100, 100)];
imageView4.image = [UIImage imageNamed:@"example.png"];
imageView4.contentMode = UIViewContentModeCenter;
[self.view addSubview:imageView4];

总结

UIImage

优点

  • 支持多种格式。
  • 多种初始化方式(文件、数据、URL等)。
  • 提供图像处理功能(拉伸、裁剪、缩放等)。

缺点

  • 主要用于图像数据处理,不涉及图像展示。

底层逻辑

  • 基于 Core Graphics,使用 CGImage 管理像素数据。

UIImageView

优点

  • 高效展示图片。
  • 支持图片动画。
  • 支持不同的内容模式(通过 UIViewContentMode)。

缺点

  • 仅用于图像展示,不处理图像数据。

底层逻辑

  • 基于 Core Animation,通过 CALayercontents 属性和动画实现。

UIViewContentMode

优点

  • 灵活控制子视图在父视图中的展示方式。

缺点

  • 仅控制视图内容的对齐和缩放,不涉及具体图像或图层。

总结

  • UIImage 是图像数据的封装,用于处理和操作图像。
  • UIImageView 用于显示 UIImage 对象,高效且支持动画。
  • UIViewContentMode 控制内容在视图中的显示方式,提供多种模式适应不同需求。

理解这些类和属性的特点及底层逻辑,有助于在开发中更高效地使用它们,提高应用的性能和用户体验。

posted @ 2015-07-15 02:19  Mr.陳  阅读(4467)  评论(0编辑  收藏  举报