gpt4 book ai didi

iphone - 更改 UILabel 文本会弄乱动画吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:09 25 4
gpt4 key购买 nike

我的应用程序必须根据用户做出的选择进行计算和动画处理,我需要在动画中使用 UILabel 之前更新它,问题是每当我设置 UILabel 文本它弄乱了动画,我不知道为什么。我试过 [self.view.layer removeAllAnimations];在更改 UILabel 文本之前仍然没有用。我什至尝试以编程方式调用 IBAction 并更改该 block 中的 UILabel 文本,但它仍然弄乱了动画。似乎没有任何效果,这肯定与时间有关,因为更改 viewDidLoad 中的 UILabel 文本确实可以正常工作。我还通过在动画之前更改另一个 UILabel 的文本来检查它是否是 Storyboard 问题,并且出现了同样的问题。如果它有帮助,这里是动画代码:

    -(IBAction) swipeDown:(UISwipeGestureRecognizer *)recognizer{
multiply.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
subtract.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
add.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
divide.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
circle.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
signcircle.frame = CGRectMake(145.0f, 70.0f, signcircle.frame.size.width,signcircle.frame.size.height);
sign.frame = CGRectMake(152.0f, 68.0f, sign.frame.size.width,sign.frame.size.height);
type=@"multiply";
if(fivebutton.highlighted){
circle.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
multiply.transform = CGAffineTransformMakeScale(1.35f, 1.35f);
multiply.frame = CGRectMake(120.0f, 248.0f, multiply.frame.size.width, multiply.frame.size.height);
[UIView animateWithDuration:.25f animations:^{
add.frame = CGRectMake(130.0f, 202.0f, add.frame.size.width, add.frame.size.height);
add.alpha=1.0;
subtract.frame = CGRectMake(82.0f, 255.0f, subtract.frame.size.width, subtract.frame.size.height);
subtract.alpha=1.0;
divide.frame = CGRectMake(178.0f, 255.0f, divide.frame.size.width, divide.frame.size.height);
divide.alpha=1.0;
multiply.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
multiply.frame = CGRectMake(130.0f, 305.0f, multiply.frame.size.width, divide.frame.size.height);
multiply.alpha=1.0;
circle.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
circle.alpha=1.0;
UIImage *downimage = [UIImage imageNamed: @"multiplydown.png"];
[multiply setImage:downimage];
onebutton.alpha=0.1;
one.alpha=0.1;
twobutton.alpha=0.1;
two.alpha=0.1;
threebutton.alpha=0.1;
three.alpha=0.1;
fourbutton.alpha=0.1;
four.alpha=0.1;
sixbutton.alpha=0.1;
six.alpha=0.1;
fivebutton.alpha=0.0;
sevenbutton.alpha=0.1;
seven.alpha=0.1;
eightbutton.alpha=0.1;
eight.alpha=0.1;
ninebutton.alpha=0.1;
nine.alpha=0.1;
zerobutton.alpha=0.1;
zero.alpha=0.1;
decimalbutton.alpha=0.1;
decimal.alpha=0.1;
equalsbutton.alpha=0.1;
equals.alpha=0.1;
}];
[UIView commitAnimations];
}

在这种情况下,UILabel 文本更改导致“add”、“subtract”、“divide”和“multiply”(UIImageView)合并在一起,而不是像动画一样传播。

    -(void) fiveTapEnded{
var2.hidden=NO;
if ([type isEqual:@"add"]) {
NSLog(@"Is add");
}
if ([type isEqual:@"subtract"]) {
NSLog(@"Is subtract");
}
if ([type isEqual:@"multiply"]) {
var1.textAlignment = NSTextAlignmentRight;
var1.frame = CGRectMake(40.0f, 70.0f, var1.frame.size.width,var1.frame.size.height);
var2.frame = CGRectMake(145.0f, 70.0f, var2.frame.size.width,var2.frame.size.height);
[UIView animateWithDuration:.25f animations:^{
add.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
add.alpha=0.0;
multiply.transform = CGAffineTransformMakeScale(1.5f, 1.5f);
multiply.alpha=0.0;
divide.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
divide.alpha=0.0;
circle.transform = CGAffineTransformMakeScale(0.5f, 0.5f);
circle.alpha=0.0;
subtract.alpha=0.0;
var1.frame = CGRectMake(0.0f, 20.0f, var1.frame.size.width,var1.frame.size.height);
var2.frame = CGRectMake(185.0f, 20.0f, var2.frame.size.width,var2.frame.size.height);
signcircle.frame = CGRectMake(145.0f, 30.0f, signcircle.frame.size.width,signcircle.frame.size.height);
sign.frame = CGRectMake(152.0f, 26.5f, sign.frame.size.width,sign.frame.size.height);
result.frame = CGRectMake(8.0f, 100.0f, result.frame.size.width,result.frame.size.height);
signcircle.alpha=1.0;
sign.alpha=1.0;
var2.alpha=1.0;
result.alpha=1.0;
one.alpha=1.0;
onebutton.alpha=1.0;
twobutton.alpha=1.0;
two.alpha=1.0;
three.alpha=1.0;
threebutton.alpha=1.0;
fourbutton.alpha=1.0;
four.alpha=1.0;
sixbutton.alpha=1.0;
six.alpha=1.0;
five.alpha=1.0;
fivebutton.alpha=1.0;;
sevenbutton.alpha=1.0;
seven.alpha=1.0;
eightbutton.alpha=1.0;
eight.alpha=1.0;
ninebutton.alpha=1.0;
nine.alpha=1.0;
zerobutton.alpha=1.0;
zero.alpha=1.0;
decimalbutton.alpha=1.0;
decimal.alpha=1.0;
equalsbutton.alpha=1.0;
equals.alpha=1.0;
}];
[self.view.layer removeAllAnimations];
[self functionToBeCalled:self];
}
if ([type isEqual:@"divide"]) {
NSLog(@"Is divide");
}
}

在这种情况下,它会导致“var1”和“var2”(UILabel 的)不向上移动。

我理解这令人困惑,我一直在到处搜索,但找不到类似的问题,所以这是我最后的选择,如果有人有任何解决方案或提示,我将不胜感激。

最佳答案

如果“弄乱动画”是指它要回到其起始位置,那么您可能启用了自动布局。当您更改 UILabel 时,会自动重新应用自动布局约束,因此任何需要更改框架的动画都将受到阻碍。最重要的是,当使用带有规定布局约束的自动布局时,您不应手动更改 framecenter 值。

这显然还有两种可能的补救措施:

  1. 最简单,您可以关闭自动布局。然后标签的设置将不会触发要应用的任何约束。参见 NSTimer blocks other animations对于非常相似的问题。

  2. 如果您想保持自动布局打开,那么您不应该通过更改控件的 frame(或 center)属性来设置动画,但是相反,您应该为适当的约束创建 IBOutlet 引用,然后通过更改 constant 属性为它们设置动画。参见 Animating an image view to slide upwards

关于iphone - 更改 UILabel 文本会弄乱动画吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493148/

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