Лучший способ сохранить / загрузить данные хода образца приложения GLPaint? - PullRequest
0 голосов
/ 09 августа 2010

Я заметил, что по умолчанию пример приложения GLPaint поставляется с записанными данными в двоичном формате и загружается при запуске, именно это используется для отображения текста «Shake me».

Я создаю похожее приложение для рисования, и мне просто интересно, как лучше записать эти штрихи и загрузить их в следующий раз.

В настоящее время я пытался сохранить местоположение каждой вершины, используя Core Data, затем при запуске он снова считывает и отображает все точки, однако я нашел это слишком медленным.

Есть ли лучший / более эффективный способ сделать это? Может ли весь viewBuffer быть сохранен как двоичный файл, а затем снова загружен?

1 Ответ

2 голосов
/ 09 декабря 2010

Если вы посмотрите на Recording.data, вы заметите, что каждая строка представляет собой свой собственный массив.Чтобы захватить чернила и воспроизвести их, вам нужно иметь массив массивов.В целях этой демонстрации - объявить изменяемый массив - writRay

    @synthesize writRay;
//init in code
 writRay = [[NSMutableArray alloc]init];

Capture the ink

// Handles the continuation of a touch.
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{  

 CGRect    bounds = [self bounds];
 UITouch*   touch = [[event touchesForView:self] anyObject];

 // Convert touch point from UIView referential to OpenGL one (upside-down flip)
 if (firstTouch) {
  firstTouch = NO;
  previousLocation = [touch previousLocationInView:self];
  previousLocation.y = bounds.size.height - previousLocation.y;
  /******************* create a new array for this stroke's points **************/
  [writRay addObject:[[NSMutableArray alloc]init]];
  /***** add 1st point *********/
  [[writRay objectAtIndex:[writRay count] -1]addObject:[NSValue valueWithCGPoint:previousLocation]];
 } else {
  location = [touch locationInView:self];
     location.y = bounds.size.height - location.y;
  previousLocation = [touch previousLocationInView:self];
  previousLocation.y = bounds.size.height - previousLocation.y;
  /********* add additional points *********/
  [[writRay objectAtIndex:[writRay count] -1]addObject:[NSValue valueWithCGPoint:previousLocation]];
 }

 // Render the stroke
 [self renderLineFromPoint:previousLocation toPoint:location];

}

Воспроизвести чернила.

- (void)playRay{

 if(writRay != NULL){

  for(int l = 0; l < [writRay count]; l++){
    //replays my writRay -1 because of location point
   for(int p = 0; p < [[writRay objectAtIndex:l]count] -1; p ++){
    [self renderLineFromPoint:[[[writRay objectAtIndex:l]objectAtIndex:p]CGPointValue] toPoint:[[[writRay objectAtIndex:l]objectAtIndex:p + 1]CGPointValue]];
   }
  }
 }
}

Для лучшего эффекта встряхните экран, чтобы очистить его, и вызовите playRay из changeBrushColor в AppController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...