2013-06-17 9 views
7

Sto tentando di eseguire questa animazione su una vista, ridimensionarla a (0,0), quindi spostare questo frame utilizzando il metodo CGRectMake e ridimensionarlo a (1,1). così ho usato il seguente codice per fare questo<Error>: CGAffineTransformInvert: matrice singolare

-(void)startWalkAnimationStartWalkingBtnViewScaleToZero{ 
    CGAffineTransform transform = StartWalkBtnView.transform; 

    StartWalkBtnView.transform=CGAffineTransformScale(transform,1.0f, 1.0f); 
    [UIView animateWithDuration: 0.7 
          delay: 0.6 
         options: (UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) 
        animations:^{ StartWalkBtnView.transform = CGAffineTransformScale(transform, 0.0f, 0.0f); 
        } 
        completion:^(BOOL finished){ 
         [UIView animateWithDuration:0.0 
               delay:0.0 
              options: UIViewAnimationOptionCurveEaseIn 
              animations:^{ 
               StartWalkBtnView.frame=CGRectMake(92, 270, 120, 121); 
              } 
              completion:^(BOOL finished){ 

               StartWalkBtnView.transform=CGAffineTransformScale(transform,0.0f, 0.0f); 
               [UIView animateWithDuration: 0.7 
                    delay: 0.8 
                    options: (UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) 
                   animations:^{ StartWalkBtnView.transform = CGAffineTransformScale(transform, 1.0f, 1.0f); 
                   } 
                   completion:^(BOOL finished){} 
               ]; 
              }]; 
        } 
    ]; 
} 

ma dopo aver provato a eseguire questo Animazione ho ottenuto il seguente errore nella console.

Jun 17 12:02:49 Kareem.local MyAppName[3157] <Error>: CGAffineTransformInvert: singular matrix. 

Ho cercato su google per questo troppo, e hanno provato tutte le soluzioni fornite (Scala Vicino a Zere valore, ...), ma niente ha funzionato, fare uno ha un'idea per risolvere questo. Grazie per aiuto

UPDATE: Ho trovato che il problema nella seguente riga:

StartWalkBtnView.frame = CGRectMake (92, 270, 120, 121);

ma in realtà non so come risolvere il problema, ma quando ho rimosso questa linea E scalata a zero, poi di nuovo da zero normalmente senza errori

+4

Prova (trasformazione, 0.01f, 0.01f); invece di (transform, 0.0f, 0.0f); – Raj

+1

check out http://sokol8.blogspot.in/2011/05/cgaffinetransforminvert-singular-matrix.html – iCoder

+1

@Raj, Grazie per aver commentato, ma ho scritto che ho provato questa soluzione. –

risposta

8

Il il contenuto della pagina web può essere la causa di questa errore, non la programmazione dell'app iOS.

Ho trovato l'errore si è verificato nella mia app solo mentre su Yahoo. Google.com, nessun problema. Reuters.com, nessun problema. SeattleTimes.com, nessun problema. Torna a Yahoo.com, problema. Soprattutto durante lo scorrimento quando l'errore può apparire alcune volte in una frazione di secondo.

Maggiori dettagli su my blog.

+0

Baidu.com ha anche questo problema.╮ (╯ ▽ ╰) ╭ – ChenXin

+0

così tumblr.com – holierthanthou84

+0

In che modo il contenuto della pagina Web può causare un'app iOS tentare una trasformazione con una matrice singolare? Geometricamente questo significa trasformare una forma in una forma con almeno un numero minore di dimensioni. Ciò perde informazioni che non possono essere recuperate e quindi non possono essere invertite. – Tim

16

Si ottiene questo errore perché il determinante della vostra matrice ridimensionamento è zero. Quando si tenta di modificare la trasformazione in scala 1.0, Core Graphics tenta di trovare la matrice inversa della trasformazione precedente per restituire la trasformazione alla matrice identità. Con il determinante 0 questo risulta in una matrice non inversibile, ed è per questo che si ottiene questo errore. Non trasformare la scala in 0.0.

Sei sicuro di aver verificato con valori di quasi zero in entrambi i valori di scala impostati su 0.0 ora?

Edit (Risposta):

  • Così, da Raj 's commento, per evitare questo errore, si deve cercare un valore diverso da zero (ma molto vicino a zero).

Cioè, invece di:

(transform,0.0f, 0.0f); 

Prova:

(transform,0.01f, 0.01f); 

o

(transform,0.001f, 0.001f); 
+0

Sicuramente questa risposta dovrebbe avere il segno di spunta Risposta? Come dice una matrice singolare è una con un determinante zero. (trasforma, 0,0) collassa la forma in (0,0) da cui non può ritornare. Questo è ciò di cui si lamenta xCode. (0.1.0.1) lo riduce molto. – Tim

Problemi correlati