ios – 缩放整个UICollectionView

前端之家收集整理的这篇文章主要介绍了ios – 缩放整个UICollectionView前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个iPad应用程序,我正在使用UICollectionView,每个UICollectionViewCell只包含一个UI Image.
目前我每页显示每9个UIImages(3行* 3列),我有几页.

我想使用Pinch Gesture来放大整个UICollectionView来增加/减少每页显示的行数/列数,最好是在Pinch手势期间获得漂亮的缩放动画!

目前,我在我的UICollectionView上添加了一个Pinch Gesture.我捕获了Pinch Gesture事件以使用比例因子计算行/列数,如果它已更改,那么我使用以下内容更新完整的UICollectionView:

[_theCollectionView performBatchUpdates:^{
     [_theCollectionView deleteSections:[NSIndexSet indexSetWithIndex:0]];
     [_theCollectionView insertSections:[NSIndexSet indexSetWithIndex:0]];
 } completion:nil];

它有效,但在过渡期间我没有平滑的动画.

任何的想法? UICollectionView继承自UIScrollView,是否有可能重用UIScrollView Pinch手势功能来实现我的目标?

解决方法

我假设你正在使用默认的UICollectionViewDelegateFlowLayout,对吗?然后确保相应地响应委托方法,并且当发生夹点手势时,只需使布局无效.

例如,如果我想调整每个项目的大小,同时捏:

@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];
    }
}

self.scale属性仅用于show,您可以将相同的概念应用于任何其他属性,这不需要beginUpdates / endUpdates,因为用户自己正在进行比例的计时.

Here’s a running project,万一你想看到它在行动.

猜你在找的iOS相关文章