gpt4 book ai didi

ios - 在呈现 VC 时保持动画 View 的最后位置

转载 作者:行者123 更新时间:2023-12-01 19:01:20 24 4
gpt4 key购买 nike

我正在为 ImageView 设置动画以将其向上移动。一切正常,但是当我展示 ViewController 时,ImageView 会切换回原来的位置。

我已经尝试在动画完成时设置帧,但它仍然交换回原来的位置。

继承人我做什么:

-(void)viewDidLoad:(BOOL)animated{
[super viewDidLoad:animated];
[self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f];
}

-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
}

//Animate welcome screen
-(void)animationCode{
CGRect imageFrame = self.imageViewLogo.frame;
[UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.imageViewLogo.center = CGPointMake(self.imageViewLogo.center.x, self.imageViewLogo.center.y-150);
}completion:^(BOOL finished){
self.imageViewLogo.frame = CGRectMake(imageFrame.origin.x, imageFrame.origin.y-150, imageFrame.size.width, imageFrame.size.height);
}];
}

知道如何解决这个问题吗?我认为这与 View 分散有关..

最佳答案

首先,您不应该为 viewDidLoad 中的 View 设置动画。 .你应该在 viewWillAppear 开始动画。或 viewDidAppear .

评论中说的是正确的,启用自动布局后,您不应该直接修改框架。任何约束更新或布局传递都会将帧重置为其原始值。您应该做的是修改现有的约束本身。如果您在代码中添加这些约束,也许将动画所需的约束保存为属性并在动画设置方法中修改它们。如果您在 Interface Builder 中设置 View ,您可以在代码中创建约束导出并以这种方式访问​​它们。记得调用[self.view layoutIfNeeded]在您的动画 block 内实际触发约束更新和布局传递。

-(void)animationCode{
CGRect imageFrame = self.imageViewLogo.frame;
[UIView animateWithDuration:1.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.imageViewLogoYConstraint.constant -= 150;
[self.view layoutIfNeeded];
} completion:nil];
}

在哪里, imageViewLogoYConstraint是在某处设置的约束示例。

关于ios - 在呈现 VC 时保持动画 View 的最后位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22722507/

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