Quarz2D基础(二)

  • 贝瑟尔路径与C语言路径结合.
- (void)drawRect:(CGRect)rect {
    //获取上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    //创建椭圆路径
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 50, 200, 100)];
    /**
     *  矩阵操作必须在添加路径之前
     */
    //缩放
    CGContextScaleCTM(ctx, 0.5, 0.5);
    //移动
    CGContextTranslateCTM(ctx, 20, 200);
    //旋转
    CGContextRotateCTM(ctx, M_PI_2);
    //将路径添加至上下文
    CGContextAddPath(ctx, path.CGPath);
    //设置颜色
    [[UIColor redColor] set];
    //渲染上下文
    CGContextFillPath(ctx);
}

效果图:

原图
缩放
位移
旋转
注意:这几种效果可叠加.
  • 绘制文字:
- (void)drawRect:(CGRect)rect {
    //创建富文本字典
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    //设置富文本字体
    dict[NSFontAttributeName] = [UIFont systemFontOfSize:20];
    //设置富文本背景颜色
//    dict[NSBackgroundColorAttributeName] = [UIColor redColor];
    //设置绘制线宽
    dict[NSStrokeWidthAttributeName] = @10;
    //创建shadow对象
    NSShadow *shadow = [[NSShadow alloc] init];
    //设置shadow模糊度
    shadow.shadowBlurRadius = 2;
    //设置shadow的颜色
    shadow.shadowColor = [UIColor orangeColor];
    //设置shadow的偏移量
    shadow.shadowOffset = CGSizeMake(5, 5);
    //设置富文本阴影效果
    dict[NSShadowAttributeName] = shadow;
    //创建文字
    NSString *str = @"iOS基础知识";
    //绘制文字
    [str drawAtPoint:CGPointMake(50, 50) withAttributes:dict];
}

效果图:

绘制文字
  • 绘制图片:
- (void)drawRect:(CGRect)rect {
    //创建图片,同时设置图片内容,此方法创建的image的尺寸与图片尺寸相同
    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Snip20160427_8"]];
    //通过此方法绘制图片时,坐标默认在父控件的原点位置
    [imageV drawRect:CGRectMake(100, 50, imageV.frame.size.width, imageV.frame.size.height)];
}


- (void)drawRect:(CGRect)rect {
//    image.size = CGSizeMake(50, 50);
    //绘制图片,可控制坐标位置
UIImage *image = [UIImage imageNamed:@"Snip20160427_10"];
    [image drawAtPoint:CGPointMake(50, 50)];
}

效果图:

drawRect
drawAtPoint
  • 雪花效果:
//定义变量
static CGFloat snow = 0;
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    //创建image
    UIImage *image = [UIImage imageNamed:@"Snip20160427_10"];
    //绘制图片
    [image drawAtPoint:CGPointMake(0, snow)];
    //设置image的位置下移
    snow += 10;
    //重复
    if (snow > self.frame.size.height) {
        snow = 0;
    }
}
- (void)awakeFromNib{
    //创建定时器
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeChange)];
    //添加主运行循环
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; 
}
//定时器调用的方法
- (void)timeChange{
    //重绘
    [self setNeedsDisplay];
}

效果图:

雪花效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,885评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 忠魂血铸成,一朝背叛名。 赤焰燃万里,亲礼成京风。 良士出高策,黄袍替明枪。 冤名得昭雪,空留贤帝王。
    AU秋水诗韵阅读 294评论 7 5
  • 杭州有新西湖,上海有新天地,宁波有老外滩。老外滩也是必修课。 夜幕降临,我们骑行去老外滩。现在的自行车方便快捷,手...
    平安是福笑囗常开阅读 277评论 0 1
  • 听完罗辑思维2016年跨年演讲《时间的朋友》,花了我那么多时间,罗胖不是提出一个新的概念吗?国民生产时间,GD...
    乡本阅读 13,516评论 0 3