Я хочу запустить функцию для изменений «UIScrollView contentOffset.x» (при каждой прокрутке), чтобы динамически вносить некоторые графические изменения в соответствии с моими требованиями к задаче.
let scroll = UIScrollView.init()
scroll.frame = CGRect(x: 10, y: 10, width: 500, height: 100)
scroll.backgroundColor = .white
scroll.contentSize.width = 1000
scroll.contentSize.height = 100
view.addSubview(scroll)
мне приходят на ум два подхода
1) 1-й подход (не используется)
подобно
txtfield.addTarget(self, action: #selector(name_editingchange(_:)), for: UIControlEvents.editingChanged)
"this approach use on textfield "on editingChange""
«addTarget» не работал на прокрутке, поэтому я не могу использовать «UIControlEvents.editingChanged»
2) 2-й подход "addGestureRecognizer" (можно использовать)
scroll.scrollview.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(onscroll)))
@objc func onscroll(_ pan:UIPanGestureRecognizer){
print("on change run func given below")
taskcompleted()
}
есть проблема со вторым подходом, когда я использую «PanGesture» в режиме прокрутки, тогда возможность прокрутки в режиме прокрутки не работает, чтобы восстановить возможность прокрутки, с помощью жеста панорамирования я пишу некоторый код в его функции
@objc func onscroll(_ pan:UIPanGestureRecognizer){
UIView.animate(withDuration: 0.3) {
self.scroll.contentOffset.x = self.scroll.contentOffset.x - pan.translation(in: self.view).x
pan.setTranslation(CGPoint(x: 0, y: 0), in: self.view)
}
taskcompleted()
}
но это не работает как оригинальная функция прокрутки.
я хочу бежать
1) - функция taskcompleted() в "UIScrollView contentOffset.x" Изменить 2)- при этом отлично прокручивается
Как я могу сделать оба?





Используйте UIScrollViewDelegate и scrollViewDidScroll()
Простой пример:
class TestViewController: UIViewController, UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(scrollView.contentOffset)
// perform actions as desired based on contentOffset
}
override func viewDidLoad() {
super.viewDidLoad()
let scroll = UIScrollView.init()
scroll.frame = CGRect(x: 10, y: 10, width: 500, height: 100)
scroll.backgroundColor = .white
scroll.contentSize.width = 1000
scroll.contentSize.height = 100
view.addSubview(scroll)
// assign the delegate here
scroll.delegate = self
}
}
Посмотрите на
optional func scrollViewDidScroll(_ scrollView: UIScrollView)ссылку: developer.apple.com/documentation/uikit/uiscrollviewdelegate/…