Моя проблема заключается в следующем: у меня есть простое изображение блока, из которого я хочу сделать сетку. Я создал массив CGPoints в моем UIView. Тогда я использовал
blackImage = [UIImage imageNamed:@"black.png"];
, а затем
- (void)drawRect:(CGRect)rect {
for (int j = 0 ; j <= 11; j++)
{
for (int i = 0 ; i <= 7; i++)
{
[blackImage drawAtPoint: (CGPointFromString([[self.points objectAtIndex:j] objectAtIndex:i]))];
}
}
[whiteImage drawAtPoint:(CGPointMake((CGFloat)(floor((touchX+0.001)/40)*40), (CGFloat)(floor((touchY+0.001)/40))*40))];
// [whiteImage drawAtPoint:(CGPointMake(240.0, 320.0))];
}
Где TouchX и TouchY - это CGPoints, когда пользователь коснулся экрана. Поэтому я в основном показываю другое изображение в той точке сетки, к которой прикоснулся пользователь.
Прежде всего, проблема в том, что весь экран перерисовывается каждый раз, когда я вызываю DrawRect. Я хочу иметь возможность сохранить состояние (путем изменения массива BOOL?), Чтобы пользователь перетаскивал экран и менял несколько изображений. Однако я не могу использовать метод drawAtPoint в UImage, когда я нахожусь вне DrawRect. (выдает ошибку).
Во всяком случае, я начал изучать документы CoreAnimation и Quartz, и меня это сильно смутило. Я не уверен, нужно ли мне создавать несколько UIViews для каждого кирпича (кажется чрезмерным) или сетку CALayers или CGLayers ... Я думаю, что это довольно просто, что я хочу сделать ... но я не совсем понимаю Слои и разница между использованием CALayer и CGLayer. По-видимому, «Все UIViews защищены слоем» Что это значит?
Я немного растерялся, как это реализовать. В основном я хочу поменять изображения в сетке, чтобы пользователь мог «рисовать» по экрану и переключать изображения.
Редактировать
Я пытался реализовать это, используя [self setNeedsDisplayinRect] и передавая CGRect, который находится под пальцем пользователя. Тем не менее, это все еще вызывает DrawRect в TouchesMoved, что дает мне эффект, который я хочу, но слишком медленный на iPhone. Есть ли более эффективный способ добиться того же эффекта, используя CALayers? Я новичок в Core Animation и не очень понимаю, как использовать слой для решения этой проблемы.