Ner*_*ken 6 uigesturerecognizer ios pinchzoom uipinchgesturerecognizer uicollectionview
我正在使用 制作一个大网格UICollectionView,我希望它可以UICollectionView使用标准的捏缩放手势进行缩放(整个,而不仅仅是单个单元格)。有问题的网格有一个 custom UICollectionViewLayout,因为我需要它来水平和垂直滚动。
我的布局与这个 SO answer完美配合,所以我有一个可以四处移动的网格。简短的版本是每行单元格是section视图的一个,并且所有单元格都基于cellSize(开始时)50的统一定位。
然后我使用这个 SO answer的修改版本计算了捏缩放能力,我基本上在cellSize收到捏手势时更改布局的值,然后使布局无效,以便它重新绘制略大或小布局。因此,所有的单元格都会变大或变小,我们就可以缩放了。
这是捏合手势方法的代码:
-(void)didReceivePinchGesture:(UIPinchGestureRecognizer*)gesture {
double newCellSize = [(IMMapViewLayout *)_mainCollectionView.collectionViewLayout cellSize] * gesture.scale;
newCellSize = MIN(newCellSize, 100);
newCellSize = MAX(newCellSize, 15);
[(IMMapViewLayout *)_mainCollectionView.collectionViewLayout setCellSize:newCellSize];
[_mainCollectionView.collectionViewLayout invalidateLayout];
}
Run Code Online (Sandbox Code Playgroud)
一切都(几乎)完美地工作。
我的问题是:它从左上角放大,而不是从夹点所在的位置放大。我想是有道理的,因为我们正在重新绘制所有内容,而且都变大了一点,但这显然不是预期的效果。
我的第一个想法是简单地检测正下方的单元格,然后使用它scrollToItemAtIndexPath:atScrollPosition:animated:立即移回该单元格,但它似乎不起作用,而且动画无论如何都会变得非常断断续续。此外,如果您捏住屏幕中央以外的任何地方,则在缩放过程中很难将其直接移回该确切位置。
这是我现在所拥有的:
-(void)didReceivePinchGesture:(UIPinchGestureRecognizer*)gesture {
double newCellSize = [(IMMapViewLayout *)_mainCollectionView.collectionViewLayout cellSize] * gesture.scale;
newCellSize = MIN(newCellSize, 100);
newCellSize = MAX(newCellSize, 15);
[(IMMapViewLayout *)_mainCollectionView.collectionViewLayout setCellSize:newCellSize];
[_mainCollectionView.collectionViewLayout invalidateLayout];
if([gesture numberOfTouches] >= 2) {
CGPoint touch1 = [gesture locationOfTouch:0 inView:_mainCollectionView];
CGPoint touch2 = [gesture locationOfTouch:1 inView:_mainCollectionView];
CGPoint mid;
mid.x = ((touch2.x - touch1.x) / 2) + touch1.x;
mid.y = ((touch2.y - touch1.y) / 2) + touch1.y;
NSIndexPath *currentIndexPath = [_mainCollectionView indexPathForItemAtPoint:mid];
[_mainCollectionView scrollToItemAtIndexPath:currentIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我进行UICollectionView整个缩放,但以捏合的位置为中心吗?
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |