gpt4 book ai didi

ios - UIView animateWithDuration 忽略持续时间

转载 作者:行者123 更新时间:2023-11-29 11:51:18 26 4
gpt4 key购买 nike

我的目标很简单,我之前已经实现了这个目标,这就是为什么我在这里求助于我的问题。

我正在尝试为 subview 设置动画。很简单。动画结束后, View 正好位于我想要的位置。唯一的问题是:无论我做什么,动画持续时间都被完全忽略了。它立即发生。

- (void)callToDismissView:(UIView *)view {

[self.view addSubview:view];

[self dismissViewControllerAnimated:NO completion:nil];

[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^(void){

CGRect frame = self.view.frame;
frame.origin.x = frame.size.width;
view.frame = frame;

} completion:^(BOOL finished){

[view removeFromSuperview];
}];
}

现在我已经尝试了不同的帧和持续时间来查看 View 是否完全是动画的,它总是在我需要的地方结束。只是瞬间......

编辑:

上面的代码被解散的 View Controller 中的委托(delegate)调用,如下所示:

- (void)dismissSelf {

if (self.delegate && [self.delegate respondsToSelector:@selector(callToDismissScan)]) {

[self.delegate callToDismissScan];
}
}

并且该方法本身由通知触发。

我必须承认,在两个 Controller 之间的转换过程中发生了一些我不完全理解的事情。 (而且我非常想了解他们...)

最佳答案

你可以试试[self.view layoutIfNeeded];

像这样

- (void)callToDismissView:(UIView *)view {

[self.view addSubview:view];

[self dismissViewControllerAnimated:NO completion:nil];
[self.view layoutIfNeeded];
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^(void){

CGRect frame = self.view.frame;
frame.origin.x = frame.size.width;
view.frame = frame;
[self.view layoutIfNeeded];

} completion:^(BOOL finished){

[view removeFromSuperview];
}];
}

关于ios - UIView animateWithDuration 忽略持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41043828/

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