2016-04-28 12 views
0

Seit Stunden habe ich versucht, die kleinste Animation Glitch zu lösen. Mein Code verschiebt die Ansicht erfolgreich vom Bildschirm und animiert sie dann wieder zurück. Die X-Koordinaten werden richtig gelesen, aber die Y-Achse hat ein Verhalten, das ich nicht verstehe. Hier ist der Code:iOS Animation gestört, Y-Koordinaten Probleme

func listTrans_slideIn (slideFrom: String) { 
    //var newFrame = tableView.frame 
    tableView.frame.origin.x = 1000 
    //tableView.frame.origin.y = 100 
    print("Table pushed to side") 

    UIView.animateKeyframesWithDuration(1.375 /*Total*/, delay: 0.0, options: UIViewKeyframeAnimationOptions.CalculationModeLinear, animations: { 
     UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 1/1, animations:{ 
      self.tableView_toTLG_Top.constant = 130 
      self.tableView_toSV_Left.constant = 0 
      self.tableView_toSV_Right.constant = 0 
      self.setupView() 

      //newFrame.origin.y = self.hdrBox.frame.height+50 
      //newFrame.origin.x = 0 
      //self.tableView.frame = newFrame 

      self.tableView.layoutIfNeeded() 
     }) 
     }, 
     completion: { finished in 
      if (!finished) { return } 

     }) 
} 

Das seltsame Verhalten ist, dass wenn ich die richtige setzen y-Koordinate in der Animation Keyframe, kommt es in zu hoch, aber dann setzt sich am richtigen koordinieren. Wenn ich eine y-Koordinate einfüge, die zu niedrig ist, kommt sie auf die richtige Höhe, setzt sich dann aber zu tief ein.

Wie Sie sehen können, habe ich versucht, Frames und Einschränkungen zu verwenden. Ich habe versucht, die Höhe zu ändern, auf die ich es vom Bildschirm verschiebe, aber das scheint keine Wirkung zu haben.

Wer weiß schon, warum ich diesen halben Tag damit verbracht habe, diesen Käfer zu sehen?

Antwort

0

Dies erwies sich als eine Reihenfolge von Operationen Problem. Die Lösung erforderte, dass ich die Animation in den viewDidAppear verschiebe.

Andere Anmerkungen:

  • Um die Animation so glatt wie möglich aussehen zu lassen, sollten Sie die Animation des Segue ausschalten.
  • Auch stellen Sie sicher, dass Sie den Segue Anruf und Animation in Ihrem Haupt-Thread laufen lassen, so dass alles geschieht reibungslos und ohne Verzögerung
0

Können Sie versuchen, etwas wie folgt aus:

// Use the same value here and below, it moves it out of the screen 
     self.tableView.center.y -= 500 

UIView.animateWithDuration(1.0, animations: {() -> Void in 

     // Then it comes back 
      self.tableView.center.y += 500 
    })