使用CGAffineTransform将UILabel字体大小减小到精确点

时间:2019-01-08 19:18:59

标签: ios swift uiscrollview cgaffinetransform

我有一个UITableView和一个UINavigationBar及其自定义标题标签。我想在向下滚动时减小标题标签的字体大小,并在向上滚动时增大它的大小。

这是我的代码

override func viewDidLoad() {
    super.viewDidLoad()
    myLabel.font = UIFont(name: "Arial", size: 17)
}

在这里,我设置标签的字体大小。

然后,我像这样变换字体大小

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)
}

问题是,这种方式将最小点设置为0,但是我希望我的标签减少到11点,依此类推。

有人可以帮我编辑我的代码吗?

1 个答案:

答案 0 :(得分:0)

使用此公式计算最终比例

let defualtFontSize = 17.0
let minFontSize = 11.0
let finalFontSize = CGFloat(minFontSize / defualtFontSize)

然后在此处使用finalFontSize

let scale = min(max(1.0 - offset / 200.0, finalFontSize), 1.0)

完整代码

  func scrollViewDidScroll(_ scrollView: UIScrollView) {


    let defualtFontSize = 17.0
    let minFontSize = 11.0
    let finalFontSize = CGFloat(minFontSize / defualtFontSize)

    let offset = scrollView.contentOffset.y
    let scale = min(max(1.0 - offset / 200.0, finalFontSize), 1.0)
    myLabel.transform = CGAffineTransform(scaleX: scale, y: scale)
}

但是将计算结果写在scrollViewDidScroll之外的某个地方,避免使用CPU。