加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

iphone – UITableViewCell平移显示选项:动画

发布时间:2020-12-14 17:22:37 所属栏目:百科 来源:网络整理
导读:所以我在tableview单元格上有很好的平移实现.我基本上使用panGestureRecognizer并将单元格移出屏幕,并在tableViewCell下方显示另一个视图.这工作正常.当我在tableViewCell上平移时,我基本上会在下面显示5个按钮. 我的目标是在tableviewcell移动时为5个按钮设
所以我在tableview单元格上有很好的平移实现.我基本上使用panGestureRecognizer并将单元格移出屏幕,并在tableViewCell下方显示另一个视图.这工作正常.当我在tableViewCell上平移时,我基本上会在下面显示5个按钮.

我的目标是在tableviewcell移动时为5个按钮设置动画.例如,

| 1 | 2 | 3 | 4 | 5 |

如果我正在滑动,并且向右移动单元格并且我是十字按钮1,我将动画按钮弹出并对用户可见.
如果我正在穿越2,那么2将弹出一个动画,并且对用户可见.
当我在按钮5中时,所有按钮都已弹出并准备好进行用户操作.

我这样做

//Scale Animation
    CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
    scaleAnim.duration = 0.3;
    scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
    scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1,0.1,1.0)];
    scaleAnim.removedOnCompletion = YES;
    [view.layer addAnimation:scaleAnim forKey:nil];

**

我的目标 :

**

因此,当我处于平移手势的中间,并且我决定关闭它(向左移动)时,按钮应该弹出,并且对用户不可用.

此外,当我移动单元格时,按钮应逐渐向上扩展,并且对用户可用.所以我基本上需要传递单元格的原点并使用一些数学来计算基于按钮的原点和宽度(相当直接)的按钮比例.

if (CGRectIntersectsRect(button.frame,self.movingCell.frame))
{
    CGFloat xScale = cellTranslation - xOriginForButton;
    [self popOutAnimate:button withScale:xScale/ (xWidthForButtons + xSpaceBetweenButtons)];
}

但是当我快速移动单元格时,问题出现了,视图没有得到单元格运动的所有变化,并且它们处于半动画状态.

我有一种感觉,我没有把握正确的逻辑.整个实现类似于Sparrow iphone邮件应用程序.当您平移单元格时,按钮会在移动单元格时显示动画.对于那些没有使用过麻雀的人.你可以在1:25 https://www.youtube.com/watch?v=XLX6XV0SbWI&t=1m25s看到平移手势

逻辑是否正确?我错过了什么吗?

任何帮助深表感谢.

解决方法

在使用几种不同的方法进行此操作后,我最终得到了一个解决方案,我在下面键入它.

算法:

滑动或平移tableViewCell的原理很简单.
用于弹出单元格下方的按钮的算法基于
细胞的当前位置与细胞的位置相比较
纽扣.有几种方法可以解决这个问题
以下示例是_NOT_THE_MOST_OPTIMAL_给出的一个
我们重新排序按钮时出现的复杂情况. (即如果
按钮被重新排序,算法将失败).

让我们看一下这个问题的最佳解决方案.

>使用(CGRectIntersects(rect1,rect2)执行hit_test以找出单元格与任何单元格相遇的位置
纽扣.
==>这将是最理想的解决方案,因为更换或交换按钮仍然可以正常工作.
但我们不能使用这种方法,因为当单元格快速移动时,hit_test将失败.
这将使按钮处于非常不正确的状态.
>根据翻译和直接使用按钮的框架
扩大它们. ===>我们不能使用任何按钮的框架
场景因为我们缩放它们(x,y,大小,宽度)变化很大
>在动画之前缓存按钮帧并使用它们进行缩放
他们. ===>缓存它们可能适用于某些情况,但我们会
需要定期更新它们,并确保缓存它们
在ORIENTATION_CHANGE之后.这将再次成为按钮框架的痛苦
取向变化后也非常显着(参见第2页).

工作:

因此,如果我们要为单元格下方的所有按钮设置动画,那么您将拥有
只有一个regionOfAnimation.如果你有一组带有静态按钮的部分,还有一组需要的按钮
动画,然后我们有2个区域 – 一个区域有staticButtons,另一个区域有一个区域.

基于动画区域的位置(如IB中设置的)计算该区域的这些值.我们再次分裂
regionOfAnimation EVENLY基于当前按钮的数量,和
当细胞在每个分裂中移动时,我们为其下方的按钮设置动画.

|    Region of Static Buttons   |  Region of Animation  |
---------------------------------------------------------
| Static Button | Static Button |  1 |  2 |  3 |  4 |  5|
---------------------------------------------------------
|                                       
|              ===>  CELL MOVES ====>               
|   
---------------------------------------------------------

这种方法的优点:

>性能优于hit_test(非常需要休息)
>按钮将始终正常动画,因为我们不访问他们的帧
用于计算

DIS-优势:

>静态按钮区域和动画区域必须事先为两个方向计算.>如果按钮是互换后,需要更新算法以反映新的变化.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读