美文网首页
绘制图片

绘制图片

作者: 翻这个墙 | 来源:发表于2017-11-23 10:47 被阅读15次

    drawImage(绘制图片)

    通过UIImage自身方法绘制图片步骤

    1. 新建一个类,继承自UIView(略)

    2. 在-(void)drawRect:(CGRect)rect方法实现下述几步(略)

    • 加载图片

    • 设置裁剪区域

    • 通过UIImage自身方法(drawInRect方法)渲染图片到view上面

    - (void)drawRect:(CGRect)rect {
    // 加载图片
        UIImage *image = [UIImage imageNamed:@"阿狸头像"];
    
    //设置裁剪区域
        // 设置裁剪区域的代码必须要在绘图之前
        // 设置裁剪区域,超出裁剪区域的部分会被裁剪掉
        UIRectClip(CGRectMake(0, 0, 150, 150));
    
    // 绘图(UIImage的方法)
        // 绘图的时候,绘制的内容不能超过当前控件
        // Pattern:平铺
        //  [image drawAsPatternInRect:rect];
    
        // drawAtPoint:默认绘制的图片跟图片本身一样
        //  [image drawAtPoint:CGPointZero];
    
        // drawInRect:默认绘制的图片跟控件一样,拉伸跟控件一样大
        [image drawInRect:rect];
    
    // 填充(不必要)
        // 快速的填充一个矩形
        UIRectFill(CGRectMake(0, 0, 50, 50));
    }
    

    UIImageView底层实现原理

    通过UIImageView方法创建

        // 第一种方式
    //    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
    //    // 默认图片会拉伸成跟控件一样大
    //    imageView.image = [UIImage imageNamed:@"汽水"];
    //    [self.view addSubview:imageView];
    
        // 默认控件的尺寸跟图片一样
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CTO"]];
        _imageV = imageView;
        [self.view addSubview:imageView];
    

    模仿底层实现

    • 表面加载代码与系统提供的第二种方法一样
        FZQImageView *imageV = [[FZQImageView alloc] initWithImage:[UIImage imageNamed:@"CTO"]];
        _imageView = imageV;
        [self.view addSubview:imageV];
    
    底层实现
    在FZQImageView.h中
    @interface FZQImageView : UIView
    //提供加载方法
    - (instancetype)initWithImage:(UIImage *)image;
    //设置图片属性
    @property (nonatomic, strong) UIImage *image;
    @end
    
    在FZQImageView.m中
    @implementation FZQImageView
    - (instancetype)initWithImage:(UIImage *)image
    {
        if (self = [super init]) {
            self.frame = CGRectMake(0, 0, image.size.width, image.size.height);
            // 赋值并绘图
            _image = image;
        }
        return self;
    }
    //重写set方法,每次赋值时重绘
    - (void)setImage:(UIImage *)image
    {
        _image = image;
    
        //核心代码
        [self setNeedsDisplay];
    }
    
    // 绘制图片到view中(核心代码)
    - (void)drawRect:(CGRect)rect {
        [_image drawInRect:rect];
    }
    @end
    

    相关文章

      网友评论

          本文标题:绘制图片

          本文链接:https://www.haomeiwen.com/subject/wjzavxtx.html