移动UIView在viewDidAppear方法中没有响应

时间:2013-11-11 21:09:51

标签: uiview delay

我有一个UIView,我试图在父视图控制器进入屏幕时向上移动。我一直在阅读这篇文章,大多数我认为似乎可以说使用viewDidAppear方法对布局进行任何视觉调整。我试过这个,似乎没有用。没有任何事情发生,并且我把原始内容发送到了我。我得到了-47,000,然后我可能会假设某些东西尚未初始化。这是我尝试过的。

  - (void) viewDidAppear:(BOOL)animated
    {
        // set the save view y postion
       saveData.center = CGPointMake( 0.0f, 0.5f );
        NSLog(@"This is the y %f", saveData.frame.origin.y);
        NSLog(@"This is the center points on load %@", NSStringFromCGPoint(optionalData.center));
    }

但如果我这样做,我会在viewDidLoad方法中添加延迟方法调用:

[self performSelector:@selector(moveSaveView) withObject:nil afterDelay:0.7f];

并且有这个,它有效

- (void) moveSaveView
{
    // set the save buttons y postion


    [UIView animateWithDuration:0.5 delay:0.0 options:0 animations:^{
        // Animate the alpha value of your imageView from 1.0 to 0.0 here
        optionalData.alpha = 0.0f;
    } completion:^(BOOL finished) {
        // Once the animation is completed and the alpha has gone to 0.0, hide the view for good
        optionalData.hidden = YES;
    }];

    // move the save button up
    [UIView animateWithDuration:0.5
                     animations:^{saveData.center = CGPointMake( 160.0f, 280.5f );}];


    saveData.center = CGPointMake( 160.0f, 280.5f );
}

由于我使用的是自动布局,这也是一个问题吗?我希望我的观点从我需要的地方开始,而不是使用一些延迟调用来实现这一点。

修改 所以我给了它一个镜头并想出了这个试图移动我的UIView:

- (void) viewDidAppear:(BOOL)animated
    {   
        NSLog(@"this is the constraing %f",     saveData.saveButtomConstraint.constant);  // gives me 93 which is here its at.
        saveData.saveButtomConstraint.constant = 32;
        [saveData setNeedsUpdateConstraints];
        [saveData layoutIfNeeded];
        NSLog(@"this is the constraing %f", saveData.saveButtomConstraint.constant); // gives me 32 which is here its at.   
    }

问题是视图永远不会在屏幕上移动。我错过了什么?当它与相同的问题相关时,也可以这样发布和编辑吗?我仍然试图掌握这种形式。

1 个答案:

答案 0 :(得分:1)

是的,您的问题是由于您使用的是自动布局。帧动画与自动布局不兼容,因此您需要为视图上的约束设置动画。查看this answer了解详细信息this might also help too。祝好运!

修改

所以看起来您已经为名为saveData的{​​{1}} UIView添加了一个属性。这很好,因为它可以让您访问该约束。但是,您确定该约束实际上是saveButtomConstraint数组的成员吗?通常,Interface Builder中的约束将添加到父UIView中。我认为问题很可能是在错误的视图上调用[saveData constraints],你需要在saveData的父视图上调用它,或者可能在视图控制器的根视图layoutIfNeeded上调用它。