UIView角半径动画

时间:2014-05-28 11:23:55

标签: ios xcode animation autolayout cornerradius

我有一些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一样

2 个答案:

答案 0 :(得分:2)

认为您需要在[self setNeedsUpdateConstraints]之前致电layoutIfNeeded。我不确定self.frame.size.width/2会在layoutIfNeeded中为您提供正确的值,但是值得尝试使用硬编码值,例如20,看看是否可能是原因。

我们没有看到任何人在layoutIfNeeded中使用动画代码也值得尝试将动画更改移动到动画块中。

答案 1 :(得分:1)

更改按钮的宽度/高度 然后打电话。 [self setNeedsDisplay];