カスタム UI を使用して iOS 8 用の共有拡張機能を開発していますが、アニメーションなしで表示されます。どうすればよいですか? 通常の UIViewController です。
また、iPad ではフルスクリーンで表示されますが、画面の中央に表示されて収まらないモーダル ビュー コントローラーにしたいのですが、どうすればよいですか?
よろしく。
カスタム UI を使用して iOS 8 用の共有拡張機能を開発していますが、アニメーションなしで表示されます。どうすればよいですか? 通常の UIViewController です。
また、iPad ではフルスクリーンで表示されますが、画面の中央に表示されて収まらないモーダル ビュー コントローラーにしたいのですが、どうすればよいですか?
よろしく。
カスタムView Controllerをアニメーション化するためにこれまでに見つけた最もクリーンなソリューションを次に示します。
アニメーション イン:
- (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
。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
ます。