我无法弄清楚为什么在调用该方法时这个UIView无法正确显示。它适用于另一个视图控制器。当我在RootViewController中尝试它时,NSLog输出工作正常,但没有视图动画。我想知道它是否显示但是隐藏在视野之外。任何帮助都会很棒。
- (IBAction)showView:(id)sender{
NSLog(@"showView button pressed");
[self.view addSubview: menuView];
[self.view bringSubviewToFront:menuView];
CGRect rect = menuView.frame;
rect.origin.x = 60;
rect.origin.y = -400;
menuView.frame = rect;
[UIView beginAnimations:@"ShowView" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5];
rect.origin.y = 65;
menuView.frame = rect;
[UIView commitAnimations];
}
答案 0 :(得分:2)
你把menuView(我认为是IB视图)连接好了吗?
尝试做一个简单的NSLog(@"%@", menuView);
并告诉我们它显示的内容。
答案 1 :(得分:2)
这在你的RootViewController中有效,然后你将showView:代码复制到一个新的视图控制器中,它不起作用。您与@ kl94的对话解释了其余部分。 menuView已声明但未在新视图控制器中初始化。
我想如果你回到它正在工作的RootViewController,你会发现menuView被初始化的代码:... menuView = [[SomeViewClass alloc] init .....该代码需要被复制到新的视图控制器也是。放置它的一个不错的地方是viewDidLoad方法。
我同意@Amiramix认为块动画是要走的路。我建议代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
// code copied from RootViewController that initializes menuView
// probably, the frame is set so that the menu is positioned off the visible part of the view
[self.view addSubview:menuView];
}
- (IBAction)showView:(id)sender{
NSLog(@"showView button pressed, menu view is %@", menuView);
[UIView animateWithDuration:0.5 animations:^{
menuView.frame = CGRectMake(/* the rect where you want the menu to end up */);
}];
}
答案 2 :(得分:1)
当您添加subview
时,它会自动放在所有其他视图的前面,因此无需拨打bringSubviewToFront
。此外,您需要在beginAnimiation
- commitAnimation
块内设置框架。最后,请考虑使用新的animateWithDuration
方法,即使只是为了调试您的问题,例如:
void (^block)(void) = ^{
[self->textView setFrame:CGRectMake(0, 0, self.bounds.size.width, keyboardView.origin.y)];
};
[UIView animateWithDuration:0.2 animations:block];