Анимация настоящего и увольнение с расширением Share с пользовательским интерфейсом на iOS 8
Я разрабатываю расширение для iOS 8 с пользовательским интерфейсом, но он выглядит без анимации, как я могу это сделать? Это обычный UIViewController.
Кроме того, он отображается в полноэкранном режиме на iPad, и я хочу, чтобы он был модульным контроллером представлений, который появляется в центре экрана и не подходит ему, как я могу это сделать?
С уважением.
Ответы
Ответ 1
Вот самое чистое решение, которое я нашел до сих пор, чтобы анимировать мой пользовательский контроллер представления и выйти!
Анимация 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];
}];
}
Ответ 2
Вместо анимации UIViewController
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
Примечания:
-
extensionContext
устанавливается только на PresentingViewController
, и поэтому требуется передать его в CustomViewController
.
- Для анимации увольнения я не смог использовать развязку, потому что было сложно узнать о завершении увольнения. Поэтому я использовал dismissViewControllerAnimated:completion:.