2013-06-26 3 views
5

Sto lavorando per allegare immagini a MFMailComposeViewController tutto funziona correttamente ma voglio sapere che è possibile dare l'animazione dell'allegato?iOS: è possibile attechment di MFMailComposeViewController with Animation?

Per esempio: - Quando si allega immagini da Photo Gallery nel dispositivo iPhone. e mentre seleziona la posta Pulsante che tutte le immagini selezionate si spostano in MailComposeViewcontroller con Nice ANIMATION.

Quindi, per favore, chiunque può guidarmi questa roba è possibile o no? e se SÌ, allora come posso impostare l'Animazione dell'allegato.

+0

no, non possibile. – sagarcool89

+0

Non di default. – Jasper

+0

Vedi la mia risposta. Non è possibile fare esattamente la stessa cosa che fa la posta di Apple, ma è possibile almeno simulare un effetto simile –

risposta

1

Questo è gli effetti di animazione personalizzata di iOS e non è esposto come API iOS, quindi non è possibile ottenere questo effetto fuori dalla scatola. Il motivo per cui so che questo effetto non è esposto agli sviluppatori è da Apple iOS 6 Docs. C'è solo un metodo che si occupa di animate e di quello standard.

Quello che puoi provare è questo. Dopo che l'utente ha selezionato le immagini dalla sua galleria fotografica (ad esempio da ALAssetsLibrary) è possibile animare una "immagine" simile a MFMailComposeViewController. L'animazione sarebbe simile a quella offerta da iOS, ad esempio lo sbiadimento in background, l'immagine MFMailComposeViewController e le immagini nella sezione "body" della posta. Al termine dell'animazione, rimuovere "l'immagine" di MFMailComposeViewController e visualizzare la chiamata effettiva MFMailComposeViewController invocata con l'opzione animaiton:FALSE. Spero di essere stato chiaro. In sostanza quello che stai fornendo è un'illusione di MFMailComposeViewController e una volta che l'animazione è stata fatta, togliendo l'illusione e mostrando la realtà.

In teoria ciò potrebbe funzionare, ma il tempo di animazione esatto e la sensazione percepita dall'utente devono essere testati.

+0

bella spiegazione. potrebbe essere che potrebbe essere difficile da implementare ..? –

+0

L'implementazione @NitinGohel non è così difficile. Ma potresti dover giocare con i tempi di animazione per ottenere l'effetto giusto, in modo che l'utente non percepisca il cambiamento. E per favore non chiamarmi signore! questo è quello che la gente chiama mio nonno !! –

+0

un ultimo consiglio. Studia attentamente l'animazione di ios. guarda da vicino quali elementi si stanno muovendo/cambiando/sbiadendo/scomparendo/tempismo, ecc. annotalo e prova a replicarlo nel tuo codice.dovrebbe essere divertente! –

2

Esiste una semi-soluzione. In effetti puoi aggiungere qualsiasi UIView come subview della finestra dell'app principale. Sarà in cima al contenuto di tutte le app. Utilizzando questo è possibile simulare l'animazione di allegare l'immagine a MailComposeViewcontroller

Vedere il mio codice di esempio. Questo codice consente di scorrere la visualizzazione delle immagini dalla parte superiore dello schermo per comporre il compositore di posta in modo che imiti l'aggiunta di un'immagine come allegato. Tutto è commentato

// Get apps main window 
UIWindow *window = [[UIApplication sharedApplication] keyWindow]; 

// Setup frames of animated image view in apps window - adjust to your needs 
CGRect finalImageFrame = CGRectMake(30, 220, window.frame.size.width-60, 100); 
CGRect initialImageFrame = finalImageFrame; 
initialImageFrame.origin.y = -initialImageFrame.size.height; 

// Create image view to be animated as attachment 
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage"]]; 
imageView.frame = initialImageFrame; 
imageView.backgroundColor = [UIColor redColor]; 

// Add animated image view to window 
[window addSubview:imageView]; 

// Animate image view with slide in from top 
[UIView animateWithDuration:0.4 
       animations:^{ 
        imageView.frame = finalImageFrame; 
       }]; 

// Present mail composer 
[self presentViewController:mailComposer animated:YES completion:^{ 

    // Once the controller appears, hide the image view - adjust this animation according to you needs 
    [UIView animateWithDuration:0.4 
        animations:^{ 
         imageView.alpha = 0; 
        } completion:^(BOOL finished) { 
         [imageView removeFromSuperview]; 
        }]; 

}]; 

Naturalmente il codice potrebbe essere necessario qualche aggiustamento e la lucidatura, ma mostra il concetto. Puoi giocare con le animazioni per ottenere un effetto migliore. Ci sono molte modifiche all'animazione che aggiungerei, ma volevo mantenere il codice di esempio il più breve possibile ;-)