2009-11-05 17 views
11

Ho una transizione di lavoro utilizzando UIViewAnimationTransitionCurlUp tuttavia, vorrei che l'animazione si interrompesse a metà, proprio come l'applicazione Mappe ... Qualche idea su come ottenere questo risultato?Animazione arricciatura pagina parziale

risposta

1

L'arricciatura parziale di Maps è un'API privata. Puoi trovare i dettagli su come utilizzarlo nel libro di Erica Sadun The iPhone Developer's Cookbook, ma ti verrà rifiutato dall'App Store per utilizzarlo.

+0

Buono a sapersi ... Suppongo che farò solo una transizione di capovolgimento della pagina. – rson

+0

A partire da iOS 3.2, questo non è più vero. – tJener

0

Non sicuro se questo funzionerà, ma il parametro su +setAnimationRepeatCount: può essere una frazione.

+0

Se faccio così, allora la transizione insieme alla vista svanisce ... – rson

11

In iOS 3.2 e versioni successive, è possibile fornire lo UIViewController a UIModalTransitionStyle di UIModalTransitionStylePartialCurl. Dal UIViewControllerreference, vediamo

typedef enum { 
    UIModalTransitionStyleCoverVertical = 0, 
    UIModalTransitionStyleFlipHorizontal, 
    UIModalTransitionStyleCrossDissolve, 
    UIModalTransitionStylePartialCurl, 
} UIModalTransitionStyle; 

Quindi un caso ad esempio l'uso sarebbe:

UIViewController *viewController; 
// …create or retrieve your view controller… 

// Note: The modalPresentationStyle must be UIModalPresentationFullScreen, 
//  and the presenter must also be a full-screen view 
viewController.modalPresentationStyle = UIModalPresentationFullScreen; 
viewController.modalTransitionStyle = UIModalTransitionStylePartialCurl; 
+1

Se si desidera eseguire questa operazione, ma conservare una barra degli strumenti in basso (ad esempio, non un ricciolo a schermo intero), vedere la mia soluzione [qui] (http://stackoverflow.com/a/11406056/1148702) –

7

ho trovato una soluzione per aggiungere un UIView per UIViewController utilizzando blocco Animazione.

m_Container è un UIView che contiene l'animazione della mia vista (auto). self è un UIView.

ATTENZIONE: È necessario disporre di importazione QuartzCore

Per presentare vista con la pagina di animazione riccio è possibile utilizzare:

-(void)PresentView 
{ 
    [UIView animateWithDuration:1.0 
        animations:^{ 
         CATransition *animation = [CATransition animation]; 
         [animation setDelegate:self]; 
         [animation setDuration:0.7]; 
         [animation setTimingFunction:UIViewAnimationCurveEaseInOut]; 
         animation.type = @"pageCurl"; 
         animation.fillMode = kCAFillModeForwards; 
         animation.endProgress = 0.65; 
         [animation setRemovedOnCompletion:NO]; 
         [m_container.layer addAnimation:animation forKey:@"pageCurlAnimation"]; 
         [m_container addSubview:self]; 
         ;} 
    ];  
} 

E quando si vuole nascondere questo punto di vista si può usare:

-(void)HideHelpView 
{ 
    [UIView animateWithDuration:1.0 
        animations:^{ 
         CATransition *animation = [CATransition animation]; 
         [animation setDelegate:self]; 
         [animation setDuration:0.7]; 
         [animation setTimingFunction:UIViewAnimationCurveEaseInOut]; 
         animation.type = @"pageUnCurl"; 
         animation.fillMode = kCAFillModeForwards; 
         animation.startProgress = 0.35; 
         [animation setRemovedOnCompletion:NO]; 
         [m_container.layer addAnimation:animation forKey:@"pageUnCurlAnimation"]; 
         [self removeFromSuperview]; 

         ;} 
    ]; 

} 

Spero di averti aiutato.

+0

È questo API privata? Sembra funzionare perfettamente ma non lo vedo nei documenti. – SG1

+0

Questa non è un'API privata, utilizzo solo i metodi di UIView per animare una vista (m_container per me). Hai solo bisogno di copiare il contenuto dei metodi nei tuoi metodi e cambiare m_container con la tua vista ... – TheRonin

Problemi correlati