Анимация подарка и увольнение общего расширения с пользовательским интерфейсом на iOS 8

Я разрабатываю расширение Share для iOS 8 с пользовательским интерфейсом, но оно отображается без анимации, как я могу это сделать? Это обычный UIViewController.

Кроме того, он отображается в полноэкранном режиме на iPad, и я хочу, чтобы он был контроллером модального вида, который отображается в центре экрана и не помещается в него, как я могу это сделать?

С уважением.

2 ответа

Решение

Вот самое чистое решение, которое я нашел до сих пор, чтобы оживить мой пользовательский контроллер представления!

Анимировать IN:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.view.transform = CGAffineTransformMakeTranslation(0, self.view.frame.size.height);
    [UIView animateWithDuration:0.25 animations:^
    {
        self.view.transform = CGAffineTransformIdentity;
    }];
}

Отклонить:

- (void)dismiss
{
    [UIView animateWithDuration:0.20 animations:^
    {
        self.view.transform = CGAffineTransformMakeTranslation(0, self.view.frame.size.height);
    } 
    completion:^(BOOL finished) 
    {
        [self.extensionContext completeRequestReturningItems:nil completionHandler:nil];
    }];
}

Вместо анимации UIViewController"s viewПредлагаю немного другой подход.

Я создал манекен UIViewController (называется PresentingViewController здесь) чей view.backgroundColor установлен в [UIColor clearColor], Затем я представляю предполагаемый обычай UIViewController модально (или пользовательская анимация, если хотите) сверху.

Это код для PresentingViewController:

@implementation PresentingViewController

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [self performSegueWithIdentifier:@"PresentController" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if ([segue.identifier isEqualToString:@"PresentController"]) {
    CustomViewController *controller = (CustomViewController *)[segue.destinationViewController topViewController];
    controller.context = self.extensionContext;
  }
}

- (IBAction)unwindFromShareVC:(UIStoryboardSegue *)segue {
  [self dismissViewControllerAnimated:YES completion:^{
    NSError *error = [NSError errorWithDomain:@"Cancelled" code:0 userInfo:nil];
    [self.extensionContext cancelRequestWithError:error];
  }];
}

@end

Заметки:

  1. extensionContext устанавливается только на PresentingViewController и, следовательно, он должен быть передан CustomViewController,
  2. Для оживления увольнения я не смог использовать раскрутку, потому что было трудно узнать о завершении увольнения. Поэтому я использовал dismissViewControllerAnimated: завершение: вместо.
Другие вопросы по тегам