通过捏合手势缩放 UICollectionView
Posted
技术标签:
【中文标题】通过捏合手势缩放 UICollectionView【英文标题】:Zoom UICollectionView via pinch gesture 【发布时间】:2017-08-29 16:27:52 【问题描述】:我有一个UICollectionView
,里面有很多单元格(大约 5k+)。我想捏一下放大/缩小。我每次都尝试invalidateLayout
。它真的很慢。所以我想使用CGAffineTransformMakeScale
,但我不知道如何在此之后滚动。
我的代码是:
- (void)didReceivePinchGesture:(UIPinchGestureRecognizer *)gesture
static CGFloat scaleStart;
if (gesture.state == UIGestureRecognizerStateBegan)
scaleStart = self.venueLayoutZoom;
else if (gesture.state == UIGestureRecognizerStateChanged)
CGAffineTransform transform = CGAffineTransformMakeScale(self.venueLayoutZoom, self.venueLayoutZoom);
self.activeCollectionNode.view.transform = transform;
self.activeCollectionNode.view.contentSize = CGSizeMake(318 * self.venueLayoutZoom, 500 * self.venueLayoutZoom);
但是当放大时我不能左右滚动。帮帮我。
【问题讨论】:
@ReinierMelian 感谢您的回复,我已经尝试过了。没用 你能把你的collectionView放在UIScrollView里面,让它不可滚动吗? @ReinierMelian 你是什么意思? 我已经完成了这项工作,但是使用了外部 UIScrollView 并调整了对俯仰手势动作的内部 tableView 约束,我在问该解决方案是否适用于您的场景 @ReinierMelian 你能告诉我一些代码或示例项目吗? 【参考方案1】:使用
@interface ViewController () <UICollectionViewDataSource,
UICollectionViewDelegate, UICollectionViewDelegateFlowLayout>
@property (nonatomic,assign) CGFloat scale;
@property (nonatomic,weak) IBOutlet UICollectionView *collectionView;
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
self.scale = 1.0;
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
UIPinchGestureRecognizer *gesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(didReceivePinchGesture:)];
[self.collectionView addGestureRecognizer:gesture];
- (CGSize)collectionView:(UICollectionView *)collectionView layout:
(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:
(NSIndexPath *)indexPath
return CGSizeMake(50*self.scale, 50*self.scale);
- (void)didReceivePinchGesture:(UIPinchGestureRecognizer*)gesture
static CGFloat scaleStart;
if (gesture.state == UIGestureRecognizerStateBegan)
scaleStart = self.scale;
else if (gesture.state == UIGestureRecognizerStateChanged)
self.scale = scaleStart * gesture.scale;
[self.collectionView.collectionViewLayout invalidateLayout];
【讨论】:
以上是关于通过捏合手势缩放 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章