質問

私は私が把握することができないようスティッキーバグを持っている、と私はそれがtouchesMovedが実装されている方法とは何かを持っていると思います。

touchesMovedに、私はタッチポイントの近くに40 40による面積にsetNeedsDisplayWithRectを呼び出し、それに応じて、その後(if文)のタッチがどこにあるかを確認します。何の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))];
        }
    }
}

私の問題は、ブール配列は私がダウンして入れているイメージで調子が悪いように思われることです。私は、画面全体に本当に速いドラッグした場合にのみ発生します。最終的に、ブール配列や画像は、私はそれらを同時に設定していても、同期されなくなりました。どれこれを引き起こしているもののアイデア、または私はそれを修正するために何ができますか?

ここに私のdrawRectです。

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


}
役に立ちましたか?

解決

私はこの答えを考え出しました。 touchXと厄介は、インスタンス変数だった、とのdrawRectへの各呼び出しが完了する前に、彼らはtouchesMovedにリセットを取得しました。私は、画面上に高速移動した場合そのため、touchesMovedが呼び出されるでしょう、そしてのdrawRectはtouchXと微妙な使用していた前に、その後touchesMovedは再び呼ばれるになるだろう、のdrawRectを呼び出し、その図面は、ブール配列のバックエンドと同期しなくなるだろう。

これを解決するために、私はのdrawRectでtouchXと厄介を使用して停止し、touchesMovedから渡されていた汚いRECTを使用して同じポイントを導出し始めました。

多田!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top