How change font size dynamically when scrollView contentOffset y changed?

混江龙づ霸主 提交于 2019-12-23 02:32:36

问题


I have UIScrollView and UILabel. I want to change UILabel size dynamically from 33.0 to 0.0 , 0.0 to 33 when user scroll up / down my UIScrollView.

How can I do this?

@IBOutlet weak var myLabel : UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.delegate = self
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offset = scrollView.contentOffset.y
    let fontpointmath = (myLabel.font.pointSize / (offset / 100) - 15)

    if offset > 0 {
        if fontpointmath < 0 {
            myLabel.font =  UIFont(name: "Arial", size: 0.0)
        }else if fontpointmath > 33 {
            myLabel.font =  UIFont(name: "Arial", size: 33.0)
        }else{
            myLabel.font =  UIFont(name: "Arial", size: CGFloat(fontpointmath))
        }
    }

My current code only allow font size to about 15 points and doesn't change to 0. It also doesn't go up to 33 when user scroll down again.


回答1:


Please try to use transform instead font size changing

override func viewDidLoad() {
    super.viewDidLoad()
    scrollView.delegate = self
    myLabel.font = UIFont(name: "Arial", size: 33.0)
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offset = scrollView.contentOffset.y
    let scale = min(max(1.0 - offset / 200.0, 0.0), 1.0)
    myLabel.transform = CGAffineTransform(scaleX: scale, y: scale)
}  


来源:https://stackoverflow.com/questions/41186530/how-change-font-size-dynamically-when-scrollview-contentoffset-y-changed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!