2017-03-16 6 views
2

Ich weiß, dass dies schon einmal gefragt wurde, aber alle Antworten wurden in Objective C bereitgestellt und ich suche eine Swift-Lösung. Wenn ich eine vorhandene Swift-Lösung vermisst habe, lass es mich wissen und ich werde diese Frage schließen.Behalten Sie die UIView-Position während der Übersetzungsanimation im Auge

Dies ist, wie ich bin Ansicht Animieren:

UIView.animate(withDuration: 10.0, animations: {() in 
    let translateTransform = CGAffineTransform.init(translationX: 0.0, y: Constants.screenHeight) 
    self.icon.transform = translateTransform 
}) 

Was ich möchte den Überblick über aktuelle Rahmenposition in der gesamten Animation halten tun. Muss ich einen anderen Ansatz wählen, um das zu erreichen?

Antwort

0

Sie möchten kann dies versuchen, eine Ansicht des Rahmens während einer Animation zu erhalten:

let currentFrame = myView.layer.presentation()!.frame 

, dass Sie den Rahmen zum Zeitpunkt der Code ausgeführt wird so erhalten, wenn Sie eine Aufzeichnung der Rahmen auf der ganzen Animation gesucht Vielleicht möchten Sie einen Timer (früher NSTimer) verwenden.

In diesem Beispiel ist das optionale force unwrapped. Wenn Sie also nicht sicher sind, ob es NULL ist oder nicht, können Sie eine if-let-Anweisung verwenden.

Hoffen Sie, dass dies hilft und lassen Sie mich wissen, wenn Sie irgendwelche anderen Probleme haben.

0

UIView.frame ist beobachtbar. Versuchen Sie KVO für die frame keyPath zu verwenden:

view.addObserver(self, forKeyPath:"frame", options:.new, context:nil) 

override func observeValue(forKeyPath keyPath: String, ofObject object: Any, change: [String: id], context: UnsafeMutableRawPointer) { 
    print("value of \(keyPath) changed: \(change[NSKeyValueChangeNewKey])") 
} 

KVO funktioniert nicht für Klassen, die NSObject nicht verlängern.

Um die Schlüsselwertbeobachtung mit einer Swift-Klasse zu verwenden, sollten Sie von NSObject erben.

Fügen Sie den Modifikator dynamic zu jeder Eigenschaft hinzu, die Sie beobachten möchten. Mehr auf dynamic: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID57

class YourClass: NSObject { 
    dynamic var view: UIView = ... 
} 

Vollständiger Artikel auf KVO: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-XID_8

Verwandte Themen