<图形图像,动画,多媒体> 读书笔记 --- UIKit,Quartz 2D

在iOS中绘图技术主要包括:UIKit,Quartz 2D,CoreGraphics,OpenGL ES.


记录一些主要方法

UIImage

drawAtPoint:(CGPoint)point 设置描绘定点

drawInRect:(CGRect)rect,图片绘制在指定的图形里

drawAsPatternInRect:(CGRect)rect 在指定的矩形里平铺绘制图片,如果图片打小超出了指定的矩形,形式上与drawAtPoint方法类似,如果图片大小小于指定矩形,就会有平铺效果


NSString

- (void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrsNS_AVAILABLE_IOS(7_0);文本在指定的点绘制

- (void)drawInRect:(CGRect)rect withAttributes:(NSDictionary *)attrsNS_AVAILABLE_IOS(7_0);文本在指定的矩形里绘制


    [[UIColor brownColor] setFill];
    UIRectFill(rect);//填充颜色
    
    [[UIColor whiteColor] setStroke];
    CGRect frame = CGRectMake(20, 30, 100, 300);
    UIRectFrame(frame);//描边颜色

NSString *imagePath = [[NSBundle mainBundle]pathForResource:@"1" ofType:@"jpg"];
    UIImage *img = [UIImage imageWithContentsOfFile:imagePath];
    
    [img drawInRect:CGRectMake(0, 40, 320, 400)];//画一个图
    
    NSString *s = @"123";
    UIFont *font = [UIFont systemFontOfSize:34];
    NSDictionary *dict = @{NSFontAttributeName:font};
    [s drawAtPoint:CGPointMake(100, 20) withAttributes:dict];//画一个字符串


Quartz 2D

CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextMoveToPoint(context, 75, 10);//在75,10绘制起始点
    CGContextAddLineToPoint(context, 10, 150);//从(75,10)绘制到(10.150)
    CGContextAddLineToPoint(context, 160, 150);//从(10,150)绘制到(160, 150)
    CGContextClosePath(context);//闭合绘制
    
    [[UIColor blackColor]setStroke];
    [[UIColor redColor]setFill];
    CGContextDrawPath(context, kCGPathFillStroke);
    
    /*
     
     enum CGPathDrawingMode {
     kCGPathFill,
     kCGPathEOFill,
     kCGPathStroke,
     kCGPathFillStroke,
     kCGPathEOFillStroke
     };
     typedef enum CGPathDrawingMode CGPathDrawingMode;
     
     // mode :fill   把你的笔画路径也填充上
     // mode :EOFill 把你的笔画路径围起来的部分给填充上
     // mode :Stroke 把你的笔画路径给填充上
     // mode :FillStroke 把你整个笔画路径围起来的区域给填充上
     // mode :EOFillStroke 跟第二个很象,把笔画路径围起来的部分填充上,不包括笔画路径
     */



贝塞尔曲线的一个方法介绍

/**
     *  CGContextAddCurveToPoint(CGContextRef c, CGFloat cp1x,
     CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y)
        cp1x:第一控制点x坐标
        cp1y:第一控制点y坐标
        cp2x:第二控制点x坐标
        cp2y:第二控制点y坐标
        x:结束点x坐标
        y:结束点y坐标
     */
    CGContextAddCurveToPoint(cgContext, 250, 19, 241, 24, 238, 19);



Quartz 坐标变换

坐标系

在苹果的2D图形技术是Quartz 2D 和UIKit,Quartz 2D是Mac OS X和iOS环境下的2D绘图引擎,涉及内容包括:基于路径的绘图,透明度绘图,遮盖,阴影,透明层,颜色管理,防锯齿渲染,生成PDF,以及PDF元数据相关处理.在iOS还可以通过UIKit进行图形绘制,但是Quartz 2D和UIKit坐标系不同.



NSString *path = [[NSBundle mainBundle]pathForResource:@"1" ofType:@"jpg"];
    UIImage *img = [UIImage imageWithContentsOfFile:path];
    CGImageRef image = img.CGImage;
    
    /*
     CGContextSaveGState与CGContextRestoreGState的作用
     
     使用Quartz时涉及到一个图形上下文,其中图形上下文中包含一个保存过的图形状态堆栈。在Quartz创建图形上下文时,该堆栈是空的。CGContextSaveGState函数的作用是将当前图形状态推入堆栈。之后,您对图形状态所做的修改会影响随后的描画操作,但不影响存储在堆栈中的拷贝。在修改完成后,您可以通过CGContextRestoreGState函数把堆栈顶部的状态弹出,返回到之前的图形状态。这种推入和弹出的方式是回到之前图形状态的快速方法,避免逐个撤消所有的状态修改;这也是将某些状态(比如裁剪路径)恢复到原有设置的唯一方式。
     */
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    
    //转换坐标系
    CGContextTranslateCTM(context, 0, img.size.height);
    CGContextScaleCTM(context, 1, -1);
    
    CGRect touchRect = CGRectMake(0, 0, img.size.width, img.size.height);
    CGContextDrawImage(context, touchRect, image);//画图
    
    CGContextRestoreGState(context);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值