Как запустить функцию на UiScrollView contentOffset Change? - PullRequest
0 голосов
/ 04 июня 2019

Я хочу запустить функцию для изменений «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'не работал на scrollview, поэтому я не могу использовать' 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()
}

есть проблема с2-й подход, когда я использую «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 () func в "UIScrollView contentOffset.x" Change 2) - в то же время идеально прокручивая

Как мне это сделатькак?

1 Ответ

0 голосов
/ 04 июня 2019

Используйте 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
    }
}
...