整体思路:

    我们想要模仿系统的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的更多相关文章

  1. 06-模仿系统的UIImageView

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. 模仿系统C键功能菜单

    1.可以拖拽C键 2.依赖zepto 3.点击弹出菜单 效果预览:

  3. iOS开发之Quartz2D 六 绘制UIImageView

    #import <UIKit/UIKit.h> @interface XMGImageView : UIView /** <#注释#> */ @property (nonato ...

  4. iOS开发UI篇—Quartz2D(自定义UIImageView控件)

    iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义 ...

  5. [iOS]过渡动画之高级模仿 airbnb

    注意:我为过渡动画写了两篇文章:第一篇:[iOS]过渡动画之简单模仿系统,主要分析系统简单的动画实现原理,以及讲解坐标系.绝对坐标系.相对坐标系,坐标系转换等知识,为第二篇储备理论基础.最后实现 Ma ...

  6. iOS基础常用细节问题处理65条

    1. 不可变数组  转变为可变数组  //声明实例变量的数组  必须记得实现 //对于遍历数组找到对象后 如果还需要查找 记得先结束 再查找(return/break) NSArray * arr = ...

  7. 自定义控件CustomAlertView

    [记录][完整代码最下] 效果如下: 可行性分析: 由于系统自带的UIAlertView样式简单,只有两种样式,想要理想的样式就要自定义控件了 文件名取为:CustomAlertView 创建文件如下 ...

  8. 【Android学习】《Android开发视频教程》第二季笔记(未完待续)

    视频地址: http://study.163.com/course/courseMain.htm?courseId=207001 课时22  Activity生命周期(一) 1.如何在一个应用中添加新 ...

  9. 实现UITableView循环利用

    tableViewUITableView循环利用 前言 大家都知道UITableView,最经典在于循环利用,这里我自己模仿UITableView循环利用,写了一套自己的TableView实现方案,希 ...

随机推荐

  1. EDP转LVDS屏转接板方案|基于INTELX86主板和商显应用EDP转LVDS设计CS5211

    众所周知LVDS接口是美国NS美国国家半导体公司为克服以TTL电平方式传输宽带高码率数据时功耗大,电磁干扰大等缺点而研制的一种数字视频信号传输方式.由于其采用低压和低电流驱动方式,实现了低噪声和低功耗 ...

  2. gRPC创建Java RPC服务

    1.说明 本文介绍使用gRPC创建Java版本的RPC服务, 包括通过.proto文件生成Java代码的方法, 以及服务端和客户端代码使用示例. 2.创建生成代码工程 创建Maven工程,grpc-c ...

  3. Java 设置系统参数和运行参数

    系统参数 系统级全局变量,该参数在程序中任何位置都可以访问到.优先级最高,覆盖程序中同名配置. 系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格 ...

  4. html基础 表单相关属性综合实战案例 附有注释

    html结构代码: <form > <!-- form 为了让重置按钮生效--> <h1>青春不常在,抓紧谈恋爱</h1> <hr> 昵称: ...

  5. Typescript Record的用法

    Record<Keys,Type> 构造一个对象类型,其属性key是Keys,属性value是Tpye.被用于映射一个类型的属性到另一个类型 interface CatInfo { age ...

  6. C# string.Format 和 String.Format 的区别

    string.Format 和 String.Format  ,不论是用法还是意思,都是一样的 怎么使用? 通过 占位符来替换 ,类似于 Replace 的操作 string s = string.F ...

  7. vue2.0组件库

    UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库 mint-ui - Vue 2的移动UI元素 iview - 基于 Vuejs 的开 ...

  8. 包装类integer的常用方法

    三种类型互转 (一): String 转换成 int 类型  调用 八大封装类 parseInt方法 结果可见 输出了223 成功转型 (二): int 转换成 String:  调用String类的 ...

  9. [学习分享] 在Windows操作系统下如何安装RMySQL包

    最近在做股票的高频交易数据分析,需要用到数据库,而我只对MySQL比较熟悉,于是就安装了MySQL.当我安装好了MySQL后,正兴冲冲地准备安装RMySQL包时,问题来了:RMySQL包不支持wind ...

  10. Pytorch之Spatial-Shift-Operation的5种实现策略

    Pytorch之Spatial-Shift-Operation的5种实现策略 本文已授权极市平台, 并首发于极市平台公众号. 未经允许不得二次转载. 原始文档(可能会进一步更新): https://w ...