[ios]从 UICollectionViewCell 一直跑到正确的地方,在 UIScrollView

发布时间: 2017/3/21 22:48:51
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

一些图像在我 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:

如果您的集合视图了,说,50 幅图像,你点击 #5,你说你想要看到一个滚动视图,用相同的 50 幅图像,但图像 #5 处开始?

基本上,它是所有函数的模型支持你 UICollectionView 控制器。例如,假设集合视图有一个数组 (也许图像数组名称,也许为其图像文件名是一个属性的对象数组),就像这样︰

@property (nonatomic, strong) NSMutableArray *objects;

然后第二个场景可能有镜子,像一个属性︰

@property (nonatomic, weak) NSArray *objects;

那第一个属性会变的引用到支持其集合视图的主视图控制器阵列。

你滚动视图应该也可能有一些 index 属性,所以你可以告诉它你选择哪个单元格︰

@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 检索图像,根据需要但你然后享受完全内存效率的集合视图。因此,我建议滚动视图采用了类似的技术。(关于你自己,让生活更轻松,你可能想要考虑这第二个场景水平集合视图 (在每个单元格占用全屏,本身),或发现自己一个好的无限滚动滚动视图类,有效地处理它的内存。)

赞助商