У меня есть липкая ошибка, которую я, кажется, не могу понять, и я думаю, что это как-то связано с тем, как реализована технология touchchesMoved.
in 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))];
}