2012-04-14 75 views
1

我從touchesMoved事件保存繪製線條的X和Y位置的plist下面的代碼:畫線負荷的plist在iPhone SDK的

- (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 .....等。

保存代碼工作完美......,從我的plist負載x和y點下面的代碼:

- (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]; 
     } 


} 

我的輸出下圖:

enter image description here

我裝X和plist輸出的y點如下:

enter image description here

我的問題是正在加載從plist畫線不完全像上次x和y點問題..!

我想輸出完美的繪製線從X和Y點..!

請大家一起幫助我們,我們非常感謝..!

謝謝..!

回答

1

您不保存您的「換行符」。屬性列表可以包含數組。也許你應該收集數組本身的每個「繪圖」。另外,您不保存顏色。試試這個...

在touchesBegin中,您正在開始一個新的「繪圖」,因此創建一個數組來保存該「繪圖」的所有點。在touchMove中,添加到該數組中。在touchEnd中,你已經完成了,所以你可以將該繪圖放到文件中,並重新開始下一個「開始觸摸」。

關鍵是你需要知道什麼時候開始一個新的「繪圖段」,這樣你就可以「移動」該點並再次開始繪製。