我有一個棘手的bug,我似乎無法弄清楚,我認爲它與touchesMoved的實現方式有關。touchesMoved和drawRect的問題
在touchesMoved中,我檢查觸摸位置(如果是語句),然後相應地在接觸點附近的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))];
}
}
}
我的問題是,布爾數組似乎不符合我放下的圖像。只有當我在屏幕上快速拖動時纔會發生這種情況。最終布爾數組和圖像不再同步,即使我同時設置它們。任何想法是什麼導致這一點,或我能做些什麼來解決它?
這裏是我的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))];
}
髒rect是什麼意思? – 2014-02-07 14:20:12