私は最近 GLPaint サンプル コードをダウンロードし、非常に興味深い部分を調べました。GLPaint によって読み取られ、描画されるポイントを持つrecordedPaths NSMutableArray があります。
ここで宣言されています:
NSMutableArray *recordedPaths;
recordedPaths = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Recording" ofType:@"data"]];
if([recordedPaths count])
[self performSelector:@selector(playback:) withObject:recordedPaths afterDelay:0.2];
これは再生用のコードです:
- (void) playback:(NSMutableArray*)recordedPaths {
NSData* data = [recordedPaths objectAtIndex:0];
CGPoint* point = (CGPoint*)[data bytes];
NSUInteger count = [data length] / sizeof(CGPoint),
i;
//Render the current path
for(i = 0; i < count - 1; ++i, ++point)
[self renderLineFromPoint:*point toPoint:*(point + 1)];
//Render the next path after a short delay
[recordedPaths removeObjectAtIndex:0];
if([recordedPaths count])
[self performSelector:@selector(playback:) withObject:recordedPaths afterDelay:0.01];
}
このことから、recordedPaths は変更可能な配列であり、その中にある CGPoint の struct c 配列が読み取られてレンダリングされることがわかります。自分の配列を入れたいのですが、それで問題が発生しています。
私はrecordedPaths宣言をこれに変更しようとしました:
NSMutableArray *myArray = [[NSMutableArray alloc] init];
CGPoint* points;
CGPoint a = CGPointMake(50,50);
int i;
for (i=0; i<100; i++,points++) {
a = CGPointMake(i,i);
points = &a;
}
NSData *data = [NSData dataWithBytes:&points length:sizeof(*points)];
[myArray addObject:data];
これはうまくいきませんでした...何かアドバイスはありますか?