【发布时间】:2012-07-03 13:54:47
【问题描述】:
我有一系列 UIButtons 用于更新几个 UILabel 并启动对象从屏幕外到屏幕上的动画。进展是这样的。按钮 1 和 2 是可见的,当用户按下按钮时,UILabel 会更新,新的 UIImageView 会在屏幕上显示动画。这在第一次迭代中运行良好,在第二轮中,隐藏的按钮 3 和 4 变得可见。一旦用户选择按钮 3 或 4,另一个 UIImageView 应该在屏幕上动画(在其他图像的顶部......“堆叠”它们)。正在发生的事情是 UIImageView 在用户按下按钮 1 或 2 后动画,消失,并且没有动画。仅当 UILabel 必须根据按钮选择进行更新时才会发生这种情况。在 UILabel 中不需要更新,动画效果很好。
相关代码:
-(IBAction)didTapSizeButton:(id) sender {
if ([sender tag] == 1) {
sizeLabel.text = @"12 oz";
}
else if ([sender tag] == 2) {
sizeLabel.text = @"24 oz";
}
if (coasterTwo.center.x != 150) {
[UIView animateWithDuration:0.35
delay:0
options:(UIViewAnimationOptionCurveEaseOut)
animations:^{
coasterTwo.center = CGPointMake(150, 220);
} completion:^(BOOL finished) {
}];
}
containerOne.hidden = NO;
containerTwo.hidden = NO;
}
-(IBAction)didTapContainerButton:(id)sender {
if ([sender tag] == 3) {
containerLabel.text = @"Bottle";
}
else if ([sender tag] == 4) {
containerLabel.text = @"Can";
}
if (coasterTwo.center.x == 150 && coasterThree.center.x != 150) {
[UIView animateWithDuration:0.35
delay:0
options:(UIViewAnimationOptionCurveEaseOut)
animations:^{
CGPoint center = coasterThree.center;
center.x += 305;
coasterThree.center = center;
}
completion:^(BOOL finished){
}];
}
}
当我返回更新 UILabel 时,UIImageViews 显然会重置到它们的起始位置......我只是不知道如何防止这种情况发生。
【问题讨论】:
-
很奇怪。您没有使用子类 UIView 或类似的东西,是吗?为什么说“UIImageViews 明显重置到它们的起始位置”?上面的代码中没有任何内容可以表明这一点。通常它们不会被重置为起始位置,除非您在某处有重置位置(框架、原点或中心)的代码,例如您自己的
drawRect。如果您有任何代码可以做到这一点(viewDidLoad除外),请分享。 -
确实很奇怪...... .m 文件中除了处理按钮自定义和设置按钮上的 .hidden 和 .tag 属性之外没有其他代码。除了
viewDidLoad和shouldAutorotateToInterfaceOrientation之外,整个.m 都会显示。重置 UIImageView 位置可能不是合适的词,但它最能代表按下按钮 3 或 4 时更新 UIlabel 时发生的操作。 -
我认为问题不在这里。
-
我在想 IB 中的某些东西搞砸了,但我已经两次和三次检查以确保一切都正确连接。 AppDelegate 中除了模板代码之外没有任何内容,从字面上看,这个和视图确实加载是视图控制器中唯一的东西。
-
我重写了方法并尝试了许多选项,当我从第二组按钮更新 UILabel 时,这种行为明显发生。没有 UILabel 更新?没问题,动画按预期发生。一旦我更新一个标签,所有在屏幕上动画的 UIImageViews 都会消失。
标签: ios xcode uiimageview uibutton uilabel