проведите между UIView с сегментированным управлением программно - PullRequest
0 голосов
/ 14 февраля 2020

привет, разработчик! Я хочу провести пальцем между uiview и scrollView, при этом изменяя индекс и перемещая маленький индикатор влево и вправо. но не отвечает, пока я пытаюсь сильно ударить. это моя картинка и мои настройки для прокрутки между uiview. Вы можете сказать мне, где я скучаю?

scroll view

    let segmentedControl    = UISegmentedControl()
    let containerView       = UIView()
    let indicatorView       = UIView()
    let leftView            = UIView()
    let rightView           = UIView()
    let scrollView          = UIScrollView()
    var slides              = [UIView]()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .systemBackground
        slides.append(leftView)
        slides.append(rightView)
        segmentedControl.insertSegment(withTitle: "Harian", at: 0, animated: true)
        segmentedControl.insertSegment(withTitle: "Mata Pelajaran", at: 1, animated: true)

        segmentedControl.selectedSegmentIndex = 0
        segmentedControl.addTarget(self, action: #selector(handleTap), for: .valueChanged)
        setupSlideScrollView()
    }

    func setupSlideScrollView() {
        view.addSubview(scrollView)
        scrollView.isPagingEnabled = true
        scrollView.translatesAutoresizingMaskIntoConstraints = false

        for i in 0..<slides.count {
            slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
            scrollView.addSubview(slides[i])
        }
    }

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let pageIndex = round(scrollView.contentOffset.x / view.frame.width)
        segmentedControl.selectedSegmentIndex = Int(pageIndex)
    }

    @objc func handleTap(_ sender: UISegmentedControl) {
        indicatorView.frame.origin.x = (segmentedControl.frame.width / CGFloat(segmentedControl.numberOfSegments)) * CGFloat(segmentedControl.selectedSegmentIndex)

        UIView.animate(withDuration: 0.5, animations: {
            self.view.layoutIfNeeded()
            self.indicatorView.transform = CGAffineTransform(scaleX: 0.7, y: 1)
        }) { (finish) in
            UIView.animate(withDuration: 0.4, animations: {
                self.indicatorView.transform = CGAffineTransform.identity
            })
        }
    }

...