我有一系列UIButtons用于更新几个UILabel,并从屏幕外到屏幕启动对象的动画。进展是这样的。按钮1& 2是可见的,当用户按下按钮时,UILabel更新并且新的UIImageView动画到屏幕上。这在第一次迭代时工作正常,在第二轮,隐藏的按钮3和4变得可见。一旦用户选择了按钮3或4,另一个UIImageView应该在屏幕上显示动画(在其他图像的顶部......“堆叠”它们)。正在发生的是UIImageView,它在用户按下按钮1或2后动画显示,消失,没有任何动画。只有在UILabels必须根据按钮选择进行更新时才会出现这种情况。在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显然会重置到他们的起始位置......我只是不确定如何防止它。
答案 0 :(得分:0)
我建议使用静态UIView commitAnimations方法,因为您不需要完成块:
[UIView beginAnimations:nil context:nil];
//Code for changing frames / alpha / anything else that is animatable
[UIView commitAnimations];
试一试,看看是否有帮助。
答案 1 :(得分:0)
必须有一些简单的东西。正如我所说,didTapContainerButton
的代码似乎是可疑的(每当你点击coasterThree
时,另一个 305点向右移动),但上面没有任何显示会导致coasterTwo
消失。唯一能做到这一点的是,如果(a)某些IB链接搞砸了(虽然不清楚当你按下按钮3或4时这会导致图像消失); (b)你没有展示的代码可能隐藏它;或者(c)你的窗户上有一些隐藏它的其他控件(我肯定会看到更新标签的情况导致它被带到前面,掩盖它背后的东西......你可以通过使标签具有透明背景,明确地将图像移动到前景,或尝试将alpha设置为0.5,以便在调试时可以看到内容。
要诊断第一种可能性,你必须将你的项目上传到DropBox或其他东西我们可以看看它(如果你这样做很舒服......如果没有,请复制你的项目,摆脱任何机密/专有的东西,然后上传那个)。
要诊断第二种可能性,您可以使用视图控制器的.m文件的完整代码更新您的问题。
要诊断第三种可能性,您可以确保在动画之前将图像移动到前面(在为coaster 3设置动画之前,执行[self.view bringSubviewToFront:coasterThree];
)。您还可以确保所有控件的backgroundColor
(如果您在IB中添加了任何容器UIViews,它们也是透明的)[UIColor clearColor]
。你也可以,仅为了诊断目的,暂时减少alpha,这样你就可以看到它们(因此如果有什么东西阻挡了其他东西(你可以在IB中这样做,点击主UIView背景,按命令 + A 选择所有控件,并将alpha更改为0.5。
最重要的是,我会选择选项3,如果您没有运气,请分享您的项目或分享全面的代码示例。如果你觉得这样做不舒服,我可能会建议你扔掉旧的NIB并从头开始重建(如果你得到的东西有些奇怪),或者开始构建一个全新的测试项目重新实现你的UI,看看你是否能找出它出错的地方。
但是UIImageViews动画和设置UILabel文本值没有任何不一致。在下面我有两个按钮的代码,两个动画打开和关闭的图像,以及一个更新的标签,一切正常。 (我有一种信心危机:我开始害怕与UILabels和动画有一些奇怪的互动。)叹气。
- (void)viewDidLoad
{
[super viewDidLoad];
CGPoint center;
self.label.text = @"";
// move image 1 (dog image) off screen to the left
center = self.image1.center;
center.x = -0.5 * self.view.frame.size.width;
self.image1.center = center;
self.image1.hidden = YES;
// move image 2 (cat image) off screen to the right
center = self.image2.center;
center.x = 1.5 * self.view.frame.size.width;
self.image2.center = center;
self.image2.hidden = YES;
// Do any additional setup after loading the view.
}
// if you hit button 1 (dog) button, change label, and animate the dog image on and cat image off
- (IBAction)button1:(id)sender
{
self.label.text = @"Dog";
self.image1.hidden = NO;
[UIView animateWithDuration:0.5
animations:^{
CGPoint center;
// move image 1 (dog image) onscreen
center = self.image1.center;
center.x = 0.5 * self.view.frame.size.width;
self.image1.center = center;
// move image 2 (cat image) off screen to the right (if it's not there already)
center = self.image2.center;
center.x = 1.5 * self.view.frame.size.width;
self.image2.center = center;
}];
}
// if you hit button 2 (cat) button, change label, and animate the dog image off and cat image on
- (IBAction)button2:(id)sender
{
self.label.text = @"Cat";
self.image2.hidden = NO;
[UIView animateWithDuration:0.5
animations:^{
CGPoint center;
// move image 1 (dog image) off screen to the left
center = self.image1.center;
center.x = -0.5 * self.view.frame.size.width;
self.image1.center = center;
// move image 2 (cat image) on screen
center = self.image2.center;
center.x = 0.5 * self.view.frame.size.width;
self.image2.center = center;
}];
}
答案 2 :(得分:0)
同样的事情发生在我的一个学生身上。为了证明你不会疯狂...尝试在iOS 5.x模拟器中运行它(并希望观察所需的行为)。
对于iOS 6,你要么必须为你的UIView编写一些状态保存 - 或者 - 如果你还没有成长为爱他们并认为你不能没有他们的生活 - 摆脱通过取消选中文件检查器中的“使用Autolayout”来修复xib文件中的约束。
希望这有帮助!