热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析UIImageView与UIImage的关键细节与应用技巧

本文深入探讨了UIImageView和UIImage的核心特性及应用技巧。首先,详细介绍了如何在UIImageView中实现动画效果,包括创建和配置UIImageView实例的具体步骤。此外,还探讨了UIImage的加载方式及其对性能的影响,提供了优化图像显示和内存管理的有效方法。通过实例代码和实际应用场景,帮助开发者更好地理解和掌握这两个重要类的使用技巧。

1、设置动画

 1 // 1)添加imageView
 2 UIImageView *imageView = [[UIImageView alloc]
 3 initWithFrame:self.bounds];
 4 // 2)动画照片数组
 5 NSMutableArray*arrM = [NSMutableArrayarray];
 6 for (inti = 1; i <9;i++) {
 7 UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%d",i]];
 8 [arrM addObject:image]; 
 9 }
10 // 3)给照片数组赋给imageView的动画数组
11 imageView.animatiOnImages= arrM;
12 // 4)设置动画播放属性
13 imageView.animatiOnRepeatCount=1;
14 imageView.animatiOnDuration=0.5;
15 // 5)开始动画
16 [imageView startAnimating];
17 [self addSubview:imageView];

 

 2、将图片按原始尺寸添加到ImageView上
(1)storyboard或xib中实现:
在imageView的Mode属性中设置center;

(2)在图片中实现:
1】

2】

3】在render As中选择Original Image即可


(3)代码实现:

 1 // 调用UIImage的对象方法---设置UIImageRenderingMode参数为:UIImageRenderingModeAlwaysOriginal
 2 - (UIImage *)imageWithRenderingMode:(UIImageRenderingMode)renderingMode;
 3 
 4 // 示例:如果一个项目中多处用到以上方法:即将图片按原尺寸添加,可以给UIImage添加一个分类:
 5 
 6 // 1】.h文件
 7 @interface UIImage (Image)
 8 // 快速的返回一个最原始的图片
 9 + (instancetype)imageWithOriRenderingImage:(NSString *)imageName;
10 @end
11 
12 // 2】.m文件
13 #import 
14 #import "UIImage+Image.h"
15 @implementation UIImage (Image)
16 + (instancetype)imageWithOriRenderingImage:(NSString *)imageName
17 {
18 UIImage *image = [UIImage imageNamed:imageName];
19 // UIImageRenderingModeAlwaysOriginal--保持原始图片模式
20 return[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
21 }
22 
23 @end

 


 3、将小图片拉伸填充ImageView---并保证拉伸后的像素与之前一样
(1)图片中实现:
1】

2】

3】在Slices中选择Horizontal and Vertical即可

(2)代码实现:

 1 // 调用UIImage的对象方法---设置UIImageRenderingMode参数为:UIImageRenderingModeAlwaysOriginal
 2 - (UIImage *)stretchableImageWithLeftCapWidth: topCapHeight: ;
 3 
 4 // 示例:如果一个项目中多处用到以上方法:即将图片图片拉伸添加,可以给UIImage添加一个分类:
 5 // .h 文件
 6 #import 
 7 @interface UIImage (ICKImage)
 8 
 9 + (UIImage *)imageWithStretchableImageName:(NSString *)imageName;
10 
11 @end
12 
13 // .m 文件
14 + (UIImage *)imageWithStretchableImageName:(NSString *)imageName
15 {
16 UIImage *image = [UIImage imageNamed:imageName];
17 /*
18 * LeftCapWidth:图片水平拉伸的点,设为0.5,即是从水平中点拉伸
19 * topCapHeight:图片竖直拉伸的点,设为0.5,即是从竖直中点拉伸
20 */
21 return[image stretchableImageWithLeftCapWidth:0.5topCapHeight:0.5];
22 }

 

 

4、将矩形图片截成圆角图片:图层方法和绘画方法
(1) 利用图层实现:

1 // 设置头像圆角半径
2 self.titleImage.layer.cornerRadius =self.titleImage.frame.size.width*0.5;
3 //切除圆角以外部分
4 self.titleImage.layer.masksToBounds= YES;
5 //设置圆角边缘宽度(如果不需要边缘,可省略)
6 self.titleImage.layer.borderWidth= 8;
7 //设置边框颜色
8 self.titleImage.layer.borderColor= [UIColorcolorWithRed:36/225.0green:36/225.0blue:36/225.0alpha:1].CGColor;

 

(2)利用绘画实现

// 给image添加一个圆角图片方法
-(UIImage*)circleImage
{
// 开启图片上下文
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0);
// 获取图片上下文
CGCOntextRefctx= UIGraphicsGetCurrentContext();
// 给上下文添加一个圆
CGRect circle =CGRectMake(0,0, self.size.width,self.size.height);
CGContextAddEllipseInRect(ctx, circle);
// 剪切图片上下文
CGContextClip(ctx);
// 将图片画至剪切的上下文
[self drawInRect:circle];
// 从上下文获取图片
UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
return image;
}

**特别提醒:**
*虽然图层比绘画实现起来简单,但是通过图层设置时,系统内部会进行一系列的底层操作,从而会导致内部运行不流畅,尤其是多个控件的图片通过图层设置成圆角图片。
建议:
1、涉及较少量的图片进行圆角图片设置时,可运用图层设置;
2、如果是很多图片进行圆角图片设置时,最好使用绘画,不会太消耗内部资源。*


推荐阅读
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
author-avatar
春_来_茶_馆5
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有