我正在尝试在我的应用程序中实现一个非常简单的绘图视图.这只是我的应用程序的一小部分,但它变成了一个真正的麻烦.这是我到目前为止所拥有的,但它现在正在显示的是莫尔斯代码,如点和线.
- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *docsPath = [paths objectAtIndex:0]; NSString *savePath = [NSString stringWithFormat:@"%@/notePadImage.jpg",docsPath]; NSData *data = [NSData dataWithContentsOfFile:savePath]; UIImage *image = [UIImage imageWithData:data]; if (image == nil) { NSString *pathToBlank = [[NSBundle mainBundle]pathForResource:@"blankNotePadPage" ofType:@"png"]; NSData *data = [NSData dataWithContentsOfFile:pathToBlank]; image = [UIImage imageWithData:data]; } arrayOfTouches = [[NSMutableArray alloc] initWithCapacity:10]; self.drawImage.image = image; mouseMoved = 0; [self.view bringSubviewToFront:closeButton]; [self.view bringSubviewToFront:clearButton]; self.timer = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(drawIt) userInfo:nil repeats:YES]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; [arrayOfTouches addObject:touch]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; [arrayOfTouches addObject:touch]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { } -(void) drawIt { NSMutableArray *tempArray = [NSMutableArray arrayWithArray:arrayOfTouches]; [arrayOfTouches removeAllObjects]; if ([tempArray count]>1) { [arrayOfTouches removeAllObjects]; CGPoint point1 = [[tempArray objectAtIndex:0] previousLocationInView:self.view];; CGPoint point2; CGPoint point3; for (int i = 0; i < [tempArray count]-1;i = i+1) { UIGraphicsBeginImageContext(self.view.frame.size); [drawImage.image drawInRect:CGRectMake(0,self.view.frame.size.width,self.view.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(),kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(),3.0); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(),0.0,1.0); CGContextMoveToPoint(UIGraphicsGetCurrentContext(),point1.x,point1.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(),point2.x,point2.y); CGContextStrokePath(UIGraphicsGetCurrentContext()); CGContextFlush(UIGraphicsGetCurrentContext()); drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [self.view bringSubviewToFront:closeButton]; [self.view bringSubviewToFront:clearButton]; point1 = point2; } } }
解决方法
我的一个应用程序也需要一些简单的绘图.这是它的略微修改版本.它的工作方式基本上与hotpaw2描述的一样.我创建了一个“画布”视图来处理所有绘图,我只需将它添加到任何需要的地方.
速度对我的目的来说很好.
CanvasView.h:
@interface CanvasView : UIView { NSMutableArray *points; } @property (nonatomic,retain) NSMutableArray *points; @end
CanvasView.m:
#import "CanvasView.h" @implementation CanvasView @synthesize points; - (id) initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor blueColor]; } return self; } -(void)drawRect:(CGRect)rect { if (self.points.count == 0) return; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetRGBStrokeColor(context,1.0,1.0); //white CGContextSetLineWidth(context,1.0); CGPoint firstPoint = [[self.points objectAtIndex:0] CGPointValue]; CGContextBeginPath(context); CGContextMoveToPoint(context,firstPoint.x,firstPoint.y); int i = 1; while (i < self.points.count) { CGPoint nextPoint = [[self.points objectAtIndex:i] CGPointValue]; if (nextPoint.x < 0 && nextPoint.y < 0) { CGContextDrawPath(context,kCGPathStroke); if (i < (self.points.count-1)) { CGContextBeginPath(context); CGPoint nextPoint2 = [[self.points objectAtIndex:i+1] CGPointValue]; CGContextMoveToPoint(context,nextPoint2.x,nextPoint2.y); i = i + 2; } else i++; } else { CGContextAddLineToPoint(context,nextPoint.x,nextPoint.y); i++; } } CGContextDrawPath(context,kCGPathStroke); } -(void)dealloc { [points release]; [super dealloc]; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event touchesForView:self] anyObject]; CGPoint location = [touch locationInView:self]; if (self.points == nil) { NSMutableArray *newPoints = [[NSMutableArray alloc] init]; self.points = newPoints; [newPoints release]; } [self.points addObject:[NSValue valueWithCGPoint:(location)]]; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event touchesForView:self] anyObject]; CGPoint location = [touch locationInView:self]; [self.points addObject:[NSValue valueWithCGPoint:(location)]]; [self setNeedsDisplay]; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event touchesForView:self] anyObject]; CGPoint location = [touch locationInView:self]; [self.points addObject:[NSValue valueWithCGPoint:(location)]]; CGPoint endPoint = CGPointMake(-99,-99); //"end of path" indicator [self.points addObject:[NSValue valueWithCGPoint:(endPoint)]]; [self setNeedsDisplay]; } @end
在需要的地方添加canvasView:
CanvasView *cv = [[CanvasView alloc] initWithFrame:CGRectMake(0,320,640)]; [self.view addSubview:cv]; [cv release];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。