美文网首页
关于解决滚动卡片视图(UICollectionView)添加3D

关于解决滚动卡片视图(UICollectionView)添加3D

作者: ff567a254ab5 | 来源:发表于2018-11-23 13:33 被阅读46次

在开发中我们可能会遇到滚动卡片视图的需求,如图


screenshot.png

这个滚动卡片视图中我添加了transform3D旋转缩放

CGFloat isLeft = distance < 0 ? 1:-1;
CGFloat angle = (1- scale) * M_PI_2 * isLeft;
transform3D.m34 = -1 / 500.0;
transform3D = CATransform3DRotate(transform3D, angle, 0, 1, 0);
transform3D = CATransform3DScale(transform3D,scale , scale, 0);
attr.transform3D = transform3D;

滚动效果实现后出现了一个新的问题,就是collectionViewDelegate中
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 该代理方法无法响应执行

解决方案如下:
1.通过scrollView的scrollView.contentSize和scrollView.contentOffset.x来计算当前滚动到第几个item了
2.给collectionView添加手势UITapGestureRecognizer,响应点击方法
贴下代码:
添加手势

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didSelectScrollItem)];
[collectionView addGestureRecognizer:tap];

计算滚动到的index

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat offsetx = scrollView.contentOffset.x;
    CGSize size = scrollView.contentSize;
    CGFloat x = size.width;
    CGFloat leftW = (kScreen.width - 一个item的宽度)/2;(距离左右两边的宽)
    NSInteger num = (offsetx+leftW) / (x/item数量);
    if(x == 0){
        self.index = 0;
    }else{
        self.index = num;
    }
}

- (void)didSelectScrollItem
{
    NSLog(@"%ld",self.index);
}

相关文章

网友评论

      本文标题:关于解决滚动卡片视图(UICollectionView)添加3D

      本文链接:https://www.haomeiwen.com/subject/crqjqqtx.html