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

来源:互联网 发布:31周b超数据判断男女 编辑:程序博客网 时间:2024/05/16 19:35

在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);


0 0
原创粉丝点击