模仿系统的UIImageView
整体思路:
我们想要模仿系统的UIImageView,我们必须得要知道系统的UIView怎么用.
系统的用法是创建一个UIImageView对象,设置frame,给它传递一个UIImage,再把它添加到一个View上面就可以了.
可以切换图片.
这是第一个用法.
第二种用法,就是在创建的时候直接传递一个UIImage对象,使用initWithImage的方法进行创建一个UImageView的方式
用这种做法创建出来的UIImageView它的尺寸大小和原始图片的尺寸大小一样大.
所以我们自己的UIImageView也要具有这些功能.
实现步骤:
第一步:新建一个UIView,起名XMGImageView.
第二步:给XMGImageView添加一个UIImage属性,供外界传递图片
第三步:在DrawRect方法当中把传递的图片绘制到View上面
绘制方法为:[_image drawInRect:rect],绘制的图片尺寸大小和UIView的尺寸大小一样大.
第四步:重写UIImage属性的set方法,在set方法当中让View重新绘制.目的为了能够办到切换图片.
第五步:提供一个- (instancetype)initWithImage:(UIImage *)image方法.
在这个方法当中重写init方法
在初始化时,让View尺寸和图片的实际大小一样大.
然后再给UIImage属性赋值.
这样在绘制图片的时候,显示出来的View已经有尺寸了, 尺寸大小和图片的实际大小一样大.
具体代码实现:
- (instancetype)initWithImage:(UIImage *)image{
if (self = [super init]) {
self.frame = CGRectMake(0, 0, image.size.width, image.size.height);
_image = image;
}
return self;
}
-(void)setImage:(UIImage *)image{
_image = image;
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
[_image drawInRect:rect];
}
模仿系统的UIImageView的更多相关文章
- 06-模仿系统的UIImageView
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 模仿系统C键功能菜单
1.可以拖拽C键 2.依赖zepto 3.点击弹出菜单 效果预览:
- iOS开发之Quartz2D 六 绘制UIImageView
#import <UIKit/UIKit.h> @interface XMGImageView : UIView /** <#注释#> */ @property (nonato ...
- iOS开发UI篇—Quartz2D(自定义UIImageView控件)
iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义 ...
- [iOS]过渡动画之高级模仿 airbnb
注意:我为过渡动画写了两篇文章:第一篇:[iOS]过渡动画之简单模仿系统,主要分析系统简单的动画实现原理,以及讲解坐标系.绝对坐标系.相对坐标系,坐标系转换等知识,为第二篇储备理论基础.最后实现 Ma ...
- iOS基础常用细节问题处理65条
1. 不可变数组 转变为可变数组 //声明实例变量的数组 必须记得实现 //对于遍历数组找到对象后 如果还需要查找 记得先结束 再查找(return/break) NSArray * arr = ...
- 自定义控件CustomAlertView
[记录][完整代码最下] 效果如下: 可行性分析: 由于系统自带的UIAlertView样式简单,只有两种样式,想要理想的样式就要自定义控件了 文件名取为:CustomAlertView 创建文件如下 ...
- 【Android学习】《Android开发视频教程》第二季笔记(未完待续)
视频地址: http://study.163.com/course/courseMain.htm?courseId=207001 课时22 Activity生命周期(一) 1.如何在一个应用中添加新 ...
- 实现UITableView循环利用
tableViewUITableView循环利用 前言 大家都知道UITableView,最经典在于循环利用,这里我自己模仿UITableView循环利用,写了一套自己的TableView实现方案,希 ...
随机推荐
- ios离线打包报错Showing Recent Messages :-1: HBuilder has conflicting provisioning settings. HBuilder is automatically signed for development, but a conflicting code signing identity iPhone Distribution has
1.解决方案找到项目工程文件右击->显示包内容->双击project.pbxproj->搜索distribution改写成Developer
- Java基础周测一、二(50题)
一.单选题 (共50题,250分) 1.下列选项不可作为Java语言变量名的是( ). A. a1 B. $1 C. _1 D. 21 正确答案: D 2.有一段Java应用程序,它的类名是a1 ...
- Zookeeper基础教程(二):Zookeeper安装
上一篇说了,一个Zookeeper集群一般认为至少需要3个节点,所以我们这里安装需要准备三台虚拟机: # 192.168.209.133 test1 # 192.168.209.134 test2 # ...
- .NET 云原生架构师训练营(组合模式)--学习笔记
目录 引入 组合模式 源码 引入 在上一篇执行 _connectionDelegate 之后,HttpConnectionMiddleware 处理请求 return connection.Proce ...
- Snack3 3.2 发布,轻量的Json+Jsonpath框架
Snack3 是一个轻量的 JSON + Jsonpath 框架. 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表 ...
- Java|从Integer和int的区别认识包装类
https://blog.csdn.net/darlingwood2013/article/details/96969339?utm_medium=distribute.pc_relevant.non ...
- Python常用功能函数系列总结(五)
本节目录 常用函数一:向量距离和相似度计算 常用函数二:pagerank 常用函数三:TF-IDF 常用函数四:关键词提取 常用函数一:向量距离和相似度计算 KL距离.JS距离.余弦距离 # -*- ...
- Python调用aiohttp
1. aiohttp安装 pip install aiohttp 1.1. 基本请求用法 async with aiohttp.get('https://github.com') as r: awai ...
- Hive分区表和桶表的使用
原文链接: https://www.toutiao.com/i6766897068138037763/?group_id=6766897068138037763 我们看官网文档中这个地方 我们先创建好 ...
- linux 下安装PostgreSql 并配置远程访问
1.官网下载PostgreSql 安装包 (https://www.enterprisedb.com/downloads/postgres-postgresql-downloads) 我下载的是 9. ...