Class: SlidingCellView
- Inherits:
-
MPTableCellWithSection
- Object
- MPTableCellWithSection
- SlidingCellView
- Defined in:
- lib/prime_sliding_action/sliding_cell_view.rb
Instance Attribute Summary collapse
-
#pan_recognizer ⇒ Object
Returns the value of attribute pan_recognizer.
-
#sliding_action_buttons ⇒ Object
Returns the value of attribute sliding_action_buttons.
-
#tap_recognizer ⇒ Object
Returns the value of attribute tap_recognizer.
Instance Method Summary collapse
- #actions_visible? ⇒ Boolean
- #cell_height ⇒ Object
- #gestureRecognizerShouldBegin(gestureRecognizer) ⇒ Object
- #hide_actions ⇒ Object
- #initialize_content ⇒ Object
- #pan ⇒ Object
- #setSection(section) ⇒ Object
- #show_actions ⇒ Object
- #tap ⇒ Object
Instance Attribute Details
#pan_recognizer ⇒ Object
Returns the value of attribute pan_recognizer.
2 3 4 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 2 def pan_recognizer @pan_recognizer end |
#sliding_action_buttons ⇒ Object
Returns the value of attribute sliding_action_buttons.
2 3 4 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 2 def @sliding_action_buttons end |
#tap_recognizer ⇒ Object
Returns the value of attribute tap_recognizer.
2 3 4 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 2 def tap_recognizer @tap_recognizer end |
Instance Method Details
#actions_visible? ⇒ Boolean
120 121 122 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 120 def actions_visible? @sliding_action_buttons_state == :visible end |
#cell_height ⇒ Object
124 125 126 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 124 def cell_height section ? section.[:height] : self.height end |
#gestureRecognizerShouldBegin(gestureRecognizer) ⇒ Object
128 129 130 131 132 133 134 135 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 128 def gestureRecognizerShouldBegin(gestureRecognizer) if gestureRecognizer.is_a?(UIPanGestureRecognizer) velocity = (gestureRecognizer.velocityInView gestureRecognizer.view) velocity.y.abs < velocity.x.abs else true end end |
#hide_actions ⇒ Object
115 116 117 118 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 115 def hide_actions self.scroll_view.setContentOffset(CGPointMake(0, 0), animated: true) @sliding_action_buttons_state = :hidden end |
#initialize_content ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 47 def initialize_content self.scroll_view = self.subviews.first self.scroll_view.subviews.first.removeFromSuperview self.content_view = MPTableViewCellContentView.alloc.initWithFrame(CGRectMake(0,0,320, self.height)) self.content_view.setBackgroundColor(:white.uicolor) self.content_view.autoresizingMask = UIViewAutoresizingFlexibleHeight self.scroll_view.addSubview(content_view) self.scroll_view.setDelegate self self.scroll_view.setScrollEnabled true self.scroll_view.setContentSize CGSizeMake(320, self.height) self.scroll_view.autoresizingMask = UIViewAutoresizingFlexibleHeight self.scroll_view.setShowsHorizontalScrollIndicator false self.scroll_view.setScrollsToTop false self.scroll_view.setPagingEnabled true self.pan_recognizer = UIPanGestureRecognizer.alloc.initWithTarget(self, action: 'pan') self.pan_recognizer.setMinimumNumberOfTouches 1 self.pan_recognizer.setMaximumNumberOfTouches 1 self.pan_recognizer.delegate = self self.addGestureRecognizer pan_recognizer self.tap_recognizer = UITapGestureRecognizer.alloc.initWithTarget(self, action: 'tap') self.tap_recognizer.delegate = self self.addGestureRecognizer tap_recognizer end |
#pan ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 75 def pan offset = @sliding_action_buttons_offset || 0 translation = pan_recognizer.translationInView self velocity = pan_recognizer.velocityInView self if pan_recognizer.state == UIGestureRecognizerStateEnded if velocity.x < -1000 show_actions elsif velocity.x > 1000 hide_actions elsif self.scroll_view.contentOffset.x > (offset / 2) show_actions else hide_actions end else if pan_recognizer.state == UIGestureRecognizerStateBegan @sliding_action_buttons_x = self.scroll_view.contentOffset.x end current_x = @sliding_action_buttons_x - translation.x if translation.x < 0 || current_x > 0 self.scroll_view.setContentOffset CGPointMake(current_x, 0) end end end |
#setSection(section) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 4 def setSection(section) @section = section.try(:weak_ref) self.content_view.setSection(@section) if section # init section @table = @section.collection_section.collection_view @table.directionalLockEnabled = true unless @sliding_action_buttons_rendered @sliding_action_buttons_offset = 0 @sliding_action_buttons = {} @section..each do |action, | styles = [:base_action_button, :"base_action_button_#{action}", :"#{@section.name}_action_button", :"#{@section.name}_action_button_#{action}"] = @section.screen.add_view MPButton, top: 0, width: 80, left: @section.screen.view.width + @sliding_action_buttons_offset, height: cell_height, title_color: [:title_color] || :white, title: [:title], background_color: [:background_color] || [:color] || :red @section.screen. , styles: styles @sliding_action_buttons_offset += .width .on :touch do .off(:touch) if [:unbind] @section.send([:action]) hide_actions unless (.has_key?(:hide_on_finish) && ![:hide_on_finish]) end @sliding_action_buttons[action] = self.scroll_view.addSubview end self.scroll_view.setContentSize CGSizeMake(320 + @sliding_action_buttons_offset, cell_height) @sliding_action_buttons_rendered = true @sliding_action_buttons_state = :hidden end else @sliding_action_buttons_rendered = nil end end |
#show_actions ⇒ Object
109 110 111 112 113 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 109 def show_actions offset = @sliding_action_buttons_offset || 0 self.scroll_view.setContentOffset(CGPointMake(offset, 0), animated: true) @sliding_action_buttons_state = :visible end |
#tap ⇒ Object
100 101 102 103 104 105 106 107 |
# File 'lib/prime_sliding_action/sliding_cell_view.rb', line 100 def tap if @sliding_action_buttons_state == :hidden && @table cell_index = @table.indexPathForCell(self) @table.delegate.tableView(@table, didSelectRowAtIndexPath: cell_index) else hide_actions end end |