Анимация подарка и увольнение общего расширения с пользовательским интерфейсом на 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
Заметки:
extensionContext
устанавливается только наPresentingViewController
и, следовательно, он должен быть переданCustomViewController
,- Для оживления увольнения я не смог использовать раскрутку, потому что было трудно узнать о завершении увольнения. Поэтому я использовал dismissViewControllerAnimated: завершение: вместо.