2014-07-16 11 views
11

Sto sviluppando un'Azione di condivisione per iOS 8 con l'interfaccia utente personalizzata, ma appare senza animazione, come posso fare? È un normale UIViewController.Animazione del presente e rimozione di un'estensione di condivisione con interfaccia utente personalizzata su iOS 8

Inoltre, appare a schermo intero su iPad e voglio che sia un controller di visualizzazione modale, che appare al centro dello schermo e non si adatta, come posso fare questo?

Saluti.

+0

Puoi fornire alcuni dettagli sull'animazione dell'aspetto che desideri mettere in atto? –

+0

Non posso parlare per Alvaro, ma nel mio caso voglio solo la visualizzazione della forma "normale"/la presentazione modale. Si noti che non si ha accesso al controller di visualizzazione presentativo in modo da non poter utilizzare alcune delle nuove funzionalità del controller di transizione. –

+3

Quello che sto facendo è lasciare un BlankViewController come iniziale, che ha uno sfondo chiaro, e quindi su viewDidAppear, presento il mio controller di visualizzazione principale con l'animazione che preferisco. –

risposta

22

Ecco la soluzione più pulita che ho trovato finora per animare il mio controller di visualizzazione personalizzato dentro e fuori!

animare 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; 
    }]; 
} 

Congeda:

- (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]; 
    }]; 
} 
1

Invece di animare s' il UIViewControllerview, sto suggerendo un approccio diverso po'.

Ho creato un dummy UIViewController (chiamato PresentingViewController qui sopra) il cui view.backgroundColor è impostato su [UIColor clearColor]. Presenterò quindi l'intestazione personalizzata UIViewController modally (o l'animazione personalizzata se lo desideri) in alto.

Questo è il codice per la 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 

Note:

  1. extensionContext è impostato solo sul PresentingViewController e quindi è necessario per essere trasferito al CustomViewController.
  2. Per l'eliminazione di animazioni, non è stato possibile utilizzare una sequenza di svolgimento, poiché era difficile conoscere il completamento del licenziamento. Quindi ho usato invece dismissViewControllerAnimated:completion:.
Problemi correlati