从UICollectionViewCell查询到UIScrollView中的正确位置

时间:2013-04-20 18:55:38

标签: ios objective-c uiscrollview uicollectionview

我的UIScrollView中有一些图片,我希望如果点击它们,会有一个UIScrollView我可以滚动所有图像(例如照片的应用)。我得到了这段代码:

CollectionViewController:

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

ScrollViewController:

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);

如何连接这两个?

1 个答案:

答案 0 :(得分: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检索图像,但您可以享受集合视图的完整内存效率。我建议scrollview采用类似的技术。 (为了让自己的生活更轻松,你可能想要考虑将第二个场景变成水平集合视图(每个单元格占据整个屏幕本身),或者找到一个好的无限滚动scrollview类来有效地处理它的内存。)