• iOS开发之Quartz2D 六 绘制UIImageView


    #import <UIKit/UIKit.h>
    
    @interface XMGImageView : UIView
    
    
    /** <#注释#> */
    @property (nonatomic, strong) UIImage *image;
    
    
    - (instancetype)initWithImage:(UIImage *)image;
    
    @end
    #import "XMGImageView.h"
    
    @implementation XMGImageView
    
    
    
    - (instancetype)initWithImage:(UIImage *)image {
    
        if (self = [super init]) {
            //确定当前ImageView的尺寸大小
            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 {
        // Drawing code
        [self.image drawInRect:rect];
        
    }
    
    
    @end
    #import "ViewController.h"
    #import "XMGImageView.h"
    
    @interface ViewController ()
    
    /** <#注释#> */
    @property (nonatomic, weak) UIImageView *imageV;
    @property (nonatomic, weak)  XMGImageView *xmgImageV;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        
    //    UIImageView *imageV = [[UIImageView alloc] init];
    //    imageV.frame  = CGRectMake(0, 0, 200, 200);
    //    imageV.image = [UIImage imageNamed:@"CTO"];
    //    self.imageV = imageV;
    //    [self.view addSubview:imageV];
        
        //initWithImage创建的ImageView的大小跟原始图片一样大
    //    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CTO"]];
    //    [self.view addSubview:imageV];
        
        
        
        XMGImageView *xmgImageV = [[XMGImageView alloc] initWithImage:[UIImage imageNamed:@"CTO"]];
        [self.view addSubview:xmgImageV];
        
    //
    //    XMGImageView *xmgImageV = [[XMGImageView alloc] init];
    //    xmgImageV.frame  = CGRectMake(0, 0, 200, 200);
    //    xmgImageV.image = [UIImage imageNamed:@"CTO"];
    //    self.xmgImageV = xmgImageV;
    //    [self.view addSubview:xmgImageV];
        
        
    }
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        
        //self.imageV.image = [UIImage imageNamed:@"汽水"];
        self.xmgImageV.image = [UIImage imageNamed:@"汽水"];
    
    }
    
    @end

    整体思路:

    我们想要模仿系统的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];

      }

  • 相关阅读:
    BZOJ2738 矩阵乘法
    BZOJ3585 mex
    BZOJ1930 [Shoi2003]pacman 吃豆豆
    BZOJ3858 Number Transformation
    vue2.0学习小列子
    vue2.0 tab切换几种方式
    github学习
    只有自己看的懂的vue 二叉树的3级联动
    vuex学习
    vue2.0 MintUI安装和基本使用
  • 原文地址:https://www.cnblogs.com/cqb-learner/p/5821523.html
Copyright © 2020-2023  润新知