UIView не отображается правильно при вызове метода - PullRequest
0 голосов
/ 22 марта 2012

Я не могу понять, почему этот 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 ]

2 голосов
/ 25 марта 2012

Это сработало в вашем RootViewController, затем вы скопировали код showView: в новый контроллер представления, и он не работает. Ваш разговор с @ kl94 объясняет остальное. Меню view было объявлено, но не инициализировано в новом контроллере представления.

Я думаю, что если вы вернетесь к 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 голосов
/ 22 марта 2012

Хорошо ли вы связали свое меню, которое, я полагаю, с IB View?
Попробуйте сделать простой NSLog(@"%@", menuView); и скажите нам, что он отображает.

1 голос
/ 22 марта 2012

Когда вы добавляете 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...