Method: UIView#on_pan

Defined in:
lib/ios/sugarcube-gestures/gestures.rb

#on_pan(fingers) ⇒ Object #on_pan(options) ⇒ Object

Overloads:

  • #on_pan(fingers) ⇒ Object

    Parameters:

    • taps (Fixnum)

      Number of fingers

  • #on_pan(options) ⇒ Object

    Options Hash (options):

    • :min_fingers (Fixnum)

      Minimum number of fingers for gesture to be recognized

    • :max_fingers (Fixnum)

      Maximum number of fingers for gesture to be recognized

    • :fingers (Fixnum)

      If min_fingers or max_fingers is not assigned, this will be the default.

    • :edges (Array)

      Some combination of [:left, :right, :top, :bottom, :all]. If present, overrides fingers options and instead handles gestures originating at specified screen edges.

Yields:

  • (recognizer)

    Handles the gesture event, and passes the recognizer instance to the block.



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/ios/sugarcube-gestures/gestures.rb', line 125

def on_pan(fingers_or_options=nil, &proc)
  fingers = nil
  edge_options = [:none]
  min_fingers = nil
  max_fingers = nil
  recognizer = nil

  if fingers_or_options
    if fingers_or_options.is_a? Hash
      fingers = fingers_or_options[:fingers] || fingers
      edge_options = fingers_or_options[:edges] || edge_options
      min_fingers = fingers_or_options[:min_fingers] || min_fingers
      max_fingers = fingers_or_options[:max_fingers] || max_fingers
    else
      fingers = fingers_or_options
    end
  end

  if edge_options.uniq == [:none] # full view pan, possibly with finger options
    # if fingers is assigned, but not min/max, assign it as a default
    min_fingers ||= fingers
    max_fingers ||= fingers
    recognizer = UIPanGestureRecognizer.alloc.initWithTarget(self, action:'sugarcube_handle_gesture:')
    recognizer.maximumNumberOfTouches = min_fingers if min_fingers
    recognizer.minimumNumberOfTouches = max_fingers if max_fingers
  else #edges option, finger options ignored
    edges = :none.uirectedge
    edge_options.each do | edge |
      edges |= (edge.uirectedge || 0)
    end
    recognizer = UIScreenEdgePanGestureRecognizer.alloc.initWithTarget(self, action:'sugarcube_handle_gesture:')
    recognizer.edges = edges
  end
  sugarcube_add_gesture(proc, recognizer)
end