我有一个iPad应用程序,其中我使用的是UICollectionView每个UICollectionViewCell包含只是一个单一的UIImage。 目前我每页9个UIImages(3行×3列)显示,我有好几页。
我想用缩放手势来放大对整个UICollectionView增大/减小行数/每页显示的列和最好的将是捏合手势期间拥有美丽的缩放动画!
目前,我已在UICollectionView加入捏合手势。 我赶上缩放手势事件中使用的比例因子来计算行/列数,如果它已经改变,那么我更新使用完整UICollectionView:
[_theCollectionView performBatchUpdates:^{
[_theCollectionView deleteSections:[NSIndexSet indexSetWithIndex:0]];
[_theCollectionView insertSections:[NSIndexSet indexSetWithIndex:0]];
} completion:nil];
它的工作原理,但我在过渡期间没有流畅的动画效果。
任何的想法? UICollectionView从UIScrollView的继承,是否有重复使用的UIScrollView捏合手势功能来达到我的目标的可能性?
我假设你使用的是默认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
是作秀,你可以应用此相同的概念,任何其他属性,这并不需要beginUpdates / endUpdates因为用户自己是承载规模的时机。
这里是正在运行的项目 ,如果你想看到它在行动。
对不起,我的2美分的问题,我已经找到了解决办法,很简单。
在我PinchGesture
回调刚才我做了以下内容:
void (^animateChangeWidth)() = ^() {
_theFlowLayout.itemSize = cellSize;
};
[UIView transitionWithView:self.theCollectionView
duration:0.1f
options:UIViewAnimationOptionCurveLinear
animations:animateChangeWidth
completion:nil];
我的所有的细胞UICollectionView
成功改变,有一个很好transition
。