1

我的 中有一些图像UIScrollView,如果我点击它们,我希望有一个UIScrollView可以滚动浏览所有图像的位置(就像在照片的应用程序中一样)。我得到了这个代码:

集合视图控制器:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    //ImageDetailSegue
    if ([segue.identifier isEqualToString:@"ScrollView"]) {
        Cell *cell = (Cell *)sender;
        NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];

        int imageNumber = indexPath.row % 9;

        ScrollViewController *divc = (ScrollViewController *)[segue destinationViewController];
        divc.img = [UIImage imageNamed:[NSString stringWithFormat:@"full%d.png", imageNumber]];
    }
}

滚动视图控制器:

for (int i = 1; i < 4; i++) {
    UIImageView *image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"full%d.png", i]]];

    image.frame = CGRectMake((i - 1) * 320, 0, 320, 240);
    [imageScroller addSubview:image];
}
imageScroller.contentSize = CGSizeMake(320 * 6, 240);

我怎样才能连接这两个?

4

1 回答 1

0

如果您的收藏视图有 50 张图片,并且您单击 #5,您是说您想查看一个滚动视图,其中包含相同的 50 张图片,但从图片 #5 开始?

基本上,这都是模型支持UICollectionView控制器的功能。例如,假设集合视图有一个数组(可能是图像名称数组,也可能是图像文件名是其中一个属性的对象数组),如下所示:

@property (nonatomic, strong) NSMutableArray *objects;

然后第二个场景可能有一个反映该属性的属性,例如:

@property (nonatomic, weak) NSArray *objects;

第一个属性将是对支持其集合视图的主视图控制器数组的不可变引用。

你的滚动视图也应该有一些索引属性,所以你可以告诉它你选择了哪个单元格:

@property (nonatomic) NSInteger index;

第二个视图控制器可以使用这个index属性来确定从哪里开始它的contentOffset.

然后第一个控制器prepareForSegue看起来很像你建议的:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ScrollView"])
    {
        Cell *cell = (Cell *)sender;
        NSIndexPath *indexPath = [self.collectionView indexPathForCell:cell];

        ScrollViewController *divc = (ScrollViewController *)[segue destinationViewController];
        divc.objects = self.objects;
        divc.index = indexPath.item;
    }
}

请注意,我建议集合视图和滚动视图都不要维护图像数组(因为您可能会很快遇到内存问题)。如果它是一组图像名称或图像 URL,那就更好了。然后您可以cellForItemAtIndexPath根据需要检索图像,但随后您可以享受集合视图的全部内存效率。我建议滚动视图采用类似的技术。(为了让自己的生活更轻松,您可能想要考虑将第二个场景设置为水平集合视图(每个单元格本身占据全屏),或者为自己找到一个很好的无限滚动滚动视图类,可以有效地处理其内存。)

于 2013-04-24T02:06:18.193 回答