0

我有一个或多个代表/填充整个屏幕的 CALayers。我想使用许多带有图像的小矩形来从网格结构中填充那些 CALayers。

我尝试为每个 Rect 分配自己的 CALayer 和 UIImage。使用超过 6000 个 CALayers,结果非常缓慢。现在我正在寻找一种不使用那么多 CALayer 的方法。也许只有顶级的。

那么是否有一种机制可以在 CALayer 中为 UIImages 分配他们自己的 Rect ?

慢/坏代码示例:

- (void)createLayer{
    CALayer *currentLayer = self.layer;

    _layerArray = [[NSMutableArray alloc] initWithCapacity:WIDTH*HEIGHT];
    int cellSize = self.bounds.size.width / WIDTH;
    double xOffset = 0;

    CGRect cellFrame = CGRectMake(0, 0, cellSize, cellSize);
    NSUInteger cellIndex = 0;
    cellFrame.origin.x = xOffset;

    for (int i = 0; i < WIDTH; i++)
    {
        cellFrame.origin.y = 0;
        for (int j = 0; j < HEIGHT; j++, cellIndex++)
        {                
            if([[self.levelState.boardChanges objectAtIndex:(i*HEIGHT)+j] intValue]==1){
                {
                    NSNumber *currentCell = [self.levelState.board objectAtIndex:cellIndex];
                    CALayer *sublayer = [CALayer layer];
                    sublayer.frame = cellFrame;
                    if (currentCell.intValue == 1)
                    {
                        [[_layerArray objectAtIndex:(i*HEIGHT)+j ] setContents:(id) [UIImage imageNamed:@"image1.png"].CGImage];
                    }
                    else if (currentCell.intValue == 0)
                    {
                        [[_layerArray objectAtIndex:(i*HEIGHT)+j ] setContents:(id) [UIImage imageNamed:@"image2.png"].CGImage];
                    }
                    [currentLayer addSublayer:sublayer];
                    [_layerArray addObject:sublayer];
                }
            }
            cellFrame.origin.y += cellSize;
        }
        cellFrame.origin.x += cellSize;
    }
}
4

1 回答 1

1

我会推荐一种非常不同的方法。

子类化 uiview 并将其用作背景

在您的 uiview 子类中,覆盖

-(void)drawRect:(CGRect)rect

在里面,你可以在你定义的矩形内绘制你的 uiimages

[[UIImage imageNamed:@"image1.png"]drawInRect:CGRectMake(0,0,10,10)]; //first square
[[UIImage imageNamed:@"image2.png"]drawInRect:CGRectMake(10,0,10,10)]; // and another right beside it

您可以更多地研究核心图形以获得更好的想法

于 2013-03-17T14:00:12.890 回答