在目标c上绘制iPhone

时间:2011-09-13 06:14:42

标签: iphone objective-c

我是编程的新手,我有一半制作我的(简单)应用程序,但我想知道如何在屏幕上绘制图片(用户绘制图片),然后将该图像用于游戏只是向左和向右移动(并检查它是否与另一个图像碰撞)。

我有这个......

float pointx;
float pointy;


- (void)drawRect:(CGRect)rect {
CGColorRef blue = [[UIColor blueColor] CGColor];

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, self.bounds);

CGContextSetFillColorWithColor(context, blue);
CGContextFillRect(context, CGRectMake(pointx, pointy, 10, 10));

}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch=[[event allTouches]anyObject];
CGPoint point = [touch locationInView:touch.view];
pointx = point.x;
pointy = point.y;
[self setNeedsDisplay];
}

但是当我按下屏幕时,蓝色方块会移到手指上,但不会画任何东西......

2 个答案:

答案 0 :(得分:2)

创建一个类,它是UIView的子类...然后在tat ...

中添加这些代码行
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
gestureStartPoint = [touch locationInView:self];
[currentPath moveToPoint:(gestureStartPoint)];

}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
currentPosition = [touch locationInView:self]; 
[currentPath addLineToPoint:(currentPosition)];
[self setNeedsDisplay];

}

- (void)drawRect:(CGRect)rect {
[[UIColor redColor] set];
[currentPath strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];
}
头文件中的

声明如下.....

CGPoint gestureStartPoint,currentPosition;
UIBezierPath *currentPath;

并声明一个属性......

@property(nonatomic,retain)UIBezierPath * currentPath;

在initWIthFrame方法里面if block添加这些行

currentPath = [[UIBezierPath alloc]init];
currentPath.lineWidth=3;

创建一个viewcontroler类,然后在loadVIew方法中添加这些代码行。

mainView=[[sampleView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
mainView.backgroundColor=[UIColor whiteColor];
self.view=mainView;

其中sampleView是UIView子类,你创建了b4 ....

希望这会有所帮助......

答案 1 :(得分:1)

使用Cocoa Touch绘制用户生成的图片是一个两步过程。在清除所有以前用户绘制的内容之后,UIView将仅绘制您提供的最新触摸。

一种可能的解决方案是在历史数组中保存所有用户触摸,并在添加任何新触摸后(重新)将所有这些触摸绘制到视图中。但这可能会非常缓慢,具体取决于所需的绘图量。

另一种可能的2步方法是创建自己的位图绘制上下文。首先将新的最新内容绘制到此上下文中,如果配置正确,将保留图形的旧部分,然后将此上下文绘制到UIView中(或将位图转换为在视图上方的图层中显示的图像)。