我有一个带有非常大的内容视图的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项目。
非常感谢任何帮助或解释。
答案 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]
背景的子视图来解决它。