知道为啥下面的 UIView 动画只在一个方向上起作用吗?

Posted

技术标签:

【中文标题】知道为啥下面的 UIView 动画只在一个方向上起作用吗?【英文标题】:Any idea why the following UIView animation only works in one direction?知道为什么下面的 UIView 动画只在一个方向上起作用吗? 【发布时间】:2011-08-04 00:12:04 【问题描述】:

我在 cellForRowAtIndex Delegate 方法的末尾有以下动画,它只是根据我是否设置了 pseudoEditing 标志来左/右移动所有单元格:

[UIView beginAnimations:@"cell shift" context:nil];
[UIView setAnimationDuration:kEventActionViewAnimationDuration];

cell.eventName.frame = (self.pseudoEditing) ? kPseudoEditingFirstIndentedRect : kFirstLabelRect;
cell.eventLocationName.frame = (self.pseudoEditing) ? kPseudoEditingSecondIndentedRect : kSecondaryLabelRect;
cell.eventStartDate.frame = (self.pseudoEditing) ? kPseudoEditingThirdIndentedRect : kThirdLabelRect;
cell.eventStartEndTime.frame = (self.pseudoEditing) ? kPseudoEditingFourthIndentedRect : kFourthLabelRect;
cell.imageView.frame = (self.pseudoEditing) ? kImageViewIndentedRect : kImageViewRect;
cell.rsvpImageView.hidden = !self.pseudoEditing;

[UIView commitAnimations];


return cell;

这里是声明常量的地方:

#define kImageViewRect                          CGRectMake(10, 9.0, 60.0, 60.0)
#define kFirstLabelRect                         CGRectMake(80, 10.0, 220.0, 20.0)
#define kSecondaryLabelRect                     CGRectMake(80, 30.0, 220.0, 20.0)
#define kThirdLabelRect                         CGRectMake(80, 50.0, 220.0, 20.0)
#define kFourthLabelRect                        CGRectMake(180.0, 50.0, 110.0, 20.0)

#define kPseudoEditingFirstIndentedRect         CGRectMake(115.0, 10.0, 195.0, 20.0)
#define kPseudoEditingSecondIndentedRect        CGRectMake(115.0, 30.0, 195.0, 20.0)
#define kPseudoEditingThirdIndentedRect         CGRectMake(115.0, 50.0, 195.0, 20.0)
#define kPseudoEditingFourthIndentedRect        CGRectMake(200.0, 50.0, 110.0, 20.0)

问题是它只能在从右向左移动时向一个方向工作,而不能从正常状态从左向右移动。

有什么想法吗?

【问题讨论】:

你能展示你用来设置动画的代码吗? 您应该尝试使用 Block 动画,因为它们更简单,而且 Apple 认可的做事方式。 @MSgambel:Apple“批准”了这两种方法。也许您的意思是使用块是首选方法? @titaniumdecoy:是的,我就是这个意思。在 ios 4.0 之后,Apple 更喜欢使用块来制作动画。 @XenElement,不确定您的意思,但这就是我正在使用的所有动画代码。 re:others,需要向后兼容。 【参考方案1】:

原来我的 FetchedResultsController 在动画开始后直接重新加载表格,这取消了它。

【讨论】:

以上是关于知道为啥下面的 UIView 动画只在一个方向上起作用吗?的主要内容,如果未能解决你的问题,请参考以下文章

UIView 动画发生在错误的方向

为啥 UIView 框架上的 observable 只在订阅后触发一次

UIView 动画 iOS,诡异

当我将 UIView 动画放在不同类的 containerView 中时,为啥我的 UIView 动画不起作用?

为啥我的 UIView 动画到错误的位置?

为啥UIView动画会改变View frame?