gpt4 book ai didi

ios - 设置 UIButton 背景图像停止动画

转载 作者:行者123 更新时间:2023-12-01 19:15:40 24 4
gpt4 key购买 nike

我尝试在动画完成中设置背景图像,基本上它可以防止动画发生。
这是动画的代码:

    [UIView animateWithDuration: 0.5f animations: ^
{
//[buttonPanel setBackgroundImage: [UIImage imageNamed: imageName] forState: UIControlStateNormal];
CGFloat yOrigin = buttonFrame.origin.y - (self.bounds.size.height - buttonFrame.size.height);
yOrigin -= buttonFrame.size.height;
buttonPanel.frame = CGRectMake(buttonFrame.origin.x, yOrigin, buttonFrame.size.width, buttonFrame.size.height);
}
completion: ^(BOOL finished)
{
[UIView animateWithDuration: 0.5f animations:^
{
[buttonPanel setBackgroundImage: [UIImage imageNamed: imageName] forState: UIControlStateNormal];
[self setAlpha: 1.0f];
}];
}];

如果我删除 setBackgroundImage: 消息,它只会正确地动画到新的帧位置。为什么?

谢谢你。

最佳答案

好的,新的答案!你的评论给了我需要的线索。你说:

Makes the button to return to initial frame for a reason. basically any operation, like calling a modal UIViewController from this UIViewController sets the button to initial Fram position



对。因为显示模态 Controller 然后关闭它会导致您的 View 出现,并导致布局发生。您必须使用自动布局!自动布局会导致这种情况发生。所以这里的问题是您不了解在使用自动布局时如何更改 View 的位置/大小(在动画或任何其他时间)。

规则很简单。 为束缚而活的人,因束缚而死。 如果您使用自动布局,则不得更改任何内容的框架。您必须通过更改约束来进行所有位置/大小调整。

奇妙的是,这通常比改变框架更容易和简单!您不必获取框架、更改框架并分配框架;相反,您通常可以只更改约束的 constant直接地。

在此示例中,我为 UITextView 的收缩设置动画,以便当键盘从屏幕底部(iPhone)升起时,整个 UITextView 将可见:
[UIView animateWithDuration:duration.floatValue
animations:
^{
self.bottomConstraint.constant = -r.size.height;
[self.view layoutIfNeeded];
} completion:nil];

这就是如何为约束设置动画:当您更改 constant ,您还必须调用 layoutIfNeeded在动画的每个瞬间获得新的布局。

所以,我并不是说你不使用自动布局是错误的。它是“选择加入”;您可以在需要时开始使用,可以在某些 Nib 中使用它,而不是在其他 Nib 中使用,等等。但它比旧的布局方式强大得多,并且在许多方面它会导致更简单的代码 - 一旦你知道如何使用它。

关于ios - 设置 UIButton 背景图像停止动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com