调用方法时,UIView无法正确显示

时间:2012-03-22 16:52:35

标签: iphone objective-c ios cocoa-touch uiview

我无法弄清楚为什么在调用该方法时这个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];

 }

3 个答案:

答案 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];