美文网首页程序员
iOS UICollectionView 点击抖动,移动(iOS

iOS UICollectionView 点击抖动,移动(iOS

作者: 旅途开发者 | 来源:发表于2017-12-28 16:04 被阅读208次

1,创建collectionview的时候添加长按手势

 cellPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(cellMoveingAction:)];
 [self.collectionView addGestureRecognizer:cellPress];

手势最好声明为全局的,这样在后面通过手势定位cell,可以方便去修改每个cell上面的内容

2,定义cell的抖动动画

//开始抖动动画
-(void)beginMove{
    for (SYCollectionViewCell * cell in [self.collectionView visibleCells]) {
        cell.disButton.hidden = NO;
        [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionAutoreverse animations:^{
            cell.transform = CGAffineTransformMakeRotation(0.05);
        } completion:nil];
    }
}
//取消抖动动画
-(void)endMove{
    for (SYCollectionViewCell * cell in [self.collectionView visibleCells]) {
        cell.disButton.hidden = YES;
        [cell.layer removeAllAnimations];
    }
}

3,处理长按手势

-(void)cellMoveingAction:(UILongPressGestureRecognizer *)sender{
    NSIndexPath * index = [self.collectionView indexPathForItemAtPoint:[sender locationInView:self.collectionView]];
    switch (sender.state) {
        case UIGestureRecognizerStateBegan://手势开始
        {
            //开始在特定的索引路径上对cell(单元)进行Interactive Movement(交互式移动工作
            [self.collectionView beginInteractiveMovementForItemAtIndexPath:index];
            [self beginMove];
        }
            break;
        case UIGestureRecognizerStateChanged://手势开始移动
        {
            //在手势作用期间更新交互移动的目标位置。
            [self.collectionView updateInteractiveMovementTargetPosition:[sender locationInView:self.collectionView]];
            [self beginMove];
        }
            break;
        case UIGestureRecognizerStateEnded://手势结束
        {
            //在完成手势动作后,结束交互式移动
            [self.collectionView endInteractiveMovement];
            [self endMove];
            [self.collectionView reloadData];
        }
            break;
        default:
        {
            //取消Interactive Movement。
            [self.collectionView endInteractiveMovement];
        }
            break;
    }
   
}

4,在collectionview的UICollectionViewDataSource方法里面交换数据源,然后刷新collectionview

-(void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{
//这里不使用下面的语句是因为下面的语句是交换两个数据源的位置
//    [self.dataArray exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];
    
    //使用下面的方式,使动画看起来更流畅,先移除要移动的数据,然后在要放置的位置插入数据
    NSString * sourceStr = self.dataArray[sourceIndexPath.row];
    [self.dataArray removeObject:self.dataArray[sourceIndexPath.row]];
    [self.dataArray insertObject:sourceStr atIndex:destinationIndexPath.row];
    [self.collectionView reloadData];
}

这里写下view的几种动画模式

1.常规动画属性设置(可以同时选择多个进行设置)

UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动。

UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互。

UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行。

UIViewAnimationOptionRepeat:重复运行动画。

UIViewAnimationOptionAutoreverse :动画运行到结束点后仍然以动画方式回到初始点。

UIViewAnimationOptionOverrideInheritedDuration:忽略嵌套动画时间设置。

UIViewAnimationOptionOverrideInheritedCurve:忽略嵌套动画速度设置。

UIViewAnimationOptionAllowAnimatedContent:动画过程中重绘视图(注意仅仅适用于转场动画)。  

UIViewAnimationOptionShowHideTransitionViews:视图切换时直接隐藏旧视图、显示新视图,而不是将旧视图从父视图移除(仅仅适用于转场动画)

UIViewAnimationOptionOverrideInheritedOptions :不继承父动画设置或动画类型。

2.动画速度控制(可从其中选择一个设置)

UIViewAnimationOptionCurveEaseInOut:动画先缓慢,然后逐渐加速。

UIViewAnimationOptionCurveEaseIn :动画逐渐变慢。

UIViewAnimationOptionCurveEaseOut:动画逐渐加速。

UIViewAnimationOptionCurveLinear :动画匀速执行,默认值。

3.转场类型(仅适用于转场动画设置,可以从中选择一个进行设置,基本动画、关键帧动画不需要设置)

UIViewAnimationOptionTransitionNone:没有转场动画效果。

UIViewAnimationOptionTransitionFlipFromLeft :从左侧翻转效果。

UIViewAnimationOptionTransitionFlipFromRight:从右侧翻转效果。

UIViewAnimationOptionTransitionCurlUp:向后翻页的动画过渡效果。    

UIViewAnimationOptionTransitionCurlDown :向前翻页的动画过渡效果。    

UIViewAnimationOptionTransitionCrossDissolve:旧视图溶解消失显示下一个新视图的效果。    

UIViewAnimationOptionTransitionFlipFromTop :从上方翻转效果。    

UIViewAnimationOptionTransitionFlipFromBottom:从底部翻转效果。

注:这里是这个练习的demo

相关文章

网友评论

    本文标题:iOS UICollectionView 点击抖动,移动(iOS

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