我的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);
如何连接这两个?
答案 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类来有效地处理它的内存。)