进入编辑/重新排序模式时的 UITableViewCell 自定义绘图和动画

Posted

技术标签:

【中文标题】进入编辑/重新排序模式时的 UITableViewCell 自定义绘图和动画【英文标题】:UITableViewCell Custom Drawing and Animating when Entering Edit/Reorder Mode 【发布时间】:2009-08-04 17:58:56 【问题描述】:

我正在尝试做一些与this post 非常相似的事情。从Atebits Fast Scrolling in Tweetie 帖子开始,我有一个 UITableView 子类,它在它的 contentView 的 drawRect: 方法中完成所有的绘制。这完美地工作并且超级快。我现在要做的是动画从编辑到不编辑的过渡。

我想要实现的一个示例是单元格中某些文本右对齐的情况。进入编辑模式时,contentView 向右移动,为编辑控件留出空间,但文本也向右移动到屏幕外。如果我只是在 layoutSubviews 中调用 [contentView setNeedsDisplay] 我可以重新调整右对齐的文本,但它只是跳转到它的新位置。

如何获得动画的过渡效果?

【问题讨论】:

你是如何绘制你的细胞的?如果您遵循 Loren 的建议,您应该直接绘制它们而不是一堆子视图。你有子视图(比如UILabel)还是直接画东西(比如[myString drawInRect:someRect])? 【参考方案1】:

您的layoutSubviews 应如下所示:

-(void)layoutSubviews 
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationBeginsFromCurrentState:YES];

    /* Change offsets here. */

    [UIView commitAnimations];

您可能还需要添加到applicationDidFinishLaunching

[UIView setAnimationsEnabled:YES];

【讨论】:

layoutSubviews 隐式地为您制作动画,因此不需要 beginAnimations/commitAnimations。当您在 drawRect 中绘制自己的内容时,这不起作用:因为没有要更改的偏移量。动画仅在使用 UIView 子类时有效。

以上是关于进入编辑/重新排序模式时的 UITableViewCell 自定义绘图和动画的主要内容,如果未能解决你的问题,请参考以下文章

处于编辑模式时的 UITableViewCell 宽度问题

在编辑模式下重新排序时更改 UITableViewCell 的背景颜色

UITableView编辑模式

进入Editmode时的UITableView动画

UITableView 在表格内点击重新排序

具有可变行高的 UITableview 在重新排序时崩溃