Ich versuche eine Ansicht zu erstellen, die ein Bild kontinuierlich von rechts nach links scrollt, wodurch effektiv ein Hintergrund erstellt wird, der unbegrenzt scrollt. Ich habe dies mit zwei nebeneinander liegenden Bildansichten erstellt und eine UIView
Animation verwendet, die auf .Repeat
gesetzt wurde und die Frames mit einem negativen horizontalen Offset umwandelt. (Code unten)Warum friert die wiederholte UIView-Animation beim Edge Swipe?
Es funktioniert super! Bis ich eine Kante Swipe in Navigation-Controller versuchen, an dem die Animation friert Punkt:
Mein Code sieht so aus:
class ScrollingImageView: UIView {
required init?(coder aDecoder: NSCoder) { fatalError() }
let imageView = UIImageView()
let imageView2 = UIImageView()
override init(frame: CGRect) {
super.init(frame: frame)
imageView.image = UIImage(named: "mario")
imageView2.image = UIImage(named: "mario")
imageView.frame = bounds
imageView2.frame = CGRectOffset(bounds, bounds.width, 0)
addSubview(imageView)
addSubview(imageView2)
}
func play() {
UIView.animateWithDuration(5, delay: 0, options: [.Repeat, .CurveLinear], animations: {
self.imageView.frame = CGRectOffset(self.imageView.frame, -self.bounds.width, 0)
self.imageView2.frame = CGRectOffset(self.imageView2.frame, -self.bounds.width, 0)
}, completion: nil)
}
}
Warum die Animation stoppen, wenn diese Interaktion beginnt? Ich denke, es hat etwas mit der interaktiven Geste Einstellung der Geschwindigkeit auf CALayer
zu Null zu tun. Gibt es eine Möglichkeit, diese Animation weiterspielen zu lassen?
"Ich denke, es hat etwas mit der interaktiven Geste zu tun, die die Geschwindigkeit auf dem CALayer auf Null setzt" Bingo! Genau so funktioniert eine interaktive Geste. – matt
@matt gibt es keine Möglichkeit für diese Animation, nicht an der interaktiven Geste teilzunehmen? Ich habe überlegt, 'CADisplayLink' zu verwenden, um die Frames selbst zu orchestrieren, aber das scheint hässlich zu sein. Irgendwelche Vorschläge? –
Ich würde den anderen Weg gehen: mach deine eigene interaktive Geste. Siehe meine Antwort ... – matt