带背景图案的大型UIScrollView失败

时间:2011-03-05 14:35:47

标签: iphone sdk uiscrollview

我有一个带有非常大的内容视图的UIScrollView,它是一个书架,上面有大约1000个项目,当滚动视图内容超过16000px高时,它显示黑色背景,所有图形重叠/混合在一起。

以下是示例代码

- (void)viewDidLoad {
    [super viewDidLoad];

    // Doesn't work
    int sizeForContent = 20000;

    // Does Work
    //sizeForContent = 10000;


    UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];  

    UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, sizeForContent)];
    subView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"wood.jpg"]];
    [scroll addSubview:subView];
    [subView release];

    scroll.contentSize = CGSizeMake(self.view.frame.size.width, sizeForContent);
    [self.view addSubview:scroll]; 

    [scroll release];

}

有谁知道为什么会这样?我认为它与内存限制有关,但它似乎没有使用太多内存。

我知道我可以直接设置scrollview背景颜色而不是添加子视图并设置背景但我需要将scrollview背景保留为颜色。

如果您想查看问题,可以从http://cl.ly/2i3F3q0G1j3q433n0f1E获取基本的xcode项目。

非常感谢任何帮助或解释。

3 个答案:

答案 0 :(得分:0)

嗯,我也猜这是一个记忆问题......

尽量避免这种情况:

 subView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"wood.jpg"]];

我想当你这样做时,xCode会加载一个小的jpg,但是然后在你的UIView的整个区域绘制它,并且会有一个大的“图像”保存在内存中......

尝试仅使用填充颜色,看看是否有变化......

如果是这样,一个可能的解决方案可能是为您的视图使用CATiledLayer,所以只有大UIView的可见部分将在内存中(用户每次滚动时都会看到它的不便之处......)< / p>

答案 1 :(得分:0)

我也面临同样的问题。我有一个很长的图像,我只是想在滚动时对它进行panaroma效果。如果我使用CATiledLayer,它是否会提供平滑性。我不这么认为会给那种顺畅。因为它会在每次滚动时绘制。我只想做滚动主页的标准iPhone应用程序图标。

答案 2 :(得分:0)

我通过创建带有图案背景的视图,并将滚动视图添加为带有[UIColor clearColor]背景的子视图来解决它。