2010-11-18 11 views
1

In der App, die ich gerade bearbeite, tippt der Benutzer auf eine Tabellenansicht, um aus einer "Miniaturansicht" oder einer Miniaturansicht zur Vollansicht zu zoomen. Alles funktioniert gut außer einem etwas nervigen Animationsfehler oder was auch immer. Die Sache ist, ich bin mit dem folgenden Code:Alternative zu CGAffineTransformConcat

if ([subview respondsToSelector:@selector (name)] && [subview.name isEqualToString:self.labelListName.text]) 
    { 
     [self.tabBarController.view addSubview:subview]; 
     CGRect frame = CGRectMake(35, 78, self.scrollView.frame.size.width, self.scrollView.frame.size.height);   
     subview.frame = frame; 

     CGAffineTransform scale = CGAffineTransformMakeScale(1.39, 1.39); 
     CGAffineTransform move = CGAffineTransformMakeTranslation(0,44); 
     CGAffineTransform transform = CGAffineTransformConcat(scale, move); 
     [UIView animateWithDuration:0.15 
           delay:0 
          options:UIViewAnimationOptionBeginFromCurrentState 
         animations:^{ 
          subview.transform = transform; 
         } 
         completion:^(BOOL finished){ [self goToList],subview.hidden = YES; }]; 
    } 

- (void)goToList 
{ 
    self.gotoWishList = [[WishList alloc] initWithNibName:@"WishList" bundle:nil]; 
    self.gotoWishList.hidesBottomBarWhenPushed=YES; 
    self.gotoWishList.name = self.labelListName.text; 
    [self.navigationController pushViewController:self.gotoWishList animated:NO]; 
    self.gotoWishList.scrollLists = self; 
    [WishList release]; 
} 

Und wenn die Übertragung zwischen der Zoom-Ansicht, die der Animation zu tun und der aktuellen Ansicht der Benutzer zu interagieren werden ist nicht ganz perfekt. Der Text in der Zelle springt ein wenig, wenn zwischen den Ansichten gewechselt wird. Das Problem liegt in der Übersetzungsmatrix. Wenn ich das überspringe, kann ich die Animation perfekt funktionieren lassen, aber dann muss ich natürlich die Miniaturansicht in der GUI nach unten verschieben, was keine Option ist. Wenn ich stattdessen die Animationen in einer anderen Reihenfolge mache (bewegen, skalieren), dann funktioniert es besser. Ich bekomme immer noch einen Sprung am Ende, aber es sieht besser aus, als alles springt ... und nicht nur der Text.

Also ... im Grunde ist meine Frage, wie kann ich diese Animation fließend machen. Ich habe gelesen, dass die CGAffineTransformConcat jede Animation noch einzeln ausführt, und ich brauche wirklich beide Animationen (Skalierung und Verschieben der Liste), um EINE fließende Animation zu sein.

Danke für irgendwelche Tipps!

Antwort

0

Ich denke, Sie müssen Ansichten/Grafik-Kontext verschachteln, um zu bekommen, was Sie wollen. Das Animationssystem unterstützt keine simultanen Animationen, da die Mathematik dafür eine exponentielle Menge an Rechenleistung benötigt. Sie können es möglicherweise austricksen, indem Sie eine Ansicht verschieben, während Sie die andere vergrößern.

Ich bin mir da nicht sicher, wie ich es nie versucht haben musste.

Sie könnten auch einen Ruck oder überspringen von der Tabellenansicht selbst bekommen. Der Bounce am oberen und am Ende der Schriftrollen kann zu Effekten führen, wenn Sie den Tisch im Handumdrehen ändern. Ich würde das alles abstellen und sehen, ob du das Problem noch hast. Vielleicht möchten Sie auch in der Ansicht unabhängig von der Tabellenansicht testen, um sicherzustellen, dass das Problem mit den Animationen und nicht mit der sich bewegenden Tabellenansicht besteht.

+0

Nun, ich habe versucht, die Tabellenansicht in der Benutzeroberfläche zu verschieben, so dass es auf die volle Größe skalieren konnte, ohne es überhaupt zu verschieben und die Animation funktioniert dann gut (nur Skalierung, keine Übersetzung). Keine Artefakte oder irgendetwas. – Glitch