我的问题是:我有一个简单的块状图像,我想把它制作成网格。我在我的UIView中创建了一个CGPoint数组。然后我使用
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是用户触摸屏幕的CGPoint。 所以我基本上在用户触摸的网格点上显示不同的图像。
首先,问题在于每次调用DrawRect时整个屏幕都会重新绘制。 我想能够保存状态(通过更改BOOL数组?),并让用户在屏幕上拖动并更改多个图像。 但是,当我在DrawRect之外时,无法使用UImage的“drawAtPoint”方法(会抛出错误)。
无论如何,我开始查看CoreAnimation和Quartz文档,并感到非常困惑。 我不确定是否应该为每个砖块创建多个UIView(似乎过度),还是一个CALayer或CGLayer的网格...我认为我想做的事情很简单...但我真的不理解Layers,以及使用CALayer和CGLayer之间的区别。 显然,“所有UIView都支持层”,这是什么意思?
我有点迷失在如何实现它的过程中。 我基本上想在网格中交换图像,以便用户可以在屏幕上“绘画”并切换图像。
编辑
我尝试使用[self setNeedsDisplayinRect]来实现此操作,并传递用户手指下的CGRect。 但是,这仍然在TouchesMoved中调用DrawRect,虽然这给我想要的效果,但在iPhone上太慢了。 有没有更有效的方法使用CALayers实现相同的效果? 我是Core Animation的新手,不太明白如何使用图层解决此问题。