Добавить UIView в KeyWindow, Как анимировать UIView с экрана, когда вызывается pushViewController?

Я добавил UIView к моему [UIApplication sharedApplication].keyWindow и это работает правильно.

Когда кнопка на UIView нажал, я хочу нажать новый UIViewController на подстилающий NavigationController

Это все работает, но как я могу сделать UIView анимация с экрана, влево, с нижележащим UIViewController?

1 ответ

Решение

Вы можете анимировать свой пользовательский вид и одновременно передать элемент управления в контроллер почтового представления, чтобы поместить следующий контроллер вида в стек контроллера навигации... Ниже приведен пример кода, который я смоделировал. Анимация вашего пользовательского представления должна синхронизироваться с анимацией контроллеров представления.

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    _v = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setFrame:CGRectMake(0, 0, 50, 30)];
    [btn setTitle:@"Button" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
    [_v addSubview:btn];
    _v.backgroundColor = [UIColor redColor];
    [[[UIApplication sharedApplication] keyWindow] addSubview:_v];

}

- (void)btnClicked:(id)sender {

    NSLog(@"Btn Clicked");

    [UIView animateWithDuration:0.2
                          delay:0.1
                        options: UIViewAnimationOptionCurveEaseOut
                     animations:^
     {
         _v.frame = CGRectMake(-_v.frame.size.width, 

_v.frame.origin.y, _v.frame.size.width, _v.frame.size.height);
         }
                         completion:^(BOOL finished)
         {
         }];
    UIViewController *c = [self.storyboard instantiateViewControllerWithIdentifier:@"TestVC"];
    [self.navigationController pushViewController:c animated:YES];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
Другие вопросы по тегам