quartz绘图:
CGContextRef context = UIGraphicsGetCurrentContext();//实例一个context上下文
CGContextSetLineWidth(context, 2.0); //设置画笔的粗细
CGContextSetStrokeColorWithColor(context, currentColor.CGColor);//设置画笔的颜色
CGContextSetFillColorWithColor(context, currentColor.CGColor);//设置填充色块的颜色
// case kLineShape:
CGContextMoveToPoint(context, firstTouch.x, firstTouch.y);//起始位置
CGContextAddLineToPoint(context, lastTouch.x, lastTouch.y);//结束位置
CGContextStrokePath(context);
// case kRectShape:
CGContextAddRect(context, currentRect);//添加要画的currentRect
CGContextDrawPath(context, kCGPathFillStroke);
// case kEllipseShape:
CGContextAddEllipseInRect(context, currentRect);添加要画的Ellipse
CGContextDrawPath(context, kCGPathFillStroke);
//case kImageShape:
CGFloat horizontalOffset = drawImage.size.width / 2;
CGFloat verticalOffset = drawImage.size.height / 2;
CGPoint drawPoint = CGPointMake(lastTouch.x - horizontalOffset,
lastTouch.y - verticalOffset);
[drawImage drawAtPoint:drawPoint]; //drawImage为UIImage的实例
opengl画图:
glLoadIdentity();//重定义虚拟机
glClearColor(0.78f, 0.78f, 0.78f, 1.0f);//重设背景颜色
glClear(GL_COLOR_BUFFER_BIT);
CGColorRef color = currentColor.CGColor;//分割uicolor为4个组件
const CGFloat *components = CGColorGetComponents(color);
CGFloat red = components[0];
CGFloat green = components[1];
CGFloat blue = components[2];
//重置color组件
glColor4f(red,green, blue, 1.0);
//case kLineShape:
glDisable(GL_TEXTURE_2D);//设置为不要贴图效果
GLfloat vertices[4];//浮点的数组存储x1,y1,x2,y2四个坐标
// Convert coordinates
vertices[0] = firstTouch.x;
vertices[1] = self.frame.size.height - firstTouch.y;
vertices[2] = lastTouch.x;
vertices[3] = self.frame.size.height - lastTouch.y;
glLineWidth(2.0);//画笔的宽度
glVertexPointer (2, GL_FLOAT , 0, vertices);
glDrawArrays (GL_LINES, 0, 2);//画线
// case kRectShape:
glDisable(GL_TEXTURE_2D);
// Calculate bounding rect and store in vertices
GLfloat vertices[8];
GLfloat minX = (firstTouch.x > lastTouch.x) ?
lastTouch.x : firstTouch.x;
GLfloat minY = (self.frame.size.height - firstTouch.y >
self.frame.size.height - lastTouch.y) ?
self.frame.size.height - lastTouch.y :
self.frame.size.height - firstTouch.y;
GLfloat maxX = (firstTouch.x > lastTouch.x) ?
firstTouch.x : lastTouch.x;
GLfloat maxY = (self.frame.size.height - firstTouch.y >
self.frame.size.height - lastTouch.y) ?
self.frame.size.height - firstTouch.y :
self.frame.size.height - lastTouch.y;
vertices[0] = maxX;
vertices[1] = maxY;
vertices[2] = minX;
vertices[3] = maxY;
vertices[4] = minX;
vertices[5] = minY;
vertices[6] = maxX;
vertices[7] = minY;
glVertexPointer (2, GL_FLOAT , 0, vertices);
glDrawArrays (GL_TRIANGLE_FAN, 0, 4);///画方形
// case kEllipseShape:
glDisable(GL_TEXTURE_2D);
GLfloat vertices[720];//360个点的x,y
GLfloat xradius = (firstTouch.x > lastTouch.x) ?//计算椭圆的水平半径
(firstTouch.x - lastTouch.x)/2 :
(lastTouch.x - firstTouch.x)/2;
GLfloat yradius = (self.frame.size.height - firstTouch.y > //计算椭圆的垂直半径
self.frame.size.height - lastTouch.y) ?
((self.frame.size.height - firstTouch.y) -
(self.frame.size.height - lastTouch.y))/2 :
((self.frame.size.height - lastTouch.y) -
(self.frame.size.height - firstTouch.y))/2;
for (int i = 0; i <= 720; i+=2) { //围绕圆进行循环,计算正确的点
GLfloat xOffset = (firstTouch.x > lastTouch.x) ?
lastTouch.x + xradius
: firstTouch.x + xradius;
GLfloat yOffset = (self.frame.size.height - firstTouch.y >
self.frame.size.height - lastTouch.y) ?
self.frame.size.height - lastTouch.y + yradius :
self.frame.size.height - firstTouch.y + yradius;
vertices[i] = (cos(degreesToRadian(i))*xradius) + xOffset;
vertices[i+1] = (sin(degreesToRadian(i))*yradius) +
yOffset;
}
glVertexPointer (2, GL_FLOAT , 0, vertices);//顶点数据传给gl 并通知上下文渲染图像
glDrawArrays (GL_TRIANGLE_FAN, 0, 360);//画圆形
// case kImageShape:
glEnable(GL_TEXTURE_2D);
[sprite drawAtPoint:CGPointMake(lastTouch.x, self.frame.size.height - lastTouch.y)];
//画图片 sprite为GL_TEXTURE_2D的一个实例 需要加上GL_TEXTURE_2D.h的头文件和.m文件
另外如何写一个很好使用的随机方法的接口呢?如下写一个随机颜色的方法:
UIColor-Random.h//头文件
#import <UIKit/UIKit.h>
@interface UIColor(Random)
+(UIColor *)randomColor;
@end
UIColor-Random.m//m文件
#import "UIColor-Random.h"
@implementation UIColor(Random)
+(UIColor *)randomColor
{
static BOOL seeded = NO;
if (!seeded) {
seeded = YES;
srandom(time(NULL));
}
CGFloat red = (CGFloat)random()/(CGFloat)RAND_MAX;
CGFloat blue = (CGFloat)random()/(CGFloat)RAND_MAX;
CGFloat green = (CGFloat)random()/(CGFloat)RAND_MAX;
return [UIColor colorWithRed:red green:green blue:blue alpha:1.0f];
}
@end
在需要用的.m文件里#import "UIColor-Random.h"就可以用(UIColor *)randomColor的这个方法了