gpt4 book ai didi

ios - Completion^ block 未在 UIView 动画中调用

转载 作者:行者123 更新时间:2023-11-29 03:05:33 25 4
gpt4 key购买 nike

我在这里缺少什么吗?我希望 ImageView 滑入然后从屏幕底部滑出。

此外,这似乎将 UIImageView 放在导航栏后面,我如何制作 CGRect 以适合导航栏下方的屏幕?

_finga = [[UIImageView alloc] initWithFrame:CGRectMake(0, 88, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-88)];
hiddenFrame = CGRectOffset(_finga.frame, 0, _finga.frame.size.height);
_finga.frame = hiddenFrame;
[self.view addSubview:_finga];
_finga.image = [UIImage imageNamed:@"Finga"];
[UIView animateWithDuration:2.0 animations:^{
_finga.frame = self.view.bounds;
}completion:^(BOOL done) {
if (done) {
NSLog(@"Complete!");
[UIView animateWithDuration:2.0 animations:^{
_finga.frame = hiddenFrame;
}];
}
}];

最佳答案

你初始化 _finga 的 CGRect 会把它放在导航栏下面。在动画中,您将框架设置为 View 的边界,这将把它放在栏后面,因为 y 值为 0。

您可以通过从一开始就使用此框架初始化 _finga 来编写更少的代码:

CGRectMake(0,
self.view.bounds.size.height,
self.view.bounds.size.width,
self.view.bounds.size.height-88);

这将使 View 离开屏幕。然后在将其添加为 subview 并设置其图像后,将 View 动画化回此帧:

CGRectMake(0,
88,
self.view.bounds.size.width,
self.view.bounds.size.height-88);

这会将 View 放在导航栏的正下方。还可以考虑用变量或 #define 替换所有硬编码的 88,这样您就可以更轻松地使用它,以防导航栏高度发生变化。

至于完成 block ,在检查 done 是否为 YES 之前尝试记录 @"Complete!" 字符串,或者放置一个在那里断点,看看 done 的值是多少。您的动画可能由于某种原因未完成,这可以解释为什么未运行完成 block 中的代码。

不过,一般来说,如果您只是使用完成 block 在第一个动画之后运行另一个动画,则根本不需要检查 done BOOL。只有当程序中的其他内容取决于动画状态时,它才至关重要。例如,用户可以点击一个动画按钮,然后将用户带到应用程序的不同部分。但是如果用户取消了动画,你可能根本不想去其他部分,所以你可以检查done

关于ios - Completion^ block 未在 UIView 动画中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22822076/

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