module UnderOs::UI::Events

Special, UI avare events API

Constants

RECOGNIZERS
TOUCH_EVENTS

Public Instance Methods

emit(*event) click to toggle source
# File lib/under_os/ui/utils/events.rb, line 20
def emit(*event)
  if event.is_a?(UIGestureRecognizer)
    name, r = find_recognizer_from(event.class)
    event = Event.new(event, self, name)
  else # emits by a name
    event = Event.new(nil, self, *event)
  end

  UnderOs::Events::Listeners.kick(self, event, {})
end
off(event) click to toggle source
# File lib/under_os/ui/utils/events.rb, line 16
def off(event)
  UnderOs::Events::Listeners.remove(self, event)
end
on(event, *args, &block) click to toggle source
# File lib/under_os/ui/utils/events.rb, line 6
def on(event, *args, &block)
  return event.map{|e,b| self.on(e,&b)}[0] || self if event.is_a?(Hash)

  @_.userInteractionEnabled = true

  event = add_ui_event_listener(event)

  UnderOs::Events::Listeners.add(self, event, *args, block)
end
on=(hash) click to toggle source
# File lib/under_os/ui/utils/events.rb, line 31
def on=(hash)
  on hash
end

Private Instance Methods

add_ui_event_listener(event) click to toggle source
# File lib/under_os/ui/utils/events.rb, line 114
def add_ui_event_listener(event)
  event = event.to_sym if event.is_a?(String)
  event = try_add_touch_event_listener(event)
  event, recognizer = find_recognizer_from(event)

  @_.addGestureRecognizer(recognizer.alloc.initWithTarget(self, action: :emit)) if recognizer

  event
end
find_recognizer_from(event) click to toggle source

tries to figure event name and gesture recognizer

# File lib/under_os/ui/utils/events.rb, line 144
def find_recognizer_from(event)
  if event.is_a?(Class) && event < UIGestureRecognizer
    recognizer = event

    if recognizer.respond_to?(:event_name)
      event = recognizer.event_name
    else
      RECOGNIZERS.each{ |e,r| event = e if r == recognizer }
    end

  elsif RECOGNIZERS[event]
    recognizer = RECOGNIZERS[event]
  end

  [event, recognizer]
end
try_add_touch_event_listener(event) click to toggle source
# File lib/under_os/ui/utils/events.rb, line 126
def try_add_touch_event_listener(event)
  if TOUCH_EVENTS.include?(event)
    UnderOs::UI::Events::TouchListeners.add(event, self)
  end

  event
end