Ich versuche ein animiertes Hintergrundbild für einen meiner View-Controller zu erstellen, wo das Bild horizontal von links nach rechts scrollt und dann wiederholt wird, wenn es das Ende des Bildes horizontal erreicht hat. Dieser Effekt ist in Spielen mit SpriteKit extrem häufig, aber es gibt keine klaren Informationen darüber, wie man es in einem Standard-View-Controller mit UIKit macht. Extra-Punkte, wenn Sie mir sagen, wie die oberen Grenzen des Bildes auf der Unterseite des Navigationsleiste lieber als die Spitze des View-Controllers :)Viewcontroller Hintergrundbild mit horizontaler Animation
Antwort
Verwenden Sie zwei Kopien das Bild. Beginnen Sie mit einem Bild, das den Bildschirm vollständig einnimmt. Der andere ist zu seiner Linken. Animiere nach rechts, so dass die zweite Kopie die erste Kopie vom Bildschirm verschiebt. Wenn die Animation das Ende erreicht hat, so dass nur eine Kopie den Bildschirm vollständig besetzt, springen Sie zurück zum Anfang und wiederholen Sie den Vorgang. Der Sprung ist nicht sichtbar, da die Bilder identisch sind und der Sprung ausgeführt wird, wenn sie sich in identischen Positionen befinden.
Die nette Sache ist, dass das Verhalten, das ich gerade beschrieben habe, der Standard für eine wiederholende CABasicAnimation ist; Es springt automatisch am Ende jeder Wiederholung zum Start zurück. So konnte ich eine Proof-of-Concept schreiben sehr schnell (Swift 3, iOS 10):
let im = UIImage(named:"stuff")!
// create double image
let r = UIGraphicsImageRenderer(size:
CGSize(width:im.size.width*2,height:im.size.height))
let im2 = r.image { _ in
im.draw(at: .zero)
im.draw(at: CGPoint(x: im.size.width, y: 0))
}
// create layer to hold double image
let imlay = CALayer()
imlay.frame.size = im2.size
imlay.contents = im2.cgImage
// put it inside a single-image-sized container
let scroll = CALayer()
scroll.frame = CGRect(origin: .zero, size: im.size)
scroll.masksToBounds = true
scroll.addSublayer(imlay)
scroll.bounds.origin = CGPoint(x:im.size.width, y:0)
// put it in the interface
self.view.layer.addSublayer(scroll)
// animate
let anim = CABasicAnimation(keyPath: "bounds.origin")
anim.toValue = NSValue(cgPoint: .zero)
anim.duration = 10
anim.repeatCount = .infinity
scroll.add(anim, forKey: nil)
You can achieve it by setting the `frame` of your `imageview` within an animation block like below:
func animate(){
imageView.frame.origin.x = 0
UIView.animateWithDuration(2, delay: 0.0, options: .CurveLinear, animations: {[unowned self]() -> Void in
self.imageView.frame.origin.x = self.view.frame.size.width
}) {[unowned self] (finsihed) -> Void in
self.animate()
}
}
- 1. UICollectionView Horizontaler Bildlauf mit horizontaler Ausrichtung
- 2. Horizontaler Überlauf mit slideDown()/slideUp()
- 3. ViewController Animation wie Zoomen und Zoomen
- 4. JTable mit horizontaler Bildlaufleiste
- 5. ItemsControl mit horizontaler Ausrichtung
- 6. ListView mit horizontaler ScrollView
- 7. Wie man Hintergrundbild von CSS3 einblendet Animation
- 8. Wie wird ein horizontaler horizontaler StaggeredGridLayoutManager mit RecyclerView erstellt?
- 9. Android Hintergrundbild mit Fade-In/Out-Animation ändern
- 10. Wie man Navigationsleiste Hintergrundbild manuell in bestimmten ViewController ändern?
- 11. UICollectionView - Horizontaler AutoScroll mit Timer
- 12. Bootstrap-Zeile mit horizontaler Bildlauf
- 13. Horizontaler Datumsschieber mit Coverflow Design
- 14. Horizontaler Loader, wenn Daten geladen werden
- 15. Wie ändere ich das Hintergrundbild mithilfe der jQuery-Animation?
- 16. Web-Animation in SVG bricht, wenn als Hintergrundbild
- 17. CSS - Nur horizontaler Überlauf?
- 18. Wie wird das Hintergrundbild horizontal ohne Animation unterbrochen?
- 19. Wie kann man Hintergrundbild und Jquery-Animation ansprechen?
- 20. Android Horizontaler RecyclerView wrap_content
- 21. Horizontaler RecyclerView in CoordinatorLayout?
- 22. Mit CATransition, um benutzerdefinierte Viewcontroller Übergangsanimation
- 23. Html Horizontaler Zeilenfehler graphviz
- 24. Zentraler horizontaler Text
- 25. Horizontaler Barplot in ggplot2
- 26. Das Hintergrundbild wird abgeschnitten, während die Animation gedreht wird
- 27. Overlapping Hintergrundbild mit angezeigten Bildes
- 28. Ein Hintergrundbild mit CSS3 drehen
- 29. Button klick Hintergrundbild größere Animation und lade neue Seite
- 30. CSS Animation - ändern Sie Hintergrundbild nach der Farbänderung
Ich habe ein YouTube-Video setzte das Ergebnis zeigen: https: // youtu. be/wRf3plbSd1g Mein Testbild war nur ein Teil Ihres Bildes, aber das macht keinen Unterschied. Wie Sie sehen können, ist der Effekt kontinuierliches Scrollen nach rechts. – matt
Matt das ist genial. Vielen Dank dafür, es hat perfekt funktioniert. – jwhubert91
Ich wusste, dass es dir gefallen würde. Begeistert zu helfen; Dieses Beispiel zusammenzubauen, war so viel lustiger als das, was ich getan habe! – matt