带有图案背景的UIScrollView

3
这里是我遇到的问题:我正在制作一个UIScrollView,它将有一个用于填充背景的图案图像。也就是说,我需要一个背景与UIScrollView一起滚动。这在iPad上的Game Center应用程序中有很好的例子,背景将随着UIScrollView平稳地滚动。
目前,我有两种实现这种效果的方法,但都没有提供良好的表现。首先我尝试了这个:
self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:kRLCastViewBGUnit]];

不幸的是,滚动性能非常差,并且占用了太多的内存。

然后我尝试在drawRect中使用CGContextDrawTiledImage,像这样:

- (void)drawRect:(CGRect)rect
{
    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    CGContextTranslateCTM(currentContext, 0, rect.size.height);
    CGContextScaleCTM(currentContext, 1.0, -1.0);

    CGContextClipToRect(currentContext, rect);
    CGRect centerTileRect = CenterTileRect;
    CGContextDrawTiledImage(currentContext, centerTileRect, [ResourceProvider backgroundTileImageRef]);

}

在新的iPad上,仍然不太满意。我肯定做错了什么或者误用了一些方法,因为当它滚动时,游戏中心表现得非常好。有人能给我提供解决UIScrollView背景性能问题的解决方案吗?非常感谢!


这实际上是一个非常好的问题,我也无法找到解决方法。尤其是在新款iPad上,性能非常差。 - rubenfonseca
1
实际上,我最终是手动处理背景的...我向UIScrollView添加了两个UIImageView,并调整这两个背景的上下位置,使其看起来像是有一个纹理背景与其一起滚动.. - GabrielYeah
尝试释放所有不再使用的变量和对象。 - Krunal
1个回答

0
你应该使用UITableView。在这里,你可以轻松地设置cell.backgroundView。
UIImageView *backgroundView = [[UIImageView alloc] initWithFrame:CGRectMake:(0.0,0.0,320.0, height)];
backgroundView.image = [UIImage imageNamed:@"Shelf.jpeg"];
cell.backgroundView = backgroundView;

如果你真的想只使用UIScrollView,那么只需要一个单元格背景图像,并且图像宽度应该与scrollView的宽度相同,因为colorWithPatternImage:方法的工作方式类似于平铺属性。

只需将此图像添加到您的项目中,并将其用作UIScrollView的backgroundColor即可。

[scrollView setContentSize:CGSizeMake(320.0, 1000.0)];
[scrollView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"cellImage.png"]]];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接