2016-12-16 142 views
1

我有UIScrollViewUILabel。当用户向上/向下滚动我的UIScrollView时,我想动态地将UILabel大小从33.0更改为0.0,0.0至33。scrollView contentOffset y改变时如何动态改变字体大小?

我该怎么做?

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

我现在的代码只允许字体大小到15点左右,不会变为0.当用户再次向下滚动时,它也不会达到33。

回答

2

请尝试使用变换而不是字体大小改变

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