问题描述
嘿,我是 Objective C 的初学者,请帮帮我
Hey i m beginner of objective C Please Help me
我做了以下代码,但不起作用.....
i make following code but not work.....
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if ([touch view] == self.view) {
CGPoint location = [touch locationInView:self.view];
loc1 = location;
CGContextMoveToPoint(context, location.x, location.y);
NSLog(@"x:%d y:%d At Touch Begain", loc1.x, loc1.y);
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if ([touch view] == self.view)
{
CGPoint location = [touch locationInView:self.view];
CGContextMoveToPoint(context, loc1.x, loc1.y);
NSLog(@"x:%d y:%d At Touch Move", loc1.x, loc1.y);
CGContextAddLineToPoint(context, location.x, location.y);
NSLog(@"x:%d y:%d", location.x, location.y);
}
}
我在 viewdidload 方法中声明了 contex,并尝试在触摸事件中声明但不起作用...
i declare contex in viewdidload method and also try to declare in touch event but not work...
我的应用日志文件看起来像...
My app Log file look like...
x:0 y:1079934976 At Touch Move 周四 1 月 13 日 11:20:05 .local拖放[536]:
CGContextAddLineToPoint: 无效上下文 0x0 2011-01-13 11:20:05.149DragDrop[536:207] x:0 y:1079902208 Thu Jan 13 11:20:05 .local拖放[536]:
CGContextAddLineToPoint: invalid context 0x0 2011-01-13 11:20:05.149 DragDrop[536:207] x:0 y:1079902208 Thu Jan 13 11:20:05 .local DragDrop[536] :
CGContextSetRGBStrokeColor: 无效上下文 0x0 Thu Jan 13 11:20:05.local 拖放[536]:
CGContextSetRGBStrokeColor: invalid context 0x0 Thu Jan 13 11:20:05 .local DragDrop[536] :
CGContextDrawPath: 无效上下文 0x0 Thu Jan 13 11:20:05 .local拖放[536]:
CGContextDrawPath: invalid context 0x0 Thu Jan 13 11:20:05 .local DragDrop[536] :
CGContextMoveToPoint: 无效上下文 0x0 2011-01-13 11:20:05.199DragDrop[536:207] x:0 y:1079934976 At Touch Move Jan 13 Thu 11:20:05.local 拖放[536]:
CGContextMoveToPoint: invalid context 0x0 2011-01-13 11:20:05.199 DragDrop[536:207] x:0 y:1079934976 At Touch Move Thu Jan 13 11:20:05 .local DragDrop[536] :
CGContextAddLineToPoint: 无效上下文 0x0 2011-01-13 11:20:05.200拖放[536:207] x:0 y:1079885824
CGContextAddLineToPoint: invalid context 0x0 2011-01-13 11:20:05.200 DragDrop[536:207] x:0 y:1079885824
推荐答案
您通常不会在触摸检测方法中直接绘图.通常,您只需在此处存储新的点/线,然后将它们全部绘制在 drawRect:
中.假设您有一个 UIView
的自定义子类,它有一个类型为 NSMutableArray
的实例变量 paths
和一个属性 currentPath
UIBezierPath
类型.然后,您可以大致像这样实现触摸检测和 drawRect 方法:
You typically don't draw directly in the touch detection methods.Usually, you'd just store new points/lines there and draw all of them in drawRect:
. Let's assume you have a custom subclass of UIView
which has an instance variable paths
of type NSMutableArray
and a property currentPath
of type UIBezierPath
. You could then implement the touch detection and drawRect methods roughly like this:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
self.currentPath = [UIBezierPath bezierPath];
currentPath.lineWidth = 3.0;
[currentPath moveToPoint:[touch locationInView:self]];
[paths addObject:self.currentPath];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[self.currentPath addLineToPoint:[touch locationInView:self]];
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
[[UIColor redColor] set];
for (UIBezierPath *path in paths) {
[path stroke];
}
}
请注意,这被简化了很多.如果你画了很多线,性能会受到影响,最终,你会希望将绘图缓存在位图图像中,但这应该可以帮助你开始.
Note that this is simplified a lot. If you draw many lines, performance will suffer and eventually, you'll want to cache the drawing in a bitmap image, but this should get you started.
这篇关于如何在触摸事件上画线?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!