Ich möchte herausfinden, welche Seite für den Benutzer sichtbar ist und auch eine bestimmte Aktion ausführen, wenn eine Änderung der Seite erkannt wird. Dazu benutze ich die Funktion scrollViewDidScroll. Da ich das Ergebnis nicht bekommen habe (nichts ist passiert), habe ich nach Antworten auf stackoverflow gesucht und folgende Frage gefunden, die beantwortet wurde: Detecting UIScrollView page change, um genau zu sein habe ich die Antwort von Michael Waterfall benutzt und den Objective-C-Code konvertiert zu schnellem Code.Erkennen, wenn y Offset Änderungen in scrollView mit Paging aktiviert
Unten finden Sie den Code, den ich verwendet habe, um die scrollView in meinem class HomeController: UIViewController, UIScrollViewDelegate {
zu erstellen. Außerdem wird die Funktion von Michael Waterfall in der Funktion initiateScrollView()
deklariert und aufgerufen. Die Funktion druckt jedoch nichts. Weißt du, wo ich etwas falsch mache? Ich kann nicht sehen, wo ich einen Fehler gemacht habe. Beim Scrollen passiert nichts (z. B. von Seite 1 bis Seite 2 (homeView
bis view2
)). Die Funktion druckt nur einmal before: 0
und danach passiert nichts.
-Code
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
initiateScrollView()
}
func initiateScrollView() {
//create scrollView with paging enabled
let scrollView = UIScrollView(frame: view.bounds)
scrollView.isPagingEnabled = true
view.addSubview(scrollView)
//get page size
let pageSize = view.bounds.size
//individual views
let homeView = UIView()
homeView.backgroundColor = .green
let view2 = UIView()
view2.backgroundColor = .blue
let view3 = UIView()
view3.backgroundColor = .red
//array with individual views
let pagesViews = [homeView, view2, view3]
//amount of views
let numberOfPages = pagesViews.count
print(numberOfPages) //prints '3'
//add subviews (pages)
for (pageIndex, page) in pagesViews.enumerated(){
//add individual pages to scrollView
page.frame = CGRect(origin: CGPoint(x:0 , y: CGFloat(pageIndex) * pageSize.height), size: pageSize)
scrollView.addSubview(page)
}
func scrollViewDidScroll(scrollView: UIScrollView) {
var previousPage = 0
let fractionalPage: Float = Float(scrollView.contentOffset.y/pageSize.height)
let page = lround(Double(fractionalPage))
print("before:", page) //prints 'before: 0' once
if previousPage != page {
// Page has changed, do your thing!
// ...
// Finally, update previous page
print("before:", page)
previousPage = page
print("after:", page)
} //never prints anything
}
scrollViewDidScroll(scrollView: scrollView)
//define size of scrollView
scrollView.contentSize = CGSize(width: pageSize.width, height: pageSize.height * CGFloat(numberOfPages))
}
Nein, anscheinend ist es verwenden nicht, das hat nicht funktioniert. – Moritz