【发布时间】:2014-01-17 14:52:24
【问题描述】:
我的应用有一个名为 stepView 的 UIView,它需要增长和缩小,总是向下和向右扩展,并且总是向上和向左收缩。它有一个子视图,durationLabel,它沿着 stepView 的整个宽度运行,并且具有固定的高度。
当 stepView 动画变大时,标签会随之正常增长:文本和标签的背景会随着 stepView 的增长同步向右滑动。然而,当 stepView 动画变小时,它会立即捕捉到新的大小,在 stepView 缩小的右边缘和它的右边缘之间留下一个间隙,直到动画完成。
stepView.m中的标签初始化代码:
CGRect duration_frame = CGRectMake(0, 0, self.frame.size.width, HEADER_HEIGHT);
self.durationLabel = [[UILabel alloc] initWithFrame:duration_frame];
[self.durationLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[self addSubview:self.durationLabel];
还有动画代码:
[UIView animateWithDuration:ANIM_DURATION
animations:^{
[stepView setFrame:newFrame];
}
];
使用 bounds/center 代替 frame 会产生相同的效果。我考虑过使用转换,但计算“newFrame”的代码有点涉及,所以我宁愿尽可能避免重写它。我也尝试在同一个动画块中手动更改标签的框架,但这只会让它完全消失(可能是因为我试图在同一个动画块中同时为视图的框架及其子视图的框架设置动画?)。我还确认 stepView 及其子视图不会同时进行任何其他动画,尽管在单独的动画块中不相关的视图会发生动画。
我不知道为什么当 stepView 增长时标签应该完美地动画,但当它缩小时根本无法动画。我在文档中没有看到任何表明会有差异的内容。感谢您提供任何帮助。
【问题讨论】:
标签: ios uiview core-animation subview autoresizingmask