2017-06-24 3 views
2

ここのコードは、テキストビューをアニメーション化し、スクロールダウンします。textview(swif3)の行数に応じてアニメーションの時間を適用します。

 UIView.animate(withDuration: 10) { // 10 seconds 
     self.textView.contentOffset = CGPoint(x: 0, y: 225) 
    } 

問題は、テキストフィールドにいくつの行があるのか​​と同じコマンドに従うことです。私がしたいのは、アニメーションに継続時間の長さを決定するライン比率を従わせることです。たとえば、テキストフィールドの3行ごとに1秒間を追加します。したがって、テキストビューに合計21行がある場合、継続時間の長さは7秒になります。

答えて

0

この

// Calculate number of lines according to font 
    var font = UIFont.boldSystemFont(ofSize: CGFloat(11.0)) 
    var size: CGSize = string.size(with: font, constrainedToSize: textView.frame.size, lineBreakMode: .wordWrap) // default mode 
    var numberOfLines: Float = size.height/font.lineHeight 

    // 1 sec per third line 
    let duration = Int(numberOfLines/3) 

    UIView.animate(withDuration: TimeInterval(duration)) { 
     self.textView.contentOffset = CGPoint(x: 0, y: 225) 
    } 

それとも、拡張子

extension UITextView { 
    func numberOfLines() -> Int { 
     let layoutManager = self.layoutManager 
     let numberOfGlyphs = layoutManager.numberOfGlyphs 
     var lineRange: NSRange = NSMakeRange(0, 1) 
     var index = 0 
     var numberOfLines = 0 

     while index < numberOfGlyphs { 
      layoutManager.lineFragmentRectForGlyphAtIndex(
       index, effectiveRange: &lineRange 
      ) 
      index = NSMaxRange(lineRange) 
      numberOfLines += 1 
     } 
     return numberOfLines 
    } 
} 

を使用して、期間に

// 1 sec per third line 
    let duration = Int(textView.numberOfLines()/3) 


    UIView.animate(withDuration: TimeInterval(duration)) {    
     self.textView.contentOffset = CGPoint(x: 0, y: 225) 
    } 
を計算することができてみてください
関連する問題