放大二维 UICollectionView
Posted
技术标签:
【中文标题】放大二维 UICollectionView【英文标题】:Zoom on a two dimensional UICollectionView 【发布时间】:2014-04-17 00:04:39 【问题描述】:我创建了一个水平和垂直的UICollectionView
。它有不同的UICollectionViewCells
。一切都布局正确。现在我正在努力做到zoomable
。 UICollectionViewCells
的大小也已正确调整。每次出现UIPinchGesture
时,我都会在UICollectionViewLayout
的依赖项中设置itemSize
scale
。
TestLayout *layout = (TestLayout *) self.collectionViewLayout;
CGSize newItemSize = CGSizeMake(_sizeItem.width * gesture.scale,
_sizeItem.height * gesture.scale);
[layout setItemSize:newItemSize];
在这里您可以看到我在 CustomLayout 中调用的方法 setItemSize。
- (void)setItemSize:(CGSize)itemSize
if (CGSizeEqualToSize(self.itemSize, itemSize)) return;
_itemSize = itemSize;
// [self prepareLayout];
[self invalidateLayout];
我的问题是知道,所有项目 resize
都在右下角,我不知道如何准确地关注我的 UIPinchGesture
所在的元素。
每次gesture
出现这样的情况时,我都尝试更改contentOffset
:
CGPoint posInView = [gesture locationInView:self];
CGPoint pointPinchTouch = CGPointMake(posInView.x - self.contentOffset.x,
posInView.y - self.contentOffset.y);
CGPoint newOffset = CGPointMake(self.contentOffset.x * (gesture.scale * 2),
self.contentOffset.y * (gesture.scale * 2));
[self setContentOffset:newOffset animated:NO];
但我从未设法留在CGPoint
我的UIPinchGesture
被处决了。
此外,当scrolling
整体上UICollectionView
时,我的contentOffset
在scroll
没有结束时仍然是0,0
。所以开始捏我总是在左上角结束。
因为UICollectionView
似乎没有被设计为同时使用水平和垂直,这就是为什么我也不能使用UIScrollView
的delegate
方法zooming
。
也许有人可以告诉我如何解决这个问题。
【问题讨论】:
【参考方案1】:让我看看我是否理解这个问题。您试图通过更改项目大小来放大特定单元格,但所有单元格的大小都在发生变化,而不是被挤压的那个?
如果我的理解是正确的,那么我可以提供帮助。更改 FlowLayout.itemSize 会更改集合视图中所有单元格的大小。如果要设置特定单元格的项目大小,则应覆盖 UICollectionViewDelegateFlowLayout 的 sizeForItemAtIndexPath。在 sizeForItemAtIndexPath 方法中,您可以检查 itemAtIndexPath 与被捏合的单元格并仅为该单元格返回不同的大小。
您问题的另一部分(关于滚动和偏移)对我来说并不是很清楚。你是对的,集合视图应该水平或垂直使用,但不能同时使用。也许这就是导致问题的原因?
【讨论】:
以上是关于放大二维 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章
基于 Google ML Kit 快速集成二维码扫描,速度比 zxing 快,可配置相册,闪光灯,相机可以调整焦距放大缩小,自定义扫描线颜色,自定义背景颜色,自定义遮罩层,支持同时扫多个二维码和条形码
基于 Google ML Kit 快速集成二维码扫描,速度比 zxing 快,可配置相册,闪光灯,相机可以调整焦距放大缩小,自定义扫描线颜色,自定义背景颜色,自定义遮罩层,支持同时扫多个二维码和条形码