1.画图相关

来源:互联网 发布:社会网络理论有什么用 编辑:程序博客网 时间:2024/06/06 00:34

一、做一个刷帧动画的方法

1.启用定时器,在方法中调用setNeedsDisplay方法,在drawRect方法中更改view的位置。

-(void)upDate{    [self setNeedsDisplay];}

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(upDate) userInfo:nil repeats:YES];


2.屏幕刷帧,一般用下面这个方法,后面做法同上

CADisplayLink *display = [CADisplayLink displayLinkWithTarget:self selector:@selector(upDate)];        [display addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

二、画四边形的方法

1.常规画法

首先必须获取图像上下文,什么是图形上下文?
- (void)test{    // 画四边形    CGContextRef ctx = UIGraphicsGetCurrentContext();        //    1.第一种方式, 通过连接固定的点绘制四边形    //    CGContextMoveToPoint(ctx, 0, 0);    //    CGContextAddLineToPoint(ctx, <#CGFloat x#>, <#CGFloat y#>)    //    CGContextAddLineToPoint(ctx, <#CGFloat x#>, <#CGFloat y#>)    //    CGContextAddLineToPoint(ctx, <#CGFloat x#>, <#CGFloat y#>)    //    CGContextAddLineToPoint(ctx, <#CGFloat x#>, <#CGFloat y#>)            //    2.指定起点和宽高绘制四边形    //    CGContextAddRect(ctx, CGRectMake(10, 10, 100, 100));    //    CGContextStrokePath(ctx);        // 3.两步合为一部    //    CGContextStrokeRect(ctx, CGRectMake(10, 10, 100, 100));    //    CGContextFillRect(ctx, CGRectMake(10, 10, 100, 100));        // 4.通过OC的方法绘制实心的四边形, 注意没有空心的方法    //    UIRectFill(CGRectMake(10, 10, 100, 100));        // 5.通过绘制线条设置宽度    CGContextMoveToPoint(ctx, 10, 10);    CGContextAddLineToPoint(ctx, 100, 100);    CGContextSetLineWidth(ctx, 50);    CGContextStrokePath(ctx);}

2.通过创建路径path画图

- (void)drawRect:(CGRect)rect{    // 1.获取上下文    CGContextRef ctx = UIGraphicsGetCurrentContext();        // 2.绘制图形    /*    // 设置起点    CGContextMoveToPoint(ctx, 10, 10);    // 设置终点    CGContextAddLineToPoint(ctx, 100, 100);        // 3.画圆    CGContextAddEllipseInRect(ctx, CGRectMake(50, 50, 50, 50));    */           // 2.创建路径(一个path就代表一条路径)    // 但凡通过quarzt2d中的带有create/ copy / retain 方法创建出来的值都必须手动的释放    CGMutablePathRef path = CGPathCreateMutable();    // 设置起点    CGPathMoveToPoint(path, NULL, 10, 10);    // 设置终点    CGPathAddLineToPoint(path, NULL, 100, 100);    // 将路径添加到上下文中    CGContextAddPath(ctx, path);        // 3.再创建一条路径用于保存圆     CGMutablePathRef path2 = CGPathCreateMutable();    // 在path中添加画的路径    CGPathAddEllipseInRect(path2, NULL, CGRectMake(50, 50, 50, 50));    CGContextAddPath(ctx, path2);        // 3.渲染'    CGContextStrokePath(ctx);            // 释放前面创建的两条路径    CGPathRelease(path);    CGPathRelease(path2);        // 下面这种方式也可以释放路径        CFRelease(path);    CFRelease(path2);}

三 如何将图形画到一个图片上(图片水印),需要bitmap上下文

- (void)viewDidLoad{    [super viewDidLoad];    // -1.加载图片//    UIImage *image = [UIImage imageNamed:@"me"];        // 0.创建一个bitmap的上文//    CGBitmapContextCreate    /*     size :指定将来创建出来的bitmap的大小     opaque : YES:不透明  NO:透明     scale: 缩放比例     创建出来的bitmap就对应一个UIImage     */    UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), NO, 0);    // 1.获取bitmap上下文    CGContextRef ctx = UIGraphicsGetCurrentContext();        // 2.绘图    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));        // 3.渲染    CGContextStrokePath(ctx);        // 4.获取生成的图片    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();        // 5.显示生成的图片到imageview    self.iv.image = image;        // 6.保存绘制好的图片到文件中    // 先将图片转换为二进制数据, 然后再将图片写到文件中//    UIImageJPEGRepresentation(image, 1)    NSData *data = UIImagePNGRepresentation(image);        [data writeToFile:@"/Users/apple/Desktop/abc.png" atomically:YES];}
绘制图片到上下文中用drawAtPoint或者drawInRect方法,还有一个平铺的方法。

四 剪切图片

1.先画出边框,然后设定可视范围,再把图片画上去就可以了。

// 1.创建图片上下文    UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);        // 2.指点可用范围    // 获取刚才创建的图片上下文    CGContextRef ctx = UIGraphicsGetCurrentContext();    // 画圆    CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, image.size.width, image.size.height));    // 指点可用范围    CGContextClip(ctx);        // 3.绘图图片    [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];    // 4.取出图片    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();        self.iv.image = newImage;

       指定可用范围, 可用范围的适用范围是在指定之后,也就说在在指定剪切的范围之前绘制的东西不受影响,指定范围时画的圆不需要进行渲染。

2.用图片进行平铺的两种方法:

[image drawAsPatternInRect:CGRectMake(0, 0, 320,320)];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    UIColor *myColor = [UIColor colorWithPatternImage:image];    self.contentView.backgroundColor = myColor;




1 0
原创粉丝点击