私は理解できないような固いバグがあり、touchesMovedの実装方法と関係があると思います。touchesMovedとdrawRectの問題
touchesMovedでは、タッチがどこにあるか(ifステートメント)を確認し、それに応じて、タッチポイントの近くの40×40の領域でsetNeedsDisplayWithRectを呼び出します。 DrawRectでは、前に白い画像があった場合は黒い画像が表示され、前の画像が白い画像の場合は黒い画像が表示されます。私はsetNeedsDisplayWithRectを呼び出すと同時にブール変数の配列をブール値に設定しているので、現在のイメージが何であるかを把握することができ、その逆も表示できます。 (実際には、私はいつもイメージを反転させるとは限りません...黒から白への切り替えのような、最初のタッチが何をしようとしているのかを見て、その後のすべてのタッチに白いイメージを置くので、または画像を消去する)。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self];
CGPoint lastTouchPoint = [touch previousLocationInView:self];
touchX = touchPoint.x;
touchY = touchPoint.y;
int lastX = (int)floor((lastTouchPoint.x+0.001)/40);
int lastY = (int)floor((lastTouchPoint.y+0.001)/40);
int currentX = (int)(floor((touchPoint.x+0.001)/40));
int currentY = (int)(floor((touchPoint.y+0.001)/40));
if ((abs((currentX-lastX)) >=1) || (abs((currentY-lastY)) >=1))
{
if ([soundArray buttonStateForRow:currentX column:currentY] == firstTouchColor){
[soundArray setButtonState:!firstTouchColor row:(int)(floor((touchPoint.x+0.001)/40)) column:(int)(floor((touchPoint.y+0.001)/40))];
[self setNeedsDisplayInRect:(CGRectMake((CGFloat)(floor((touchPoint.x+0.001)/40)*40), (CGFloat)(floor((touchPoint.y+0.001)/40)*40), (CGFloat)40.0, (CGFloat)40.0))];
}
}
}
私の問題は、論理的な配列が、私が置いている画像でうまくいっていないように見えることです。これは画面全体をすばやくドラッグすると発生します。結局、ブール値の配列と画像は同期していません。同時に設定しても同じです。これを引き起こしていること、または私がそれを修正するために何ができるのか?私はこれに答えを考え出した
- (void)drawRect:(CGRect)rect {
if ([soundArray buttonStateForRow:(int)(floor((touchX+0.001)/40)) column:(int)(floor((touchY+0.001)/40))])
[whiteImage drawAtPoint:(CGPointMake((CGFloat)(floor((touchX+0.001)/40)*40), (CGFloat)(floor((touchY+0.001)/40))*40))];
else
[blackImage drawAtPoint:(CGPointMake((CGFloat)(floor((touchX+0.001)/40)*40), (CGFloat)(floor((touchY+0.001)/40))*40))];
}
ダーティー・レットはどういう意味ですか? –