知道为啥下面的 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 框架上的 observable 只在订阅后触发一次