RubyMotionSamples 確認 (4)

GestureRecognizer の確認着手。
定義されているメソドが以下。

  • initWithTableView
  • scrollTable
  • updateAddingIndexPathForCurrentLocation
  • commitOrDiscardCell
  • pinchGestureRecognizer(recognizer)
  • panGestureRecognizer(recognizer)
  • longPressGestureRecognizer(recognizer)
  • gestureRecognizerShouldBegin(gestureRecognizer)
  • tableView(aTableView, heightForRowAtIndexPath: indexPath)
  • scrollViewDidScroll(scrollView)
  • scrollViewDidEndDragging(scrollView, willDecelerate: decelerate)
  • indexPathFromRecognizer(recognizer)
  • lengthForCommitEditingRowAtIndexPath(indexPath)

ええと、initWithTableView な呼び出し元の記述が以下。

    @tableViewRecognizer = GestureRecognizer.alloc.initWithTableView(self.tableView, delegate:self)

あと中で

  • UIPinchGestureRecognizer
  • UIPanGestureRecognizer
  • UILongPressGestureRecognizer

なオブジェクトを生成しています。これに対応する action として以下が登録されてます。

  • pinchGestureRecognizer(recognizer)
  • panGestureRecognizer(recognizer)
  • longPressGestureRecognizer(recognizer)

あと UITableView なオブジェクトの属性にも gestureRecognizers というものがあるのか。あるいはこのクラス、何かを継承している、という訳ではないはずなので、上記に羅列したメソドについてはどこかから呼び出されているはず、なのかな。確認してみます。

  • scrollTable は longPressGestureRecognizer メソドにおいて NSTimer.timerWithTImeInterval の selector: な引数に渡されている
  • updateAddingIndexPathForCurrentLocation は scrollTable あるいは longPressGestureRecognizer から呼び出されている
  • commitOrDiscardCell は pinchGestureRecognizer あるいは scrollViewDidEndDragging から呼び出されている
  • pinchGestureRecognizer(recognizer)
  • panGestureRecognizer(recognizer)
  • longPressGestureRecognizer(recognizer)
  • gestureRecognizerShouldBegin(gestureRecognizer) は呼び出し元不明
  • tableView(aTableView, heightForRowAtIndexPath: indexPath) についても要確認
  • scrollViewDidScroll(scrollView) についても要確認
  • scrollViewDidEndDragging(scrollView, willDecelerate: decelerate) についても要確認
  • indexPathFromRecognizer(recognizer) は updateAddingIndexPathForCurrentLocation および longPressGestureRecognizer および gestureRecognizerShouldBegin から呼び出されている
  • lengthForCommitEditingRowAtIndexPath(indexPath) は panGestureRecognizer から呼び出されている

つうか ViewController の tableViewRecognizer という属性が謎。あ、関連付けは以下なソレ、ってことなのかどうか。

      tableView.gestureRecognizers += [@pinchRecognizer, @panRecognizer, @longPressRecognizer]
      @pinchRecognizer.delegate = @panRecognizer.delegate = @longPressRecognizer.delegate = self

UITableView に gestureRecognizers という配列なプロパティがありますよ、という記述がなかなか見当たらない、というかあまりきちんとドキュメント見てないな。