【问题标题】:Large UIScrollView with background pattern fails具有背景图案的大型 UIScrollView 失败
【发布时间】:2011-03-05 14:35:46
【问题描述】:

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

这里是示例代码

- (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];

}

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

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

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

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

【问题讨论】:

  • 一种方法可以将图像设置为视图的背景并将scrollView的背景颜色设置为清除颜色......但在这种情况下,您只需要松开背景图像的滚动功能在当前情况下正在发生这种情况。

标签: iphone sdk uiscrollview


【解决方案1】:

嗯,我也猜是内存问题……

尽量避免这种情况:

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

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

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

如果是这样,一个可能的解决方案是为您的视图使用 CATiledLayer,因此您的大 UIView 的可见部分将在内存中(用户每次滚动时都会看到它在绘制不便......)

【讨论】:

    【解决方案2】:

    我也面临同样的问题。我的图像很长,我只想在滚动时对其执行全景效果。如果我使用 CATiledLayer,它会提供那种平滑度吗?我不认为这样会带来平滑度。因为它会在每次滚动时绘制。我只想像标准的 iPhone 应用程序图标那样滚动 Home。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        • 1970-01-01
        • 2015-09-03
        • 1970-01-01
        相关资源
        最近更新 更多