我有一个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.
}
问题是视图永远不会在屏幕上移动。我错过了什么?当它与相同的问题相关时,也可以这样发布和编辑吗?我仍然试图掌握这种形式。
答案 0 :(得分:1)
是的,您的问题是由于您使用的是自动布局。帧动画与自动布局不兼容,因此您需要为视图上的约束设置动画。查看this answer了解详细信息this might also help too。祝好运!
修改强>:
所以看起来您已经为名为saveData
的{{1}} UIView
添加了一个属性。这很好,因为它可以让您访问该约束。但是,您确定该约束实际上是saveButtomConstraint
数组的成员吗?通常,Interface Builder中的约束将添加到父UIView中。我认为问题很可能是在错误的视图上调用[saveData constraints]
,你需要在saveData的父视图上调用它,或者可能在视图控制器的根视图layoutIfNeeded
上调用它。