这里有什么我想念的吗? 我希望图像视图滑入,然后从屏幕底部滑出。
另外,这似乎将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;
}];
}
}];
答案 0 :(得分:1)
您初始化_finga
的CGRect会将其放在导航栏下。在动画中,您将帧设置为视图的边界,这将把它放在条形后面,因为y值将为0.
您可以通过从开头使用此框架初始化_finga
来编写更少的代码:
CGRectMake(0,
self.view.bounds.size.height,
self.view.bounds.size.width,
self.view.bounds.size.height-88);
这会将视图从屏幕上移开。然后,在将其添加为子视图并设置其图像后,将视图设置为该框架的动画:
CGRectMake(0,
88,
self.view.bounds.size.width,
self.view.bounds.size.height-88);
将视图放在导航栏下方。考虑使用变量或#define
替换所有硬编码的88,以便您可以更轻松地使用它,以防导航条高度发生变化。
对于完成块,请在检查@"Complete!"
是否为done
之前尝试记录YES
字符串,或在其中放置断点并查看done
的值是。由于某种原因,您的动画可能无法完成,这可以解释为什么完成块中的代码没有运行。
但一般情况下,如果您只是使用完成块在第一个动画之后运行另一个动画,则根本不需要检查完成BOOL
。当程序中的其他内容取决于动画的状态时,它才是至关重要的。例如,用户可以点击动画某事物的按钮,然后将用户带到应用程序的不同部分。但是,如果用户取消动画,您可能根本不想转到其他部分,因此您可以检查done
。