如何在iphone中使用不同的数组重新加载scrollView

Posted

技术标签:

【中文标题】如何在iphone中使用不同的数组重新加载scrollView【英文标题】:How to reload scrollView with different array in iphone 【发布时间】:2012-08-30 08:47:26 【问题描述】:

我已经拍摄了 2 个图像数组,例如

A=["l.jpg","m.jpg","n.jpg","p.jpg","q.jpg","r.jpg"]

B=["a.jpg","b.jpg","c.jpg"].

然后为了显示图片已经添加了带有pagecontrol的scrollview (页面控件中的页面数将为)

[数组计数]

而且滚动视图的内容大小也取决于[array count],即

scroll.width * array.count

这里,如果有 4 个页面,那么 3 个页面将被加载到内存中,并且在滚动之前的图像将被卸载。

1) 最初显示 A 数组图像。 2)然后单击按钮,我将 scrollview.contentSize , pagecontrol.numberof 页面替换为 B 数组长度,并卸载先前由 A 数组加载的图像。 3) 要显示 B 数组,scrollview contentsize 需要很小并且页数为 4.所以,我再次通过

重置我的scrollview

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * [数组计数],scrollView.frame.size.height);

然后我滚动到 B 数组中的最后一个图像,在最后一个图像之后,当我尝试滚动到下一个图像时,它显示为 A 数组图像的“q.jpg”图像,该图像未正确卸载。

那么,当从不同的图像数组重新加载时,如何从滚动视图中卸载所有图像。

谢谢。

【问题讨论】:

【参考方案1】:

没有测试,或许可以用for循环将子视图的所有图片属性设置为nil?

for(int i = 0; i < previousImageArray.count; i++)

   UIImageView *imageView = [[myScrollView subviews] objectAtIndex:i];

   imageView.image = nil;

如果这不起作用,您可以随时硬删除子视图:

// get all subviews inside your scrollview into an array
NSArray *subviews = [myScrollView subviews];

// loop through array, for each image view subview in your scrollview
// remove it from the superview (superview is your scroll view in this case)
for(int i = 0; i < subviews.count; i++)

    UIImageView *imageView = (UIImageView *)[subviews objectAtIndex:i];

    [imageView removeFromSuperview];

这将从您的滚动视图中删除所有子视图。当您读取新的图像数组时,您需要重新添加所有图像视图。

【讨论】:

【参考方案2】:

这本质上就是 UITableViewController 的用途。 您可以动态控制单元格的数量和顺序(在您的情况下是自定义单元格内的图像),并且当基础数据发生更改时,只需在表格视图上调用 reloadData。

它还为您嵌入了 UIScrollView,因此您不必费力。

【讨论】:

以上是关于如何在iphone中使用不同的数组重新加载scrollView的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Iphone SDK 中基于单个数组对多个数组进行排序

如何在 iphone 中刷新 UITableView?

如何通过 CoreData 在数据库表中重新加载对象数组

在 iPhone 中,我如何知道在使用正向地理编码时我的所有地图注释何时加载?

加载重新加载页面时如何删除数组中的所有对象?

每次重新启动 iPhone App 时 NSHomeDirectory 返回不同的路径