Ich habe Ihr Projekt heruntergeladen und Sie haben einige Probleme dort. Sie implementieren die UIScrollViewDelegate
, aber aus irgendeinem Grund ist die Methode, die Sie in Ihrer App haben falsch für die scrollViewDidScroll(_:)
.
Das braucht Methode, wie auf diese Weise erklärt werden:
func scrollViewDidScroll(_ scrollView: UIScrollView) {}
Sie nichts in diesem Verfahren und in Ihrem Fall, dass Sie den Namen des Arguments als den Namen Ihres UIScrollView
, eine kleinere gerade geändert ändern ändern, aber es bedeutet, dass Sie nicht jedes Mal benachrichtigt werden, wenn der UIScrollView
scrollte.
Also gehen wir zurück zu Ihrem Problem. Um das zu erreichen, was Sie wünschen, Sie benötigen die aktuelle Seite zu berechnen, wo Sie innerhalb des UIScrollView
oder in Ihrem Fall sind die Nummer der Taste, können wir berechnen, dass die folgende Formel:
let pageWidth = scrollView.frame.size.width
let page = Int(round((scrollView.contentOffset.x)/(pageWidth)))
Danach, was Sie brauchen Aktualisiert die ausgewählte Schaltfläche, wenn der Bildlauf beendet wird. Das Problem mit der Methode scrollViewDidScroll(_:)
besteht darin, dass diese Methode während des Scrolling-Prozesses mehrmals aufgerufen wird. Daher benötigen wir eine Methode, die nur aufgerufen wird, wenn das Scrollen beendet ist, und es ist scrollViewDidEndDecelerating(_:)
.
So müssen Sie den folgenden Code im Code hinzuzufügen:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageWidth = scrollView.frame.size.width
let page = Int(round((scrollView.contentOffset.x)/(pageWidth)))
let previousIndex = selectedIndex
tabBarButtons[previousIndex].isSelected = false
selectedIndex = page
tabBarButtons[page].isSelected = true
}
ich das Verhalten in Ihrer Anwendung getestet und funktioniert einwandfrei. Wenn Sie Probleme haben Ich habe das Projekt geändert, aber das einzige, was müssen Sie ist das obige Verfahren in Ihrem UIViewController
hinzuzufügen und es sollte
Ich hoffe, dass diese Hilfe Sie
Bitte tatsächlich geben Sie die Bildbeschreibung funktionieren - und geben Sie weitere Informationen (einschließlich Code), damit die Leute Ihnen helfen können. – GJZ