我有一些UIButton课程:
@implementation UIRoundButton
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self.layer setCornerRadius:self.frame.size.width/2];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self.layer setCornerRadius:self.frame.size.width/2];
}
return self;
}
- (void) layoutIfNeeded
{
[super layoutIfNeeded];
[self.layer setCornerRadius:self.frame.size.width/2];
}
因此,它会创建圆角按钮并更改自动布局的角半径。
但我的问题是我想做这样的动画:
[UIView animateWithDuration:0.6 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.deleteButton.alpha = 1;
self.buttonHeight.constant = 40;
self.buttonWidth.constant = 40;
[self layoutIfNeeded];
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.6 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.deleteButton.alpha = 0;
self.buttonHeight.constant = 16;
self.buttonWidth.constant = 16;
[self layoutIfNeeded];
} completion:^(BOOL finished) {
}];
}];
所以我改变了这个按钮的宽度和高度。问题是拐角半径没有正确改变。为什么?它应该调用layoutIfNeeded方法并进行更改。
马尔科
编辑:
这意味着在动画之前按钮的宽度和高度为16.我的动画为40.但是角落通过所有动画8像素。然后在最后的动画中我再次从宽度值40动画到宽度值16,现在所有动画的角半径都是20像素。就像它会在动画结束时调用layoutIfNeeded onelly一样
答案 0 :(得分:2)
认为您需要在[self setNeedsUpdateConstraints]
之前致电layoutIfNeeded
。我不确定self.frame.size.width/2
会在layoutIfNeeded
中为您提供正确的值,但是值得尝试使用硬编码值,例如20,看看是否可能是原因。
我们没有看到任何人在layoutIfNeeded
中使用动画代码也值得尝试将动画更改移动到动画块中。
答案 1 :(得分:1)
更改按钮的宽度/高度 然后打电话。 [self setNeedsDisplay];