Objective c 触摸移动和drawRect出现问题

Objective c 触摸移动和drawRect出现问题,objective-c,cocoa-touch,drawing,touch,Objective C,Cocoa Touch,Drawing,Touch,我有一个棘手的bug,我似乎无法弄清楚,我认为它与touchesMoved的实现方式有关 在touchsmoved中,我检查触摸的位置(if语句),然后相应地,在触摸点附近的一个40×40的区域上调用setNeedsDisplayWithRect。DrawRect中发生的情况是,如果之前有白色图像,则黑色图像会被放下,反之亦然。在调用setNeedsDisplayWithRect的同时,我在布尔数组中设置了一个布尔变量,这样我就可以跟踪当前图像的内容,从而显示相反的内容。(事实上,我并不总是翻转

我有一个棘手的bug,我似乎无法弄清楚,我认为它与touchesMoved的实现方式有关

在touchsmoved中,我检查触摸的位置(if语句),然后相应地,在触摸点附近的一个40×40的区域上调用setNeedsDisplayWithRect。DrawRect中发生的情况是,如果之前有白色图像,则黑色图像会被放下,反之亦然。在调用setNeedsDisplayWithRect的同时,我在布尔数组中设置了一个布尔变量,这样我就可以跟踪当前图像的内容,从而显示相反的内容。(事实上,我并不总是翻转图像…我看第一次触摸将要做什么,比如从黑色切换到白色,然后在所有后续触摸上放置白色图像,所以这有点像用图像绘制或擦除)

我的问题是,布尔数组似乎与我正在放置的图像不符。只有当我在屏幕上快速拖动时才会发生这种情况。最终,布尔数组和图像不再同步,即使我同时设置了它们。知道是什么原因造成的吗,或者我能做些什么来修复它

这是我的草稿:

- (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和touchY是实例变量,在每次调用drawRect之前,它们都会在touchsMoved中重置。因此,如果我在屏幕上快速移动,touchesMoved将被调用,然后调用drawRect,然后touchesMoved将在drawRect使用touchX和touchY之前再次被调用,因此图形将与布尔数组后端不同步

为了解决这个问题,我停止在drawRect中使用touchX和touchY,并开始使用从touchesMoved传入的脏rect来派生相同的点


塔达

脏rect是什么意思?
- (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))]; 


}