关于 Collectionview 场景的建议
Posted
技术标签:
【中文标题】关于 Collectionview 场景的建议【英文标题】:Advice on Collectionview scenario 【发布时间】:2015-01-17 14:07:00 【问题描述】:需要一些关于如何使用 Collectionview 处理场景的建议。简而言之,该应用程序有一个显示图像的 CV,您可以在其中点击带有图像缩略图的单元格,然后它将显示该图像的全屏视图。我通过在 didSelectItemAtIndexPath 中实例化一个新的 UIView(不是来自情节提要)来实现这一点。因此,来自单元格的图像的全屏视图只是通过点击单元格触发的新 UIView,我将视图的图像设置为与单元格的图像相同......足够简单。全屏视图还有一个与每个图像相关的按钮。点击全屏图像会关闭图像并返回到 CV。所有这些都完美无缺。
但是,我刚刚意识到我还希望能够在全屏模式下滑动浏览所有图像......基本上与 ios 相册的工作方式非常相似。通过向 didSelectItemAtIndexPath 添加滑动手势并将动作选择器设置为处理滑动的方法,我能够非常快速地编写一些代码来执行此操作,这很有效。但是,这样做的结果实际上只是更改了选择(点击)的原始单元格的图像。因此,在全屏模式下滑动图像时,我无法跟踪所选单元格。
所以我需要有关如何处理此问题的建议。我知道必须有这样的例子,但我找不到任何例子。有人对我应该如何实施这个有任何建议吗?谢谢!
来自 didSelectItemAtIndexPath 的代码...
self.fullScreenImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width-10, self.view.bounds.size.height-15)];
self.fullScreenImage.contentMode = UIViewContentModeScaleAspectFit;
UISwipeGestureRecognizer *rightSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightSwipe:)];
[rightSwipe setDirection:UISwipeGestureRecognizerDirectionRight];
[self.fullScreenImage addGestureRecognizer:rightSwipe];
UISwipeGestureRecognizer *leftSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleLeftSwipe:)];
[leftSwipe setDirection:UISwipeGestureRecognizerDirectionLeft];
[self.fullScreenImage addGestureRecognizer:leftSwipe];
if (!self.isFullScreen)
self.fullScreenImage.transform = CGAffineTransformMakeScale(0.1, 0.1);
__weak BaseViewController *weakSelf = self;
[UIView animateWithDuration:0.5 delay:0 options:0 animations:^
NSLog(@"Starting animiation!");
weakSelf.view.backgroundColor = [UIColor blackColor];
weakSelf.myCollectionView.backgroundColor = [UIColor blackColor];
weakSelf.fullScreenImage.center = self.view.center;
weakSelf.fullScreenImage.backgroundColor = [UIColor blackColor];
weakSelf.fullScreenImage.image = [UIImage imageWithContentsOfFile:coffeeImageData.imageURL.path];
weakSelf.fullScreenImage.transform = CGAffineTransformIdentity; // zoom in effect
[weakSelf.view addSubview:self.fullScreenImage];
[weakSelf.fullScreenImage addSubview:likeButton]; // add the button to the view
completion:^(BOOL finished)
if (finished)
NSLog(@"Animation finished!");
weakSelf.isFullScreen = YES;
];
return;
处理来自...的滑动手势 - (void)handleLeftSwipe:(UISwipeGestureRecognizer *)sender
// make sure indexForSwiping is not > than size of array
if (self.indexForSwiping != [self.imageLoadManager.coffeeImageDataArray count]-1)
self.indexForSwiping += 1;
NSString *cacheKey = self.allCacheKeys[self.indexForSwiping];
if (cacheKey)
[self.imageCache queryDiskCacheForKey:cacheKey done:^(UIImage *image, SDImageCacheType cacheType)
if (image)
[UIView animateWithDuration:1.0 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^
self.fullScreenImage.image = image;
completion:^(BOOL finished)
NSLog(@"swiping");
];
];
【问题讨论】:
【参考方案1】:这个框架已经有了这样的功能,所以你可以查看源代码来了解它是如何工作的......
https://github.com/mwaterfall/MWPhotoBrowser
【讨论】:
谢谢,我去看看!【参考方案2】:我希望视图成为 viewController 的一部分,而不仅仅是你的功能的一部分。然后,让 viewController 管理图像的滑动、图像和位置。当你的 collectionView 被点击时,在你的 viewController 中设置位置,这样当你捕捉到滑动时,你可以增加一并用新图像更新你的视图。如果还不够清楚,请告诉我,我可以尝试澄清
【讨论】:
我不确定我是否在关注你。您是说通过情节提要在 VC 中存在显示全屏图像的 UIView 吗?如果是这样,我不确定在这种情况下我会如何做到这一点。目前,它在视图控制器中,但在 didSelectItem 方法中以编程方式实例化。 你能展示你在哪里实例化它的代码以及你是如何处理滑动的吗?如果我确切地看到你是如何做到的,我想我可以更好地澄清。 感谢您的帮助...刚刚编辑了原始帖子以显示来自 didSelectItemAtIndexPath 的一些代码以及处理左滑动手势的方法。向右滑动是一样的,只是用不同的索引来访问数组中的数据。 你正在做我想让你做的事情。如果正在修改 collectionView,我会看看您是否可以创建图像的副本并将其设置为您的 imageView 正在使用的图像,似乎可能存在指针问题导致它同时更新两个位置。 谢谢,我会继续调查的。以上是关于关于 Collectionview 场景的建议的主要内容,如果未能解决你的问题,请参考以下文章