Ich habe eine Schaltfläche in einer Ansicht eingebettet, die in UIBarButtonItem ist. Was ich erreichen möchte, ist eine Animation, die meinen Knopf um einen bestimmten Betrag nach rechts bewegt, wenn ich das Schiebe-Menü von links öffne und zurück gehe, wenn ich es schließe.UIView Animation in der Navigationsleiste funktioniert manchmal falsch
Ich benutze diese Funktion, es zu schaffen:
static func createMenuButton(controller:UIViewController) -> UIBarButtonItem {
let target = controller.navigationController!.parentViewController!
let menuImage = UIImage(named: "menu.png")!.imageWithRenderingMode(.AlwaysTemplate)
let menuButton = UIButton(frame: CGRectMake(0, 0, 22, 22))
menuButton.tintColor = UIColor.blackColor()
menuButton.setBackgroundImage(menuImage, forState: .Normal)
menuButton.addTarget(target, action: Selector("toggleMenuClicked:"), forControlEvents:.TouchUpInside)
let menuButtonContainer = UIView(frame: menuButton.frame)
menuButtonContainer.addSubview(menuButton)
let menuButtonItem = UIBarButtonItem(customView: menuButtonContainer)
return menuButtonItem
}
ich es auch drehen wollen, aber ich habe einige Probleme bekam mit 2 Objekte zur gleichen Zeit zu ändern. Also habe ich beschlossen habe 2 separate Animationen zu machen (dies ist zum Öffnen, zum Schließen ist es das gleiche, aber in entgegengesetzter Richtung):
Übersetzen Behälter (Übersetzung von CGAffine nicht richtig funktioniert):
UIView.animateWithDuration(0.3, animations: {
menuContainerView.frame = CGRectOffset(menuContainerView.frame, 183, 0.0)
}, completion: nil)
Schaltfläche Drehen innen:
UIView.animateWithDuration(0.3, animations: {
menuButton.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
}, completion: nil)
Es funktioniert - in 90% der Fälle. Aber manchmal - beim Schließen - teleportiert sich die Taste außerhalb des Bildschirms und bewegt sich von dort zum Endpunkt.
UIView.animateWithDuration(0.3, animations: {
self.leftViewController!.view.frame = CGRect(x: 0, y: self.view.frame.origin.y, width: 183, height: self.view.frame.height)
}, completion: { (Bool) -> Void in
self.menuShown = true
})
Ich ändere auch Farbe auf Navigationsleiste Farbe zu löschen:
In der gleichen Zeit, die ich bin Menü View-Controller von außerhalb des Bildschirms (das gleiche für das Schließen nur entgegengesetzte Werte) bewegt auch wenn es geöffnet ist und zurück zur Standardfarbe, wenn es geöffnet wird.
Wenn es aufbricht, sieht es nicht gut aus. Was könnte der Grund sein? Wie kann ich es reparieren?
Nur eine Anmerkung: Ich benutze bereits Schlaf, aber es funktioniert sowieso nicht immer. Ich brauche eine saubere Lösung :) – Makalele