在iphone sdk中从Plist中绘制线条加载

我是保存画线X和Y位置从touchesMoved事件Plist下面的代码:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { mouseSwiped = YES; NSLog(@"You are drawing"); UITouch *touch = [touches anyObject]; CGPoint currentPoint = [touch locationInView:self.view]; currentPoint.y -= 20; UIGraphicsBeginImageContext(self.view.frame.size); [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 1.0, 1.0); CGContextBeginPath(UIGraphicsGetCurrentContext()); CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); CGContextStrokePath(UIGraphicsGetCurrentContext()); drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSNumber *numx = [NSNumber numberWithFloat:currentPoint.x]; NSNumber *numy = [NSNumber numberWithFloat:currentPoint.y]; [xpoints insertObject:numx atIndex:[xpoints count]]; [ypoint insertObject:numy atIndex:[ypoint count]]; NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Lines" ofType:@"plist"]; //5 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1 NSString *documentsDirectory = [paths objectAtIndex:0]; //2 path = [documentsDirectory stringByAppendingPathComponent:@"Lines.plist"]; NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; //here add elements to data file and write data to file int value = [xpoints count]; [data setObject:[NSNumber numberWithInt:value] forKey:@"Array_count"]; NSString *obj_str=[NSString stringWithFormat:@"%@,%@",numx,numy]; NSString *key=[NSString stringWithFormat:@"%d",value]; [data setObject:obj_str forKey:key]; [data writeToFile:path atomically:YES]; [data release]; NSString *string = [NSString stringWithFormat:@"%f%@%f", lastPoint.x, @"-",lastPoint.y]; // NSLog(@"Hello is %i",[xpoints count]); lblxy.text=string; NSString *string2 = [NSString stringWithFormat:@"%f%@%f", currentPoint.x, @"-",currentPoint.y]; // NSLog(@"Hello is %i",[xpoints count]); lbllast.text=string2; lastPoint = currentPoint; mouseMoved++; if (mouseMoved == 10) { mouseMoved = 0; } } 

此代码将x和y点保存为plist,如第一个点保存到键0和值x,y点如0-25,54和1-56,98 …..等。

保存代码工作正常…!,我的负载x和y点从plist下面的代码:

  - (IBAction)btn_load:(id)sender { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1 NSString *documentsDirectory = [paths objectAtIndex:0]; //2 path = [documentsDirectory stringByAppendingPathComponent:@"Lines.plist"]; drawImage.image =nil; NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; //here add elements to data file and write data to file int value; value = [[data objectForKey:@"Array_count"] intValue]; CGFloat lastx; CGFloat lasty; for(int i=1;i<=value;i++) { NSString *key=[NSString stringWithFormat:@"%d",i]; NSLog(@"This is from .plist %@", [data objectForKey:key]); NSString *my_points=[data objectForKey:key]; NSArray *components = [my_points componentsSeparatedByString:@","]; [[components objectAtIndex:0] floatValue]; if(i==1) { lastx = [[components objectAtIndex:0] floatValue]; lasty = [[components objectAtIndex:1] floatValue]; } UIGraphicsBeginImageContext(self.view.frame.size); [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 1.0, 1.0, 1.0); CGContextMoveToPoint(UIGraphicsGetCurrentContext(),lastx , lasty); CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), [[components objectAtIndex:0] floatValue], [[components objectAtIndex:1] floatValue]); CGContextStrokePath(UIGraphicsGetCurrentContext()); CGContextFlush(UIGraphicsGetCurrentContext()); drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); lastx = [[components objectAtIndex:0] floatValue]; lasty = [[components objectAtIndex:1] floatValue]; } } 

我的输出是绘图如下:

在这里输入图像说明

我的plist输出的x和y点数是:

在这里输入图像说明

我的问题是正在加载从plist绘制线不完全像上次x和y点问题..!

我想输出完美的绘制线从X和Y点..!

请帮助我,任何一个我们非常感谢..!

谢谢..!

你没有保存你的“换行符”。 属性列表可以包含数组。 也许你应该收集数组本身的每个“绘图”。 另外,你不保存颜色。 尝试这个…

在touchesBegin中,你正在开始一个新的“绘图”,所以创build一个数组来保存这个“绘图”的所有点。 在touchMove中,添加到该数组。 在touchEnd,你完成了,所以你可以把该图纸的文件,并重新开始下一个“开始接触”。

关键是你需要知道什么时候你开始一个新的“绘图分段”,所以你可以“移动”的点,再次开始绘画。