我是编程的新手,我有一半制作我的(简单)应用程序,但我想知道如何在屏幕上绘制图片(用户绘制图片),然后将该图像用于游戏只是向左和向右移动(并检查它是否与另一个图像碰撞)。
我有这个......
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];
}
但是当我按下屏幕时,蓝色方块会移到手指上,但不会画任何东西......
答案 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中(或将位图转换为在视图上方的图层中显示的图像)。