2014-09-03 7 views
12

Ho un viewcontroller con una vista che sto ignorando usando un'animazione UIView per ridurlo a 0 prima di rimuoverlo. Il mio codice per respingere è:L'animazione CGAffineTransformMakeScale non funziona

[UIView animateWithDuration:_dismissAnimationDuration 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^(void) { 
        _menuContainerView.transform = CGAffineTransformMakeScale(0.0, 0.0); 
       } 
       completion:^(BOOL finished){ 
        if ([_delegate respondsToSelector:@selector(popUpMenuDidClose)]) 
        { 
         [_delegate popUpMenuDidClose]; 
        } 

        [self.view removeFromSuperview]; 
        [self removeFromParentViewController]; 
       }]; 

che funziona perfettamente quando si costruisce da XCode 5 su dispositivi in ​​esecuzione sia iOS 7 e iOS 8. Ma, non appena ho costruire per iOS 8 da XCode 6 (beta 6 e beta 7) la vista scompare invece di animare. Se ciò non fosse abbastanza strano non appena avrò modificato la scala target in (0,001, 0,001), essa si anima bene indipendentemente dalla versione di XCode. Qualche idea sul motivo per cui non posso animare su una scala effettiva (0.0, 0.0) con XCode 6?

+2

Ho lo stesso problema con l'iOS8GM ... nessuna idea di come risolvere questo problema. –

risposta

11

Quindi, dopo aver parlato con uno sviluppatore di Apple, il ragionamento che ho ottenuto è che alcuni framework di base hanno bisogno di lavorare con gli invers delle matrici di trasformazione abbastanza spesso, e poiché non c'è inverso per la matrice zero l'animazione ritorna a evitare di schiantarsi. Speriamo che questo post abbia aiutato altri che si sono imbattuti in una situazione simile.

+0

Grazie per aver individuato il problema, quindi qual è la soluzione? –

+1

Penso che da ciò possiamo dedurre che la soluzione sarebbe quella che viene proposta da @guptron impostando un valore nullo zero come CGAffineTransformMakeScale (0.01, 0.01); sicuramente ha funzionato per me, grazie –

+0

Questa non è una soluzione, è un hack ... Apple ha intenzione di risolvere quel bug? –

6

Se accettabile per voi, impostare i valori di scala a 0,01 in questo modo:

_menuContainerView.transform = CGAffineTransformMakeScale(0.01, 0.01);

Reference

+1

Questo mi ha fatto risparmiare ore di frustrazione. Il mio codice usando (0,0) funziona bene in xcode usando obj-c ma nel mio codice Xamarin che dovevo usare (0.01f, 0.01f) – Jesse