motion-horizontal-scroll 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2JkYjkyNWQ1YzY1YTZkYjBiNmQ2NjNkNzU0ODQ2ODE4YTU0NmFkNA==
5
+ data.tar.gz: !binary |-
6
+ MGNhNTA5MzZmMjc2OTYzNGRhODAxNjZlYmQwMWJjMzdjMzU5Mjg5ZA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZTNlM2FiY2I2OTg5YWI1NTI5NDE5YWRkMzFjYjMwYzNmYmM2ZDRhMWM5ZDI0
10
+ YzU3M2ZmN2Q4ZGFmNmNjOWM1ZTM2M2Y3NGU2ZmI3NDMzNzg2Zjk5OGY5NzRj
11
+ NDk2ZTlmYjlmNzUwZDNhNjU5MDkxZTJlNzA4ZTgwNGRmMTdmNTM=
12
+ data.tar.gz: !binary |-
13
+ ODRhZDY4N2E1ZmQwNTc1ZDMzNGZiMDFlZDY4ZDZkNTRjYTFhZjBlM2M3OTVi
14
+ ZDkyYWU0NGUyNjk2NjhmMjU1NTZmZDMzYWQzNTYxZjdlNTA2MjI1MGNiYjI5
15
+ YTRhOTVmMGIwOTY1ZGQxOWJmNzgxNmI2Y2MwZTk3YTBjZWM2ZDY=
@@ -0,0 +1,18 @@
1
+ .repl_history
2
+ build
3
+ tags
4
+ app/pixate_code.rb
5
+ resources/*.nib
6
+ resources/*.momd
7
+ resources/*.storyboardc
8
+ vendor
9
+ .DS_Store
10
+ nbproject
11
+ .redcar
12
+ #*#
13
+ *~
14
+ *.sw[po]
15
+ .eprj
16
+ .sass-cache
17
+ .idea
18
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
4
+
5
+ gem "alerter"
6
+ gem "motion-horizontal-scroll"
7
+ gem "bubble-wrap"
8
+ gem "afmotion"
@@ -0,0 +1,58 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activesupport (3.2.17)
5
+ i18n (~> 0.6, >= 0.6.4)
6
+ multi_json (~> 1.0)
7
+ afmotion (2.1.1)
8
+ motion-cocoapods (~> 1.4.0)
9
+ motion-require (~> 0.1.0)
10
+ alerter (1.0)
11
+ bubble-wrap (1.4.0)
12
+ claide (0.4.0)
13
+ cocoapods (0.29.0)
14
+ activesupport (>= 3.2.15, < 4)
15
+ claide (~> 0.4.0)
16
+ cocoapods-core (= 0.29.0)
17
+ cocoapods-downloader (~> 0.3.0)
18
+ cocoapods-try-release-fix (~> 0.1.1)
19
+ colored (~> 1.2)
20
+ escape (~> 0.0.4)
21
+ json_pure (~> 1.8)
22
+ nap (~> 0.5)
23
+ open4 (~> 1.3)
24
+ xcodeproj (~> 0.14.1)
25
+ cocoapods-core (0.29.0)
26
+ activesupport (>= 3.2.15, < 4)
27
+ fuzzy_match (~> 2.0.4)
28
+ json_pure (~> 1.8)
29
+ nap (~> 0.5)
30
+ cocoapods-downloader (0.3.0)
31
+ cocoapods-try-release-fix (0.1.2)
32
+ colored (1.2)
33
+ escape (0.0.4)
34
+ fuzzy_match (2.0.4)
35
+ horizontal_scroll_controller (1.0)
36
+ i18n (0.6.9)
37
+ json_pure (1.8.1)
38
+ motion-cocoapods (1.4.0)
39
+ cocoapods (>= 0.26.2)
40
+ motion-require (0.1.1)
41
+ multi_json (1.8.4)
42
+ nap (0.6.0)
43
+ open4 (1.3.2)
44
+ rake (10.1.1)
45
+ xcodeproj (0.14.1)
46
+ activesupport (~> 3.0)
47
+ colored (~> 1.2)
48
+ rake
49
+
50
+ PLATFORMS
51
+ ruby
52
+
53
+ DEPENDENCIES
54
+ afmotion
55
+ alerter
56
+ bubble-wrap
57
+ horizontal_scroll_controller
58
+ rake
@@ -0,0 +1,71 @@
1
+ iOS (RubyMotion) Horizontal Scroll Controller
2
+ ============================
3
+
4
+ This is a horizontal scroll controller for iOS, that mimics the Pulse UI. The basic functionality is borrowed from a [codebase](https://github.com/Bodacious/HorizontalScrollingTablesInRubyMotion) and it is the reason why we were able to come up with this gem, so hats off to the authors! Also, a ton of thanks to [lorempixel](http://lorempixel.com/) from where we have pulled in images to feed the sample app.
5
+
6
+ ![Screenshot 1 of Sample Implementation](https://dl.dropboxusercontent.com/s/p3ecjgjlk7mrc7d/horizontal_scroll_1.png)
7
+
8
+ ![Screenshot 2 of Sample Implementation](https://dl.dropboxusercontent.com/s/pb2qqp8vgopkfvn/horizontal_scroll_2.png)
9
+
10
+ Below is a description of how you can integrate and use this gem in your codebase.
11
+
12
+ ### Add to Gemfile
13
+
14
+ ```ruby
15
+ gem "motion-horizontal-scroll"
16
+ ```
17
+
18
+ ### How to use it
19
+
20
+ I have included a sample app for reference. To execute it, clone the repo to your local folder and run the following:
21
+
22
+ ```ruby
23
+ bundle install
24
+ rake
25
+ ```
26
+
27
+ Nevertheless, the basic setup for a single row can be achieved as follows:
28
+
29
+ ```ruby
30
+ horizontal_row = HorizontalTableContainerCell.alloc.initWithStyle(UITableViewCellStyleSubtitle, reuseIdentifier: <REUSE_IDENTIFIER>)
31
+ horizontal_row.delegate = <DELEGATE>
32
+ horizontal_row.vertical_row_offset = <VERTICAL_ROW_OFFSET>
33
+ cell = horizontal_row.set_dimensions_with_row_offset
34
+ cell.items_list = <DATA ARRAY>
35
+ cell.selectionStyle = UITableViewCellSelectionStyleNone
36
+ cell
37
+ ```
38
+
39
+ ###Supplying the title and image
40
+
41
+ The data required for a single cell has two properties, namely a name and an image. The name is the title that appears underneath the image in the cell. The image itself can be fed in two formats:
42
+
43
+ 1. An instance of UIImage with initialized with an image.
44
+
45
+ 2. A URL to an image along with a placeholder image; this requires either the gem *afmotion* or the pod *AFNetworking*. The pod on its own may be insufficient, but there's a category called UIImageView+AFNetworking that can start an asynchronous download of an image when given an NSURLRequest.
46
+
47
+ ###Available delegate methods
48
+ #### Cell Selection
49
+ This refers to a callback that indicates a particular cell has been tapped. The syntax of the method for the same is as follows:
50
+ ```ruby
51
+ horizontal_scroll_cell_selected(item, index)
52
+ ```
53
+ #### Setting Cell Details
54
+ The specifics of a cell that need to be set are the title and image. The delegate method for setting cell details is:
55
+ ```ruby
56
+ set_item_details_for_horizontal_scroll_cell(cell, item)
57
+ ```
58
+ To set the cell title, you can use the following method:
59
+ ```ruby
60
+ cell.set_title_label_text text
61
+ ```
62
+ To set the image, there are two possible methods based on the format as specified above.
63
+
64
+ * The first method involves directly providing an instance of UIImage:
65
+ ```ruby
66
+ cell.set_thumbnail_image image # image is an instance of UIImage
67
+ ```
68
+
69
+ * And the second is probably the method that would be more commonly used for apps that use images pulled from a network. This would require the ```setImageWithURL``` method for the ```UIImageView``` class which can be availed by installing the ```afmotion``` gem (in Objective-C, this would be available in the ```UIImageView+AFNetworking``` category). The two arguments it takes are the URL to the image and the name of a locally available placeholder image. The syntax is:
70
+ ```ruby
71
+ cell.set_thumbnail_image_with_url image_url, placeholder # image_url is a URL in form of a string and the placeholder is a local image that can take the place of the image until it loads
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+ $:.unshift("/Library/RubyMotion/lib")
3
+ require 'motion/project/template/ios'
4
+
5
+ begin
6
+ require 'bundler'
7
+ Bundler.require
8
+ rescue LoadError
9
+ end
10
+
11
+ Motion::Project::App.setup do |app|
12
+ # Use `rake config' to see complete project settings.
13
+ app.name = 'horizontal scroll sample app'
14
+ end
@@ -0,0 +1,8 @@
1
+ class AppDelegate
2
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
3
+ @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
4
+ @window.makeKeyAndVisible
5
+ @window.rootViewController = ScreenController.alloc.initWithNibName(nil, bundle: nil)
6
+ true
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ module AppConstants
2
+ ITEMS_PER_ROW = 5
3
+ NUMBER_OF_SECTIONS = 1
4
+ ROW_HEIGHT = 207
5
+ VERTICAL_ROW_OFFSET = 0
6
+ STATUS_BAR_HEIGHT = 20
7
+ end
@@ -0,0 +1,83 @@
1
+ class ScreenController < UIViewController
2
+ include AppConstants
3
+
4
+ attr_accessor :items
5
+
6
+ def viewDidLoad
7
+ super
8
+ self.items = []
9
+ self.view.backgroundColor = UIColor.whiteColor
10
+ @table_view = UITableView.alloc.initWithFrame([[0, STATUS_BAR_HEIGHT],[Device.screen.width, Device.screen.height - STATUS_BAR_HEIGHT]], style: UITableViewStylePlain)
11
+ @table_view.delegate = self
12
+ @table_view.dataSource = self
13
+ self.view.addSubview(@table_view)
14
+ fetch_data
15
+ end
16
+
17
+ def tableView(table_view, cellForRowAtIndexPath: index_path)
18
+ cell = table_view.dequeueReusableCellWithIdentifier(self.class.name)
19
+ unless cell
20
+ cell = create_new_horizontal_scroll_cell index_path.row
21
+ end
22
+ cell.reload_content
23
+ cell
24
+ end
25
+
26
+ def create_new_horizontal_scroll_cell row_number
27
+ horizontal_row = HorizontalTableContainerCell.alloc.initWithStyle(UITableViewCellStyleSubtitle, reuseIdentifier: self.class.name)
28
+ horizontal_row.delegate = self
29
+ horizontal_row.vertical_row_offset = VERTICAL_ROW_OFFSET
30
+ cell = horizontal_row.set_dimensions_with_row_offset
31
+ cell.items_list = extract_subset_of_data row_number
32
+ cell.selectionStyle = UITableViewCellSelectionStyleNone
33
+ cell
34
+ end
35
+
36
+ def extract_subset_of_data row_number
37
+ start_index = ITEMS_PER_ROW * row_number
38
+ end_index = start_index + ITEMS_PER_ROW - 1
39
+ self.items[start_index..end_index]
40
+ end
41
+
42
+ def horizontal_scroll_cell_selected(item, index)
43
+ App.alert "#{item.name} at index #{index}"
44
+ end
45
+
46
+ def set_item_details_for_horizontal_scroll_cell cell, item
47
+ cell.set_title_label_text item.name
48
+ cell.set_thumbnail_image_with_url item.image_url, "img.jpeg"
49
+ end
50
+
51
+ def tableView(table_view, heightForRowAtIndexPath: index_path)
52
+ ROW_HEIGHT
53
+ end
54
+
55
+ def tableView(table_view, numberOfRowsInSection: section)
56
+ get_row_count
57
+ end
58
+
59
+ def get_row_count
60
+ return 1 if self.items.nil?
61
+ (self.items.count.to_f/5).ceil
62
+ end
63
+
64
+ def numberOfSectionsInTableView(table_view)
65
+ NUMBER_OF_SECTIONS
66
+ end
67
+
68
+ def fetch_data
69
+ generate_sample_models "city"
70
+ generate_sample_models "transport"
71
+ generate_sample_models "cats"
72
+ @table_view.reloadData
73
+ end
74
+
75
+ def generate_sample_models category
76
+ 5.times do |n|
77
+ model = Model.new
78
+ model.name = "#{category} #{n}"
79
+ model.image_url = "http://lorempixel.com/130/207/#{category}/#{n}"
80
+ self.items << model
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,3 @@
1
+ class Model
2
+ attr_accessor :name, :image_url
3
+ end
@@ -0,0 +1,9 @@
1
+ unless defined?(Motion::Project::Config)
2
+ raise "This file must be required within a RubyMotion project Rakefile."
3
+ end
4
+
5
+ Motion::Project::App.setup do |app|
6
+ Dir.glob(File.join(File.dirname(__FILE__), "motion-horizontal-scroll/*.rb")).each do |file|
7
+ app.files.unshift(file)
8
+ end
9
+ end
@@ -0,0 +1,33 @@
1
+ class BasicTableViewCell < UITableViewCell
2
+ include ControlVariables
3
+
4
+ attr_accessor :thumbnail
5
+
6
+ def initWithFrame(frame)
7
+ if super
8
+ self.thumbnail = ImageViewWithOverlay.alloc.initWithFrame(CGRectMake(15, 23, 115, 145))
9
+ self.thumbnail.userInteractionEnabled = true
10
+ self.thumbnail.opaque = true
11
+ self.contentView.addSubview(thumbnail)
12
+ self.backgroundColor = CELL_BACKGROUND_COLOR
13
+ self.selectedBackgroundView = UIView.alloc.initWithFrame(self.thumbnail.frame)
14
+ self.selectedBackgroundView.backgroundColor = HORIZONTAL_VIEW_SELECTED_BACKGROUND_COLOR
15
+ self.transform = CGAffineTransformMakeRotation(Math::PI * 0.5)
16
+ after_frame_initialization
17
+ end
18
+ self
19
+ end
20
+
21
+ def after_frame_initialization
22
+
23
+ end
24
+
25
+ def set_thumbnail_image image
26
+ self.thumbnail.setImage image
27
+ end
28
+
29
+ def set_thumbnail_image_with_url image_url, placeholder
30
+ self.thumbnail.setImageWithURL(NSURL.URLWithString(image_url), placeholderImage: UIImage.imageNamed(placeholder))
31
+ end
32
+
33
+ end
@@ -0,0 +1,33 @@
1
+ class BasicTableViewCellWithTitle < BasicTableViewCell
2
+ attr_accessor :title_label
3
+
4
+ def after_frame_initialization
5
+ setup_title_label
6
+ end
7
+
8
+ def setup_title_label
9
+ label_frame = CGRectMake(15, CELL_HEIGHT - 55, 85, 50)
10
+ self.title_label = UILabel.alloc.initWithFrame(label_frame)
11
+ self.title_label.text = ""
12
+ self.title_label.font = UIFont.boldSystemFontOfSize(12)
13
+ self.title_label.numberOfLines = 2
14
+ self.title_label.backgroundColor = UIColor.clearColor
15
+ self.title_label.baselineAdjustment = UIBaselineAdjustmentAlignBaselines
16
+ self.title_label.textAlignment = NSTextAlignmentCenter
17
+ self.title_label.textColor = "#3d4040".to_color
18
+ self.thumbnail.addSubview(self.title_label)
19
+ end
20
+
21
+ def set_title_label_text text
22
+ self.title_label.text = text
23
+ reset_title_label_frame
24
+ end
25
+
26
+ def reset_title_label_frame
27
+ self.title_label.sizeToFit
28
+ frame = self.title_label.frame
29
+ frame.size.width = 85
30
+ self.title_label.frame = frame
31
+ end
32
+
33
+ end
@@ -0,0 +1,6 @@
1
+ module ControlVariables
2
+ CELL_HEIGHT = 207
3
+ CELL_WIDTH = 130
4
+ CELL_BACKGROUND_COLOR = UIColor.colorWithRed(0, green: 0.10784314, blue: 0.21568627, alpha: 0.4)
5
+ HORIZONTAL_VIEW_SELECTED_BACKGROUND_COLOR = UIColor.colorWithRed(0.0, green: 0.59607843, blue: 0.37254902, alpha:1.0)
6
+ end
@@ -0,0 +1,83 @@
1
+ class HorizontalTableContainerCell < UITableViewCell
2
+ include ControlVariables
3
+
4
+ attr_accessor :horizontal_table_view, :items_list, :delegate, :vertical_row_offset
5
+
6
+ def tableView(table_view, numberOfRowsInSection: section)
7
+ self.items_list.count
8
+ end
9
+
10
+ def tableView(table_view, cellForRowAtIndexPath: index_path)
11
+ cell = get_reusable_cell table_view
12
+ current_item = self.items_list[index_path.row]
13
+ self.delegate.set_item_details_for_horizontal_scroll_cell cell, current_item
14
+ cell.selectionStyle = UITableViewCellSelectionStyleNone
15
+ cell
16
+ end
17
+
18
+ def tableView(table_view, willDisplayCell: cell, forRowAtIndexPath: index_path)
19
+ cell.backgroundColor = UIColor.clearColor
20
+ end
21
+
22
+ def tableView(table_view, didSelectRowAtIndexPath: index_path)
23
+ self.delegate.horizontal_scroll_cell_selected(self.items_list[index_path.row], index_path.row) if self.delegate
24
+ end
25
+
26
+ def set_dimensions_with_row_offset
27
+ @scroll_view = setup_background_scroll_view
28
+ self.backgroundColor = UIColor.clearColor
29
+ self.horizontal_table_view = setup_horizontal_tableview
30
+ @scroll_view.addSubview(self.horizontal_table_view)
31
+ self.addSubview @scroll_view
32
+ end
33
+
34
+ def setup_background_scroll_view
35
+ scroll_view = UIScrollView.alloc.initWithFrame(get_wrapping_scroll_view_frame)
36
+ scroll_view.contentSize = CGSizeMake(Device.screen.width, CELL_HEIGHT + vertical_row_offset)
37
+ scroll_view.bounces = true
38
+ scroll_view.alwaysBounceHorizontal = true
39
+ scroll_view.backgroundColor = UIColor.clearColor
40
+ scroll_view
41
+ end
42
+
43
+ def setup_horizontal_tableview
44
+ horizontal_table_view = UITableView.alloc.initWithFrame(get_horizontal_table_view_frame)
45
+ horizontal_table_view.transform = CGAffineTransformMakeRotation( - (Math::PI * 0.5))
46
+ horizontal_table_view.rowHeight = CELL_WIDTH
47
+ horizontal_table_view.showsVerticalScrollIndicator = false
48
+ horizontal_table_view.showsHorizontalScrollIndicator = false
49
+ horizontal_table_view.backgroundColor = UIColor.clearColor
50
+ horizontal_table_view.separatorStyle = UITableViewCellSeparatorStyleSingleLine
51
+ horizontal_table_view.separatorColor = UIColor.clearColor
52
+ horizontal_table_view.dataSource = self
53
+ horizontal_table_view.bounces = true
54
+ horizontal_table_view.delegate = self
55
+ horizontal_table_view.alwaysBounceVertical = true
56
+ horizontal_table_view
57
+ end
58
+
59
+ def get_origin_before_transformation
60
+ [60 - vertical_row_offset, -60 + vertical_row_offset]
61
+ end
62
+
63
+ def get_wrapping_scroll_view_frame
64
+ [[0,0],[Device.screen.width, CELL_HEIGHT + vertical_row_offset]]
65
+ end
66
+
67
+ def get_horizontal_table_view_frame
68
+ [get_origin_before_transformation, [CELL_HEIGHT + vertical_row_offset, Device.screen.width]]
69
+ end
70
+
71
+ def reload_content
72
+ self.horizontal_table_view.reloadData
73
+ end
74
+
75
+ def get_reusable_cell table_view
76
+ cell = table_view.dequeueReusableCellWithIdentifier(BasicTableViewCellWithTitle.name)
77
+ if cell.nil?
78
+ cell = BasicTableViewCellWithTitle.alloc.initWithFrame(CGRectMake(0, 0, CELL_WIDTH, CELL_HEIGHT + vertical_row_offset))
79
+ end
80
+ cell
81
+ end
82
+
83
+ end
@@ -0,0 +1,36 @@
1
+ class ImageViewWithOverlay < UIImageView
2
+ OVERLAY_VIEW_TAG = 100
3
+
4
+ def touchesBegan(touches,withEvent: event)
5
+ overlay = UIView.alloc.initWithFrame(self.bounds)
6
+ overlay.tag = OVERLAY_VIEW_TAG
7
+ overlay.alpha = 0.5
8
+ overlay.backgroundColor = UIColor.blackColor
9
+ self.addSubview(overlay)
10
+ self.superview.touchesBegan(touches,withEvent: event)
11
+ end
12
+
13
+ def touchesEnded(touches,withEvent: event)
14
+ overlay = self.viewWithTag(OVERLAY_VIEW_TAG)
15
+ unless overlay.nil? == true
16
+ UIView.animateWithDuration(0.4, animations: lambda{
17
+ overlay.alpha = 0
18
+ },completion: lambda{|done|
19
+ overlay.removeFromSuperview
20
+ })
21
+ end
22
+ self.superview.touchesEnded(touches,withEvent: event)
23
+ end
24
+
25
+ def touchesCancelled(touches,withEvent: event)
26
+ overlay = self.viewWithTag(OVERLAY_VIEW_TAG)
27
+ unless overlay.nil? == true
28
+ UIView.animateWithDuration(0.4, animations: lambda{
29
+ overlay.alpha = 0
30
+ },completion: lambda{|done|
31
+ overlay.removeFromSuperview
32
+ })
33
+ end
34
+ self.superview.touchesCancelled(touches,withEvent: event)
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ # -*- encoding: utf-8 -*-
2
+ Gem::Specification.new do |gem|
3
+ gem.authors = ["Multunus"]
4
+ gem.email = ["info@multunus.com"]
5
+ gem.description = "This RubyMotion gem provides a means of horizontally scrolling through items as opposed to the standard iOS vertical scroll"
6
+ gem.summary = "Horizontal scroll container for iOS (RubyMotion)"
7
+ gem.homepage = "https://github.com/multunus/motion-horizontal-scroll"
8
+
9
+ gem.files = `git ls-files`.split($\)
10
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
11
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
12
+ gem.name = "motion-horizontal-scroll"
13
+ gem.require_paths = ["lib"]
14
+ gem.version = "1.0"
15
+ end
Binary file
@@ -0,0 +1,13 @@
1
+ describe BasicTableViewCell do
2
+
3
+ before do
4
+ @cell = BasicTableViewCell.alloc.initWithFrame(CGRectMake(0, 0, 130, 207))
5
+ end
6
+
7
+ it "should initialize and apply image overlay" do
8
+ @cell.thumbnail.class.should == ImageViewWithOverlay
9
+ @cell.thumbnail.userInteractionEnabled = true
10
+ @cell.thumbnail.opaque = true
11
+ end
12
+
13
+ end
@@ -0,0 +1,21 @@
1
+ describe BasicTableViewCellWithTitle do
2
+ before do
3
+ @cell = BasicTableViewCellWithTitle.alloc.initWithFrame(CGRectMake(0, 0, 130, 207))
4
+ end
5
+
6
+ it "should set up the title label" do
7
+ @cell.setup_title_label
8
+ @cell.thumbnail.subviews.last.class.should == UILabel
9
+ end
10
+
11
+ it "should set the title label text" do
12
+ @cell.set_title_label_text "title"
13
+ @cell.title_label.text.should == "title"
14
+ end
15
+
16
+ it "should set the title label frame width on reset" do
17
+ @cell.title_label.text = "title"
18
+ @cell.reset_title_label_frame
19
+ @cell.title_label.frame.size.width.should == 85
20
+ end
21
+ end
@@ -0,0 +1,42 @@
1
+ describe HorizontalTableContainerCell do
2
+ before do
3
+ horizontal_row = HorizontalTableContainerCell.alloc.initWithStyle(UITableViewCellStyleSubtitle, reuseIdentifier: self.class.name)
4
+ horizontal_row.delegate = self
5
+ horizontal_row.vertical_row_offset = 0
6
+ @cell = horizontal_row.set_dimensions_with_row_offset
7
+ @cell.items_list = [Model.new(:name => "test_name_1", :image_url => "test_url_1"), Model.new(:name => "test_name_2", :image_url => "test_url_2")]
8
+ end
9
+
10
+ it "should have transparent background" do
11
+ @cell.backgroundColor.should == UIColor.clearColor
12
+ end
13
+
14
+ it "should set up a scroll view to hold the table" do
15
+ scroll_view = @cell.instance_variable_get(:@scroll_view)
16
+ scroll_view.class.should == UIScrollView
17
+ scroll_view.backgroundColor.should == UIColor.clearColor
18
+ end
19
+
20
+ it "should set up the horizontal table view" do
21
+ @cell.horizontal_table_view.class.should == UITableView
22
+ @cell.horizontal_table_view.backgroundColor.should == UIColor.clearColor
23
+ @cell.horizontal_table_view.delegate.should == @cell
24
+ end
25
+
26
+ it "should return the right origin for the rotation transformation" do
27
+ @cell.get_origin_before_transformation.should == [60,-60]
28
+ end
29
+
30
+ it "should return the frame for the wrapping scroll view" do
31
+ @cell.get_wrapping_scroll_view_frame.should == [[0,0],[320,207]]
32
+ end
33
+
34
+ it "should return the frame for the inner horizontal table view" do
35
+ @cell.get_horizontal_table_view_frame.should == [[60,-60],[207,320]]
36
+ end
37
+
38
+ it "should return a cell for the table view" do
39
+ returned_cell = @cell.get_reusable_cell(@cell.horizontal_table_view)
40
+ returned_cell.class.should == BasicTableViewCellWithTitle
41
+ end
42
+ end
@@ -0,0 +1,9 @@
1
+ describe "Application 'tester'" do
2
+ before do
3
+ @app = UIApplication.sharedApplication
4
+ end
5
+
6
+ it "has one window" do
7
+ @app.windows.size.should == 1
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ describe ScreenController do
2
+ before do
3
+ @screen = ScreenController.new
4
+ @items = [Model.new(:name => "test_name_1", :image_url => "test_url_1"), Model.new(:name => "test_name_2", :image_url => "test_url_2")]
5
+ @screen.items = @items
6
+ end
7
+
8
+ it "should create a new horizontal scroll cell" do
9
+ cell = @screen.create_new_horizontal_scroll_cell 0
10
+ cell.class.should == HorizontalTableContainerCell
11
+ cell.items_list.count.should == @items.count
12
+ end
13
+
14
+ it "should extract the required subset of data" do
15
+ items = @screen.extract_subset_of_data 0
16
+ items.count.should == 2
17
+ end
18
+
19
+ it "should have the right number of rows" do
20
+ @screen.get_row_count.should == 1
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: motion-horizontal-scroll
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Multunus
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This RubyMotion gem provides a means of horizontally scrolling through
14
+ items as opposed to the standard iOS vertical scroll
15
+ email:
16
+ - info@multunus.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - Gemfile.lock
24
+ - README.md
25
+ - Rakefile
26
+ - app/app_delegate.rb
27
+ - app/constants/style_constants.rb
28
+ - app/controllers/screen_controller.rb
29
+ - app/models/model.rb
30
+ - lib/motion-horizontal-scroll.rb
31
+ - lib/motion-horizontal-scroll/basic_table_view_cell.rb
32
+ - lib/motion-horizontal-scroll/basic_table_view_cell_with_title.rb
33
+ - lib/motion-horizontal-scroll/control_variables.rb
34
+ - lib/motion-horizontal-scroll/horizontal_table_container_cell.rb
35
+ - lib/motion-horizontal-scroll/image_view_with_overlay.rb
36
+ - motion-horizontal-scroll.gemspec
37
+ - resources/Default-568h@2x.png
38
+ - resources/img.jpeg
39
+ - spec/basic_table_view_cell_spec.rb
40
+ - spec/basic_table_view_cell_with_title_spec.rb
41
+ - spec/horizontal_table_container_cell_spec.rb
42
+ - spec/main_spec.rb
43
+ - spec/screen_controller_spec.rb
44
+ homepage: https://github.com/multunus/motion-horizontal-scroll
45
+ licenses: []
46
+ metadata: {}
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project:
63
+ rubygems_version: 2.2.2
64
+ signing_key:
65
+ specification_version: 4
66
+ summary: Horizontal scroll container for iOS (RubyMotion)
67
+ test_files:
68
+ - spec/basic_table_view_cell_spec.rb
69
+ - spec/basic_table_view_cell_with_title_spec.rb
70
+ - spec/horizontal_table_container_cell_spec.rb
71
+ - spec/main_spec.rb
72
+ - spec/screen_controller_spec.rb