将 UILabel 添加到 UIView 时,它的动画效果不正确
Posted
技术标签:
【中文标题】将 UILabel 添加到 UIView 时,它的动画效果不正确【英文标题】:UIView not animating correctly when UILabel is added to it 【发布时间】:2014-05-10 15:33:59 【问题描述】:我正在使用视图顶部边缘的约束为自定义视图设置动画。
观点是:
@implementation MyView
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
[self setBackgroundColor:[UIColor yellowColor]];
_label = [UILabel new];
[_label setTranslatesAutoresizingMaskIntoConstraints:NO];
_label.text = @"text";
[self addSubview:_label];
[self updateConstraints];
return self;
- (void)updateConstraints
NSDictionary *views = NSDictionaryOfVariableBindings(_label);
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_label]"
options:NSLayoutFormatAlignAllLeft
metrics:nil
views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_label]"
options:NSLayoutFormatAlignAllCenterY
metrics:nil
views:views]];
[super updateConstraints];
@end
在其父视图上动画 myView 的约束是:
_myViewTopConstraint = [NSLayoutConstraint constraintWithItem:_myView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-kMyViewVisibleHeight];
[self.view addConstraint:_myViewTopConstraint];
上边缘约束上的动画是:
[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^
self.myViewTopConstraint.constant = kScreenHeight;
[self.myView layoutIfNeeded];
completion:nil];
当 MyView 中的标签和约束被注释掉时,动画效果完美。但是当标签和约束存在时,动画会显着加快,可能会加快 5 倍或更多。
为什么会这样?有人知道怎么解决吗?
【问题讨论】:
【参考方案1】:想通了。 layoutIfNeeded 必须在动画块中 myView 的父视图上调用。
[self.myView layoutIfNeeded];
改为
[self.view layoutIfNeeded];
【讨论】:
以上是关于将 UILabel 添加到 UIView 时,它的动画效果不正确的主要内容,如果未能解决你的问题,请参考以下文章
将 UILabel 的层添加到另一个层(单独的 UIView)
如何以编程方式将 UILabel 和 UiImageView 添加到表视图单元格内的 UIView?