【问题标题】:Move scrollview up and down smoothly on up/down button press. objective-c在向上/向下按钮按下时平滑地向上和向下移动滚动视图。目标-c
【发布时间】:2020-04-06 15:24:47
【问题描述】:

我想实现一个 UIScrollView,它可以在按下按钮时上下滚动。我想要的是当按钮被按下时滚动视图继续平滑滚动(在按下状态)。当我离开按钮时,滚动应该停止。我怎样才能实现这个功能? 我还附上了我的视图的屏幕截图,其中包含滚动视图和向上/向下箭头按钮。

注意:我想要的是,每当用户按下按钮并继续按住它的手指时,滚动视图会继续滚动(除非它到达底端)。当他的手指离开按钮时,滚动应该停止。有没有办法实现这样的功能?

【问题讨论】:

  • @Anbu.Karthik,感谢您的及时回复。我之前已经看过这些问题,但我想要实现的有点不同。我已经实现了在scrollview contentOffset的帮助下在向下箭头单击时滚动底部并在向上箭头单击时滚动顶部的功能。但我想要的是,每当用户按下按钮并继续按住手指时,滚动视图会继续滚动(除非它到达底端)。当他的手指离开按钮时,滚动应该停止。有没有办法实现这样的功能?
  • 只使用scrollview.contentOffset

标签: ios objective-c uiscrollview


【解决方案1】:

contentOffset 是你想要的。 UIScrollView 有这样的属性(当然还有它的子类,UITableViewUICollectionView)。

其中有点棘手的是如何在用户按住按钮时触发按钮。为此,您需要一个长按手势识别器和一个计时器。见:Press-and-hold button for "repeat fire"

import UIKit

class ViewController: UITableViewController {

    var timer: Timer?

    @IBAction func longPressUp(_ sender: UILongPressGestureRecognizer) {
        if sender.state == .began {
            self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.up(_:)), userInfo: nil, repeats: true)
        } else if sender.state == .cancelled || sender.state == .ended {
            print("CANCELED!")
            self.timer?.invalidate()
            self.timer = nil
        }
    }

    @IBAction func longPressDown(_ sender: UILongPressGestureRecognizer) {
        if sender.state == .began {
            self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.down(_:)), userInfo: nil, repeats: true)
        } else if sender.state == .cancelled || sender.state == .ended {
            print("CANCELED!")
            self.timer?.invalidate()
            self.timer = nil
        }
    }

    @IBAction func up(_ sender: Any) {
        print("UP!")
        let desiredOffset = CGPoint(x: 0, y: self.tableView.contentOffset.y + 50)
        self.tableView.setContentOffset(desiredOffset, animated: true)
    }

    @IBAction func down(_ sender: Any) {
        let desiredOffset = CGPoint(x: 0, y: self.tableView.contentOffset.y - 50)
        self.tableView.setContentOffset(desiredOffset, animated: true)
    }
}

【讨论】:

  • 谢谢@Glenn。会试试的。
  • 当然。祝你好运。
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 2023-03-18
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 2017-04-04
相关资源
最近更新 更多