animateWithDuration 无法在 UIButton 设置图像后为 UIButton 的边界设置动画

animateWithDuration can't animating UIButton's bounds after UIButton has set an image

在我将图像设置为名为 bigIconUIButton 之后,我将其放入 animateWithDuration 并更改其框架,然后我 运行 代码,按钮大小立即改变(没有动画),但它从起点到终点缓慢移动(有动画),我该如何解决这个问题?我发现如果我确实为按钮设置了图像,这个问题就会消失。

代码如下:

- (void)bigImage:(MCGodCell *)godCell withImage:(UIImage *)image {
    self.bigIcon = [UIButton new];
    self.bigIcon.adjustsImageWhenHighlighted = NO;
    [self.bigIcon setBackgroundImage:image forState:UIControlStateNormal];

    CGFloat iconX = self.tableView.frame.size.width / 2.0;
    CGFloat iconY = self.tableView.frame.size.height / 2.0;
    self.bigIcon.frame = CGRectMake(iconX, iconY, 1, 1);
    [self.tableView addSubview:self.bigIcon];

    CGFloat iconW = self.tableView.frame.size.width;
    CGFloat iconH = iconW;
    iconY = (self.view.frame.size.height - iconH) / 2.0;
    [UIView animateWithDuration:0.3 animations:^{
        self.bigIcon.frame = CGRectMake(0, iconY, iconW, iconH);
    }];
}

您没有看到框架发生变化,因为您试图在将它添加到视图层次结构后立即对其进行动画处理。

UIKit 需要将按钮添加为子视图,然后 运行 在下一个 UI 更新过程中添加动画。

像这样将动画块包裹在 dispatch_async 块中:

dispatch_async(dispatch_get_main_queue(), ^{
    [UIView animateWithDuration:0.3 animations:^{
        self.bigIcon.frame = CGRectMake(0, iconY, iconW, iconH);
    }];
});