疑問があります。tableView
スクロールをインターセプトしてアクションを追加する方法はありますか?たとえば、私のprototype cell
背景は赤で、セル内を修正すると背景色が青で始まり、tableView
背景色をスクロールすると赤に戻ります。これを行うことは可能ですか?!
前もって感謝します。
UITableView
継承元 UIScrollView
および UITableViewDelegate
拡張 UIScrollViewDelegate
。
特にあなたは scrollViewDidScroll
メソッドに興味があるかもしれません。したがって、UITableViewDelegate
実装で、次のメソッドを追加します。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
NSLog("Table view scroll detected at offset: %f", scrollView.contentOffset.y)
}
CellForRow
は、スクロールを検出する方法であり、indexPath.row
ビューに入る次のセルの。ユーザーが非常に短い距離をスクロールして、新しいセルまたはリサイクルされたセルが構成されていない場合、ドラッグは検出されません。ただし、scrollViewWillBeginDragging
などの 組み込みメソッド を使用しても、短距離スクロールは検出されません。
var lastCellForRowAtIndex = 0
var isScrollingUp = false
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
isScrollingUp = indexPath.row > lastCellForRowAtIndex
lastCellForRowAtIndex = indexPath.row
}
TableViewのデリゲートとして設定されているViewControllerで、scrollViewのデリゲートメソッドを設定することもできます。これらは、scrollViewが含まれているため、tableViewがスクロールされたときに呼び出されます。
例えば:
extension ViewController: UIScrollViewDelegate {
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
}
}
たとえば、変数を維持する方がよいでしょう。 var isBackgroundColorRed: Bool = true
また、背景色を青に設定した場合のスクロールy位置用にもう1つ。例えば.
var blueBackgroundColorYOffset: CGFloat?
背景色を青に設定する場合は、yオフセットをcontentView.Origin.yに設定します。
次に、テーブルビュー(UIScrollViewをサブクラス化する)のデリゲートで
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if !isBackgroundColorRed {
// apply some color blending between blue and red based on
// the amount of movement on y axis, until you reach the limit
// its also important to take the absolute value of the blueBackgroundColorYOffset
// and the offset here in scrollViewDidScroll to cover up or down movements
// say 1 cell's height, then set your isBackgroundColorRed to true
}
}
これをプロジェクトに追加して、yurブリッジヘッダーを更新してみてください。 IColor-CrossFade
この手法により、突然の背景の変化ではなく、優れたUXが得られます。