当前位置: 首页 > 知识库问答 >
问题:

显示VC时保持动画视图的最后位置

刘狐若
2023-03-14

我正在动画一个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);
    }];
}

任何想法如何解决这个问题?我认为它与视图有关Dissapering...

共有1个答案

柯浩壤
2023-03-14

首先,您不应该在viewddLoad中对视图进行动画处理。您应该在viewWillPresarviewddPresar中启动动画。

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

-(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是在某处设置的约束示例。

 类似资料:
  • 这篇文章与我之前的问题有关。在Tkinter中使用Arduino数据动态更新Label和Live Graph我的图形嵌入在Tkinter中。我使用的是相同的代码,但我意识到,虽然我的实时图形是根据来自Arduino的串行数据动态更新的,但旧的数据点只是不断添加。我想看到最后50个数据点被嵌入到实时图形中,并删除旧的数据点。我不知道如何操纵代码来实现我想要实现的目标。如有任何建议,将不胜感激 代码如

  • 问题内容: 我试图让CSS动画属性在完成后保留,这可能吗? 这就是我想要实现的目标… 当用户登陆页面时,该元素应该被隐藏,在3秒钟(或任何其他时间)之后,该元素应淡入,动画完成后应留在该页面上。 这是一个小提琴尝试… 这是保存代码… 我知道如何使用jQuery ..就像这样… 问题答案: 我认为您正在寻找CSS3属性 animation-fill-mode CSS属性指定CSS动画在执行之前和之后

  • 对不起,我的英语…我会试着解释我想做什么。我有一个项目。它可以在链接上下载: < Li > https://drive . Google . com/file/d/0 bxhio ufkk 3 upcxjngtmvkg 4 tdq/view?usp =共享 正如你看到的截图: http://pixs.ru/showimage/Screenshot_9509352_15647059.png “隐藏/

  • 我试图使用文本视图来显示从列表视图中选择的联系人。列表视图包含用户从加载到列表视图中的Android电话簿中选择的联系人。文本视图将只显示列表视图中的最后一项,即使用户选择了另一个不是列表视图中最后一个联系人的联系人。 即使在我的日志打印中,我可以看到我选择了哪个联系人,但当我试图将其打印到另一个窗口中的文本视图时,它仍然默认为最后一个联系人。 添加调制解调器。JAVA 主要活动。JAVA

  • 仍然像这样显示和隐藏视图: 但如果我必须使用向上滑动和向下滑动动画来显示和隐藏,该怎么办

  • 问题内容: 我正在CSS 中设置的某些元素上运行动画。动画类应用于onClick,并使用关键帧将不透明度从更改为(除其他外)。 不幸的是,动画结束后,元素会返回到(在Firefox和Chrome中)。我自然会想到,动画元素会保持最终状态,而不是覆盖其原始属性。这不是真的吗 如果没有,我如何才能做到这一点? 代码(不包括前缀版本): 问题答案: 尝试添加。例如这样: