2012-04-01 4 views
0

私は[NSMutableArray * paths]に画面に描画されたそれぞれのパスに対応するUIBezierPathsが含まれています。私はまた、パスの対応する色を含む別のNSMutable配列の色を持っています。私が抱えている問題は、2つの配列が突然変異していて、両方のカウントが上がっているのを見ることができますが、次のdrawRectメソッドは配列の最後のパスを描画するようです。 私は多くの質問を精査し、これまでに読んだことに基づいて、この非常に問題は私たちに初心者をもたらしたと思われますが、主にタイプの不一致が原因です。私は戻り値をタイプキャストしようとしましたが、それは無駄でした。ここ は、私が[自己setNeedsDisplay]呼び出すたびに、それは私の画面全体を一掃のdrawRectNSMutable配列のUIBezierPathにアクセスできない

int cnt = paths.count; 

if (cnt != 0) 
{ 
    for(int i = 0; i < cnt; i++) 
    { 
     NSLog(@"Drawing path:%i", i); 

     UIColor *color; 

     color = [colors objectAtIndex:i]; 
     [color setStroke]; 


     UIBezierPath *path = [paths objectAtIndex:i]; 
     path.lineWidth = 2; 

     [path stroke]; 
    } 
} 

から私のコードです。

は私がよく私の

UIBezierPath *path = [paths objectAtIndex:i]; 

を扱うわけではないことを前提に訂正するのですか?

ありがとうございます。

UPDATE:

私はいくつかのより多くのコードを通して臨検たとARCは私NSMutable配列の内容を解放され、別の可能性があるように、今ではほとんど見えます。私は次のことを試してみて、コンパイルエラーが出てきました。各描くのaferあなたのパスアレイにあなたのパスを追加Besure

[paths retain]; 
+0

まあ、私はhardheaded人である、私はある意味で、私はのためにNSMutable配列を使用する必要がなかったことに気づい

- (void)drawRect:(CGRect)rect { [brushPattern setStroke]; UIBezierPath *drawPath = [UIBezierPath bezierPath]; drawPath.lineCapStyle = kCGLineCapRound; drawPath.miterLimit = 0; drawPath.lineWidth = thisLineWidth; for (UIBezierPath *path in pathArray) [drawPath appendPath:path]; UIBezierPath *path = [self pathForCurrentLine]; if (path) [drawPath appendPath:path]; [drawPath stroke]; } - (UIBezierPath*)pathForCurrentLine { UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:startPoint]; [path addLineToPoint:endPoint]; return path; } 
私は何をしようとしていた。私が "元に戻す機能"を実装する必要があるまでは、3つのUIBezierPath(赤、青、緑)と3つのうちの1つを指すcurrentPathポインタを持つことに固執します。このように、描画するときには、パスのそれぞれがゼロであるかどうかを確認してパスを描画するだけです。メモリを簡単にするために、最後のレンダリング以降にパスが変更された場合にのみパスを再描画するようにフィルタを実装することを検討しています。 – Khanal

答えて

関連する問題