我有粘性的bug,我似乎无法弄清楚,我认为它是与touchesMoved的实现方式。

在touchesMoved,我检查以查看在触摸是(if语句),然后相应地,呼叫setNeedsDisplayWithRect上接触点附近的40 40区域。什么发生在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和棘手的是实例变量,以及它们在touchesMoved都拿到复位每次调用的drawRect完成之前。因此,如果我快速移动屏幕上,touchesMoved将被调用,然后调用drawRect中,然后将touchesMoved再次调用drawRect中曾使用touchX和敏感之前,因此绘图会得到不同步的布尔数组后端。

要解决这个问题,我停止的drawRect使用touchX和敏感,并开始通过使用正被从touchesMoved传入的脏矩形导出的相同点。

多田!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top