sugarcube 0.20.11 → 0.20.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +1 -1
- data/README.md +104 -52
- data/lib/sugarcube/animation_chain.rb +2 -2
- data/lib/sugarcube/symbol.rb +19 -5
- data/lib/sugarcube/uitableviewcell.rb +84 -0
- data/lib/sugarcube/uiview.rb +15 -1
- data/lib/sugarcube/version.rb +1 -1
- data/spec/uitableviewcell_spec.rb +63 -0
- data/spec/uiview_animation_spec.rb +4 -0
- metadata +5 -2
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -67,7 +67,7 @@ Installation
|
|
67
67
|
Examples
|
68
68
|
========
|
69
69
|
|
70
|
-
|
70
|
+
Array
|
71
71
|
-------
|
72
72
|
|
73
73
|
```ruby
|
@@ -76,7 +76,7 @@ Examples
|
|
76
76
|
[160, 210, 242].uicolor(0.5) # => UIColor.colorWithRed(0.6274, green:0.8235, blue:0.9490, alpha:0.5)
|
77
77
|
```
|
78
78
|
|
79
|
-
|
79
|
+
Hash => Object
|
80
80
|
--------
|
81
81
|
|
82
82
|
```ruby
|
@@ -101,7 +101,7 @@ h.baz # => NoMethodError
|
|
101
101
|
h.baz = 'baz' # => NoMethodError
|
102
102
|
```
|
103
103
|
|
104
|
-
|
104
|
+
Fixnum
|
105
105
|
--------
|
106
106
|
|
107
107
|
```ruby
|
@@ -129,7 +129,7 @@ NSDate.new # => 2013-01-03 11:42:24 -0700
|
|
129
129
|
# later => NSTimer
|
130
130
|
```
|
131
131
|
|
132
|
-
|
132
|
+
Numeric
|
133
133
|
---------
|
134
134
|
|
135
135
|
```ruby
|
@@ -156,7 +156,7 @@ distance.miles # => 0.932056427001953
|
|
156
156
|
10000.string_with_style(:currency) # => "$10,000.00"
|
157
157
|
```
|
158
158
|
|
159
|
-
|
159
|
+
NSAttributedString
|
160
160
|
---------
|
161
161
|
|
162
162
|
```ruby
|
@@ -195,7 +195,7 @@ view << (("We just met\n".attrd +
|
|
195
195
|
"so give me SSH access.").uilabel
|
196
196
|
```
|
197
197
|
|
198
|
-
|
198
|
+
NSCoder
|
199
199
|
---------
|
200
200
|
|
201
201
|
Shorthands and hash-like access to the coder/decoder objects.
|
@@ -245,7 +245,7 @@ string_data.nsstring # => 'String'
|
|
245
245
|
image_data.nsimage # => whatever 'an image' was
|
246
246
|
```
|
247
247
|
|
248
|
-
|
248
|
+
NSDate
|
249
249
|
--------
|
250
250
|
|
251
251
|
`NSDate` objects are converted to `Time` objects automatically by rubymotion.
|
@@ -490,7 +490,7 @@ NSError.new('Error Message', code: 404)
|
|
490
490
|
NSError.new('Error Message', code: 404, userInfo: { warnings: ['blabla'] })
|
491
491
|
```
|
492
492
|
|
493
|
-
|
493
|
+
NSURL
|
494
494
|
-------
|
495
495
|
|
496
496
|
```ruby
|
@@ -498,7 +498,7 @@ NSError.new('Error Message', code: 404, userInfo: { warnings: ['blabla'] })
|
|
498
498
|
"https://github.com".nsurl.open # => UIApplication.sharedApplication.openURL(NSURL.URLWithString("https://github.com"))
|
499
499
|
```
|
500
500
|
|
501
|
-
|
501
|
+
NSString
|
502
502
|
----------
|
503
503
|
|
504
504
|
```ruby
|
@@ -543,7 +543,7 @@ NSError.new('Error Message', code: 404, userInfo: { warnings: ['blabla'] })
|
|
543
543
|
"pi".nan? # => NSNumberFormatter.alloc.init.numberFromString("pi").nil?
|
544
544
|
```
|
545
545
|
|
546
|
-
|
546
|
+
NSIndexPath
|
547
547
|
-------------
|
548
548
|
|
549
549
|
Use the `IndexPath` class to match `NSIndexPath` objects, for instance in a
|
@@ -559,7 +559,7 @@ end
|
|
559
559
|
[0, 2].nsindexpath.to_a == [0, 2] # => true
|
560
560
|
```
|
561
561
|
|
562
|
-
|
562
|
+
Symbol
|
563
563
|
--------
|
564
564
|
|
565
565
|
This is the "big daddy". Lots of sugar here...
|
@@ -597,7 +597,7 @@ This is the "big daddy". Lots of sugar here...
|
|
597
597
|
:blue.uitablecellselectionstyle # or .uitableviewcellselectionstyle
|
598
598
|
```
|
599
599
|
|
600
|
-
|
600
|
+
UIImage
|
601
601
|
---------
|
602
602
|
|
603
603
|
```ruby
|
@@ -725,7 +725,7 @@ UIActionSheet.alert 'I mean, is this cool?', buttons: ['Nah', 'With fire!', 'Sur
|
|
725
725
|
success: proc { |pressed| self.proceed if pressed == 'Sure' }
|
726
726
|
```
|
727
727
|
|
728
|
-
|
728
|
+
UIColor
|
729
729
|
---------
|
730
730
|
|
731
731
|
Methods to merge or manipulate a color, or to get information about a color.
|
@@ -749,7 +749,7 @@ image patterns can't easily be inverted or mixed.
|
|
749
749
|
:white.uicolor.mix_with(:black.uicolor, 1) # => :black
|
750
750
|
```
|
751
751
|
|
752
|
-
|
752
|
+
UIView
|
753
753
|
--------
|
754
754
|
|
755
755
|
```ruby
|
@@ -799,22 +799,22 @@ provides it to all its completion handlers).
|
|
799
799
|
view.fade_out
|
800
800
|
|
801
801
|
# with a callback
|
802
|
-
view.fade_out
|
802
|
+
view.fade_out do
|
803
803
|
view.removeFromSuperview
|
804
|
-
|
804
|
+
end
|
805
805
|
|
806
806
|
# and the completed argument
|
807
|
-
view.fade_out
|
807
|
+
view.fade_out do |completed|
|
808
808
|
view.removeFromSuperview
|
809
|
-
|
809
|
+
end
|
810
810
|
|
811
811
|
# fade_out options
|
812
812
|
view.fade_out(duration: 0.5,
|
813
813
|
delay: 0,
|
814
814
|
options: UIViewAnimationOptionCurveLinear,
|
815
|
-
opacity: 0.5)
|
815
|
+
opacity: 0.5) do
|
816
816
|
view.removeFromSuperview
|
817
|
-
|
817
|
+
end
|
818
818
|
|
819
819
|
view.move_to([0, 100]) # move to position 0, 100
|
820
820
|
view.delta_to([0, 100]) # move over 0, down 100, from current position
|
@@ -823,7 +823,10 @@ view.rotate_to Math::PI # rotate view upside down
|
|
823
823
|
view.rotate 45.degrees # rotate *an additional* 45 degrees
|
824
824
|
view.rotate_to(duration: 0.5, angle: 45.degrees) # using options
|
825
825
|
|
826
|
-
view.slide :left # slides the entire view
|
826
|
+
view.slide :left # slides the entire view left, right, up, or down. The
|
827
|
+
# default amount is the width of the view being moved, but
|
828
|
+
# you can override
|
829
|
+
view.slide :left, 320
|
827
830
|
|
828
831
|
view.shake # shakes the view.
|
829
832
|
# options w/ default values:
|
@@ -843,19 +846,48 @@ view.shake offset: 0.1, repeat: 2, duration: 0.5, keypath: 'transform.rotation'
|
|
843
846
|
view.tumble # the view will fall and rotate - a good 'cancel button effect'
|
844
847
|
```
|
845
848
|
|
849
|
+
The default behavior on all the animation methods is to animate from "the
|
850
|
+
current" position (`UIViewAnimationOptionBeginFromCurrentState`). To disable
|
851
|
+
that, you can either assign `options:` to something else, or you can disable
|
852
|
+
|
853
|
+
```ruby
|
854
|
+
# *just* that option.
|
855
|
+
view.slide :left, from_current: false
|
856
|
+
```
|
857
|
+
|
858
|
+
Other options can be assigned this way, like the curve
|
859
|
+
|
860
|
+
```ruby
|
861
|
+
view.slide :left, from_current: false, curve: :ease_in # :ease_in_out, :ease_in, :ease_out, :linear
|
862
|
+
```
|
863
|
+
|
864
|
+
Allow/disallow user interaction
|
865
|
+
|
866
|
+
```ruby
|
867
|
+
view.slide :left, allow_interaction: true
|
868
|
+
```
|
869
|
+
|
870
|
+
Not all options are configurable this way. Refer to `UIViewAnimationOptions` and
|
871
|
+
assign them direcly to `options:` if there are options you need that are not
|
872
|
+
listed here.
|
873
|
+
|
874
|
+
```ruby
|
875
|
+
view.slide :left, options: UIViewAnimationOptionAllowAnimatedContent | UIViewAnimationOptionCurveEaseInOut
|
876
|
+
```
|
877
|
+
|
846
878
|
Using the completed callback you can string animations together for a low-tech
|
847
879
|
animation sequence.
|
848
880
|
|
849
881
|
```ruby
|
850
|
-
view.slide(:left, 20)
|
851
|
-
view.slide(:up, 20)
|
852
|
-
view.slide(:right, 20)
|
853
|
-
view.slide(:down, 20)
|
882
|
+
view.slide(:left, 20) do
|
883
|
+
view.slide(:up, 20) do
|
884
|
+
view.slide(:right, 20) do
|
885
|
+
view.slide(:down, 20) do
|
854
886
|
view.fade_out
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
887
|
+
end
|
888
|
+
end
|
889
|
+
end
|
890
|
+
end
|
859
891
|
```
|
860
892
|
|
861
893
|
Those be some gnarly callbacks. You can write this as a chain instead!
|
@@ -925,7 +957,7 @@ chain.loop(10) # would loop 10 times
|
|
925
957
|
# if you're impatient
|
926
958
|
chain.abort
|
927
959
|
# will stop the animation at the end of whatever block it is in, so it could be
|
928
|
-
# in a strange position, depending on where in the chain it is.
|
960
|
+
# in a strange position, depending on where in the chain it is. Better to call
|
929
961
|
# `stop`
|
930
962
|
```
|
931
963
|
|
@@ -971,6 +1003,24 @@ UITableView.plain([[0, 0], [320, 568]])
|
|
971
1003
|
UITableView.grouped([[0, 0], [320, 400]])
|
972
1004
|
```
|
973
1005
|
|
1006
|
+
###### UITableViewCell
|
1007
|
+
|
1008
|
+
```ruby
|
1009
|
+
# factory methods, named for the cell style. cell identifier is required.
|
1010
|
+
UITableViewCell.default('cell_identifier')
|
1011
|
+
UITableViewCell.value1('cell_identifier')
|
1012
|
+
UITableViewCell.value2('cell_identifier')
|
1013
|
+
UITableViewCell.subtitle('cell_identifier')
|
1014
|
+
|
1015
|
+
# you can options for the common settings
|
1016
|
+
cell = UITableViewCell.default('cell_identifier',
|
1017
|
+
accessory: :disclosure,
|
1018
|
+
selection: :blue,
|
1019
|
+
text: 'text',
|
1020
|
+
image: 'icon', # coerced into a UIImage
|
1021
|
+
)
|
1022
|
+
```
|
1023
|
+
|
974
1024
|
###### UISegmentedControl
|
975
1025
|
|
976
1026
|
```ruby
|
@@ -996,7 +1046,7 @@ UIActivityIndicatorView.large
|
|
996
1046
|
UIActivityIndicatorView.gray
|
997
1047
|
```
|
998
1048
|
|
999
|
-
|
1049
|
+
UIControl
|
1000
1050
|
-----------
|
1001
1051
|
|
1002
1052
|
Inspired by [BubbleWrap's][BubbleWrap] `when` method, but I prefer jQuery-style
|
@@ -1019,7 +1069,7 @@ button.off(:all)
|
|
1019
1069
|
You can only remove handlers by "type", not by the action. e.g. If you bind
|
1020
1070
|
three `:touch` events, calling `button.off(:touch)` will remove all three.
|
1021
1071
|
|
1022
|
-
|
1072
|
+
UIViewController
|
1023
1073
|
------------------
|
1024
1074
|
|
1025
1075
|
It is nice that *any* `UIViewController` can present a modal, but if you have
|
@@ -1051,7 +1101,7 @@ re-defined on `UIViewController` for this purpose:
|
|
1051
1101
|
controller.present_modal(other_controller) { puts "presented" }
|
1052
1102
|
```
|
1053
1103
|
|
1054
|
-
|
1104
|
+
UINavigationController
|
1055
1105
|
------------------------
|
1056
1106
|
|
1057
1107
|
`push`, `<<` and `pop` instead of `pushViewController` and `popViewController`.
|
@@ -1073,7 +1123,7 @@ nav_ctlr.pop new_ctlr # => pops to new_ctlr
|
|
1073
1123
|
nav_ctlr.pop :root # => pops to root_ctlr, because it's on the bottom
|
1074
1124
|
```
|
1075
1125
|
|
1076
|
-
|
1126
|
+
UITabBarController
|
1077
1127
|
------------------------
|
1078
1128
|
|
1079
1129
|
I have mixed feelings about adding this extension, but **I** needed it, so maybe
|
@@ -1091,7 +1141,7 @@ tabbar_ctlr.setViewControllers(controllers, animated: true)
|
|
1091
1141
|
tabbar_ctlr << new_ctlr
|
1092
1142
|
```
|
1093
1143
|
|
1094
|
-
|
1144
|
+
UITextView
|
1095
1145
|
------------
|
1096
1146
|
|
1097
1147
|
Added some `UIControl`-like event binding. You MUST call the `off` methods,
|
@@ -1122,21 +1172,23 @@ end
|
|
1122
1172
|
text_view.off :change, :end, :begin
|
1123
1173
|
```
|
1124
1174
|
|
1125
|
-
|
1175
|
+
UILabel
|
1126
1176
|
----------
|
1127
1177
|
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1178
|
+
Added simple `fit_to_size` function to the label, which will start at the supplied font size
|
1179
|
+
and then squeeze down until all the text fits. This way you can assure any dynamic text will completely display
|
1180
|
+
in a given label frame.
|
1131
1181
|
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1182
|
+
The font size changes instead of the frame size.
|
1183
|
+
```ruby
|
1184
|
+
# this will try to make the containing text fit at font size 40, but squeeze as needed.
|
1135
1185
|
@label.fit_to_size(40)
|
1136
1186
|
puts @label.font.pointSize # => Will be 40 or less depending on the font type and label frame.
|
1137
|
-
|
1187
|
+
```
|
1188
|
+
|
1189
|
+
|
1138
1190
|
|
1139
|
-
|
1191
|
+
UIBarButtonItem
|
1140
1192
|
----------------------
|
1141
1193
|
|
1142
1194
|
```ruby
|
@@ -1227,7 +1279,7 @@ Makes it easy to post a notification to some or all objects.
|
|
1227
1279
|
"my notification".remove_observer(observer, object)
|
1228
1280
|
```
|
1229
1281
|
|
1230
|
-
|
1282
|
+
NSTimer
|
1231
1283
|
---------
|
1232
1284
|
|
1233
1285
|
```ruby
|
@@ -1325,7 +1377,7 @@ test['my'] = 'new'
|
|
1325
1377
|
NSUserDefaults['test'] = test # saved
|
1326
1378
|
```
|
1327
1379
|
|
1328
|
-
|
1380
|
+
CoreGraphics
|
1329
1381
|
--------------
|
1330
1382
|
|
1331
1383
|
###### Is it `CGMakeRect` or `CGRectMake`? What arguments does `CGRect.new` take?
|
@@ -1365,7 +1417,7 @@ f = Rect(p, [w, h])
|
|
1365
1417
|
f = Rect([x, y], s)
|
1366
1418
|
```
|
1367
1419
|
|
1368
|
-
|
1420
|
+
CoreLocation
|
1369
1421
|
--------------
|
1370
1422
|
|
1371
1423
|
Open up `CLLocationCoordinate2D` to provide handy-dandies
|
@@ -1387,7 +1439,7 @@ Open up `CLLocationCoordinate2D` to provide handy-dandies
|
|
1387
1439
|
=> 0.00502094626426697
|
1388
1440
|
```
|
1389
1441
|
|
1390
|
-
|
1442
|
+
REPL View adjustments
|
1391
1443
|
-----------------------
|
1392
1444
|
|
1393
1445
|
Pixel pushing is an unfortunate but necessary evil. Well, at least we can make
|
@@ -1664,7 +1716,7 @@ $sugarcube_items # => the list of views that was output using `tree`
|
|
1664
1716
|
```
|
1665
1717
|
|
1666
1718
|
|
1667
|
-
|
1719
|
+
Pointers
|
1668
1720
|
----------
|
1669
1721
|
|
1670
1722
|
These are not UIKit-related, so I reverted to Ruby's preferred `to_foo`
|
@@ -1680,7 +1732,7 @@ floats[1] = 1.1
|
|
1680
1732
|
floats[2] = 2.2
|
1681
1733
|
```
|
1682
1734
|
|
1683
|
-
|
1735
|
+
UUID
|
1684
1736
|
------
|
1685
1737
|
|
1686
1738
|
Quick wrapper for `CFUUIDCreate()` and `CFUUIDCreateString()`. Identical to the
|
@@ -1696,7 +1748,7 @@ Quick wrapper for `CFUUIDCreate()` and `CFUUIDCreateString()`. Identical to the
|
|
1696
1748
|
# => "0A3A76C6-9738-4458-969E-3B9DF174A3D9"
|
1697
1749
|
```
|
1698
1750
|
|
1699
|
-
|
1751
|
+
Ruby on Rails Ripoffs (RoR-R?)
|
1700
1752
|
---------------
|
1701
1753
|
|
1702
1754
|
aka `ActiveSupport`.
|
@@ -1763,7 +1815,7 @@ view.on_press(1.5) # duration
|
|
1763
1815
|
view.on_press(duration: 1.5, taps: 1, fingers: 1)
|
1764
1816
|
```
|
1765
1817
|
|
1766
|
-
|
1818
|
+
Unholy
|
1767
1819
|
--------
|
1768
1820
|
|
1769
1821
|
These methods are just about as opinionated as they get - even more than the RoR
|
@@ -56,12 +56,12 @@ module SugarCube
|
|
56
56
|
}
|
57
57
|
options[:after] = @after_block
|
58
58
|
|
59
|
-
UIView.animate(options)
|
59
|
+
UIView.animate(options) do
|
60
60
|
Thread.current[:sugarcube_chaining] = true
|
61
61
|
block.call
|
62
62
|
Thread.current[:sugarcube_chaining] = nil
|
63
63
|
@block_index += 1
|
64
|
-
|
64
|
+
end
|
65
65
|
true
|
66
66
|
end
|
67
67
|
|
data/lib/sugarcube/symbol.rb
CHANGED
@@ -52,7 +52,8 @@ class Symbol
|
|
52
52
|
attr :activityindicator_styles
|
53
53
|
attr :segmented_styles
|
54
54
|
attr :datepicker_modes
|
55
|
-
attr :
|
55
|
+
attr :uiview_content_modes
|
56
|
+
attr :uiview_animation_curve
|
56
57
|
|
57
58
|
attr :tableview_styles
|
58
59
|
attr :tableview_rowanimation
|
@@ -274,7 +275,7 @@ class Symbol
|
|
274
275
|
countdowntimer: UIDatePickerModeCountDownTimer
|
275
276
|
}
|
276
277
|
|
277
|
-
@
|
278
|
+
@uiview_content_modes = {
|
278
279
|
scale: UIViewContentModeScaleToFill,
|
279
280
|
scale_to_fill: UIViewContentModeScaleToFill,
|
280
281
|
scaletofill: UIViewContentModeScaleToFill,
|
@@ -300,6 +301,13 @@ class Symbol
|
|
300
301
|
bottom_right: UIViewContentModeBottomRight,
|
301
302
|
}
|
302
303
|
|
304
|
+
@uiview_animation_curve = {
|
305
|
+
ease_in_out: UIViewAnimationCurveEaseInOut,
|
306
|
+
ease_in: UIViewAnimationCurveEaseIn,
|
307
|
+
ease_out: UIViewAnimationCurveEaseOut,
|
308
|
+
linear: UIViewAnimationCurveLinear
|
309
|
+
}
|
310
|
+
|
303
311
|
@tableview_styles = {
|
304
312
|
plain: UITableViewStylePlain,
|
305
313
|
grouped: UITableViewStyleGrouped,
|
@@ -581,10 +589,15 @@ class Symbol
|
|
581
589
|
end
|
582
590
|
|
583
591
|
def uicontentmode
|
584
|
-
sugarcube_look_in(Symbol.
|
592
|
+
sugarcube_look_in(Symbol.uiview_content_modes)
|
585
593
|
end
|
586
594
|
alias uiviewcontentmode uicontentmode
|
587
595
|
|
596
|
+
def uianimationcurve
|
597
|
+
sugarcube_look_in(Symbol.uiview_animation_curve)
|
598
|
+
end
|
599
|
+
alias uiviewanimationcurve uianimationcurve
|
600
|
+
|
588
601
|
def uitablestyle
|
589
602
|
sugarcube_look_in(Symbol.tableview_styles)
|
590
603
|
end
|
@@ -600,10 +613,11 @@ class Symbol
|
|
600
613
|
end
|
601
614
|
alias uitableviewcellstyle uitablecellstyle
|
602
615
|
|
603
|
-
def
|
616
|
+
def uitablecellaccessorytype
|
604
617
|
sugarcube_look_in(Symbol.tableview_cellaccessorytype)
|
605
618
|
end
|
606
|
-
alias uitablecellaccessory
|
619
|
+
alias uitablecellaccessory uitablecellaccessorytype
|
620
|
+
alias uitableviewcellaccessorytype uitablecellaccessorytype
|
607
621
|
|
608
622
|
def uitablecellselectionstyle
|
609
623
|
sugarcube_look_in(Symbol.tableview_cellselectionstyle)
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# Factory methods for UITableViewCell
|
2
|
+
class UITableViewCell
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
# returns a cell in the default style, with reuse identifier
|
7
|
+
# `cell_identifier`. Options are passed on to the
|
8
|
+
# `sugarcube_cell_factory` method.
|
9
|
+
def default(cell_identifier, options={})
|
10
|
+
return sugarcube_cell_factory(cell_identifier, :default, options)
|
11
|
+
end
|
12
|
+
|
13
|
+
# returns a cell in the value1 style, with reuse identifier
|
14
|
+
# `cell_identifier`. Options are passed on to the
|
15
|
+
# `sugarcube_cell_factory` method.
|
16
|
+
def value1(cell_identifier, options={})
|
17
|
+
return sugarcube_cell_factory(cell_identifier, :value1, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
# returns a cell in the value2 style, with reuse identifier
|
21
|
+
# `cell_identifier`. Options are passed on to the
|
22
|
+
# `sugarcube_cell_factory` method.
|
23
|
+
def value2(cell_identifier, options={})
|
24
|
+
return sugarcube_cell_factory(cell_identifier, :value2, options)
|
25
|
+
end
|
26
|
+
|
27
|
+
# returns a cell in the subtitle style, with reuse identifier
|
28
|
+
# `cell_identifier`. Options are passed on to the
|
29
|
+
# `sugarcube_cell_factory` method.
|
30
|
+
def subtitle(cell_identifier, options={})
|
31
|
+
return sugarcube_cell_factory(cell_identifier, :subtitle, options)
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Available options:
|
37
|
+
# accessory - accessoryType. Valid values:
|
38
|
+
# :none, :disclosure, :disclosureindicator, :detail,
|
39
|
+
# :detaildisclosurebutton, :checkmark
|
40
|
+
# or any UITableViewCellAccessory constant
|
41
|
+
# text - textLabel.text content
|
42
|
+
# detail - detailTextLabel.text content
|
43
|
+
# selection - selectionStyle
|
44
|
+
def sugarcube_cell_factory(cell_identifier, cell_style, options)
|
45
|
+
cell_style = cell_style.uitablecellstyle if cell_style.is_a?(Symbol)
|
46
|
+
cell = UITableViewCell.alloc.initWithStyle(cell_style, reuseIdentifier: cell_identifier)
|
47
|
+
|
48
|
+
if options[:accessory]
|
49
|
+
accessory = options[:accessory]
|
50
|
+
if accessory.is_a?(Symbol)
|
51
|
+
accessory = accessory.uitablecellaccessorytype
|
52
|
+
end
|
53
|
+
cell.accessoryType = accessory
|
54
|
+
end
|
55
|
+
|
56
|
+
if options[:selection]
|
57
|
+
selection = options[:selection]
|
58
|
+
if selection.is_a?(Symbol)
|
59
|
+
selection = selection.uitablecellselectionstyle
|
60
|
+
end
|
61
|
+
cell.selectionStyle = selection
|
62
|
+
end
|
63
|
+
|
64
|
+
if options[:image]
|
65
|
+
raise "cell type #{cell_style} does not support imageView" unless cell.imageView
|
66
|
+
image = options[:image]
|
67
|
+
cell.imageView.image = image && image.uiimage
|
68
|
+
end
|
69
|
+
|
70
|
+
if options[:text]
|
71
|
+
cell.textLabel.text = options[:text]
|
72
|
+
end
|
73
|
+
|
74
|
+
if options[:detail]
|
75
|
+
raise "cell type #{cell_style} does not support detailTextLabel" unless cell.detailTextLabel
|
76
|
+
cell.detailTextLabel.text = options[:detail]
|
77
|
+
end
|
78
|
+
|
79
|
+
return cell
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/lib/sugarcube/uiview.rb
CHANGED
@@ -51,16 +51,30 @@ class UIView
|
|
51
51
|
after_adjusted = nil
|
52
52
|
end
|
53
53
|
|
54
|
+
animation_options = options[:options]
|
55
|
+
unless animation_options
|
56
|
+
curve = options.fetch(:curve, UIViewAnimationOptionCurveEaseInOut)
|
57
|
+
curve = curve.uianimationcurve if curve.is_a?(Symbol)
|
58
|
+
|
59
|
+
from_current = options.fetch(:from_current, true) ? UIViewAnimationOptionBeginFromCurrentState : 0
|
60
|
+
allow_interaction = options.fetch(:allow_interaction, false) ? UIViewAnimationOptionAllowUserInteraction : 0
|
61
|
+
|
62
|
+
animation_options = curve | from_current
|
63
|
+
end
|
64
|
+
|
54
65
|
if duration == 0 && delay == 0
|
55
66
|
animations.call
|
56
67
|
after_adjusted.call(true) if after_adjusted
|
57
68
|
else
|
69
|
+
prev_value = Thread.current[:sugarcube_chaining]
|
70
|
+
Thread.current[:sugarcube_chaining] = true
|
58
71
|
UIView.animateWithDuration( duration,
|
59
72
|
delay: delay,
|
60
|
-
options:
|
73
|
+
options: animation_options,
|
61
74
|
animations: animations,
|
62
75
|
completion: after_adjusted
|
63
76
|
)
|
77
|
+
Thread.current[:sugarcube_chaining] = prev_value
|
64
78
|
end
|
65
79
|
nil
|
66
80
|
end
|
data/lib/sugarcube/version.rb
CHANGED
@@ -0,0 +1,63 @@
|
|
1
|
+
describe UITableViewCell do
|
2
|
+
|
3
|
+
it 'should create a default cell' do
|
4
|
+
cell = UITableViewCell.default('cell_identifier')
|
5
|
+
UITableViewCell.should === cell
|
6
|
+
cell.reuseIdentifier.should == 'cell_identifier'
|
7
|
+
# there's no way to test for the style :-/
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should create a value1 cell' do
|
11
|
+
cell = UITableViewCell.value1('cell_identifier')
|
12
|
+
UITableViewCell.should === cell
|
13
|
+
cell.reuseIdentifier.should == 'cell_identifier'
|
14
|
+
# there's no way to test for the style :-/
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should create a value2 cell' do
|
18
|
+
cell = UITableViewCell.value2('cell_identifier')
|
19
|
+
UITableViewCell.should === cell
|
20
|
+
cell.reuseIdentifier.should == 'cell_identifier'
|
21
|
+
# there's no way to test for the style :-/
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should create a subtitle cell' do
|
25
|
+
cell = UITableViewCell.subtitle('cell_identifier')
|
26
|
+
UITableViewCell.should === cell
|
27
|
+
cell.reuseIdentifier.should == 'cell_identifier'
|
28
|
+
# there's no way to test for the style :-/
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should accept options (image)' do
|
32
|
+
cell = UITableViewCell.default('cell_identifier',
|
33
|
+
accessory: :disclosure,
|
34
|
+
selection: :blue,
|
35
|
+
text: 'text',
|
36
|
+
image: 'little_square',
|
37
|
+
)
|
38
|
+
cell.accessoryType.should == UITableViewCellAccessoryDisclosureIndicator
|
39
|
+
cell.selectionStyle.should == UITableViewCellSelectionStyleBlue
|
40
|
+
cell.textLabel.text.should == 'text'
|
41
|
+
cell.imageView.image.should == 'little_square'.uiimage
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should accept options (detail)' do
|
45
|
+
cell = UITableViewCell.value2('cell_identifier',
|
46
|
+
accessory: :disclosure,
|
47
|
+
selection: :blue,
|
48
|
+
text: 'text',
|
49
|
+
detail: 'detail text',
|
50
|
+
)
|
51
|
+
cell.accessoryType.should == UITableViewCellAccessoryDisclosureIndicator
|
52
|
+
cell.selectionStyle.should == UITableViewCellSelectionStyleBlue
|
53
|
+
cell.textLabel.text.should == 'text'
|
54
|
+
cell.detailTextLabel.text.should == 'detail text'
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
# accessory
|
60
|
+
# selection
|
61
|
+
# text
|
62
|
+
# image
|
63
|
+
# detail
|
@@ -7,6 +7,10 @@ describe "UIView animation methods" do
|
|
7
7
|
@view.delta_to([1,2]).frame.should == CGRectMake(2,4,3,4)
|
8
8
|
end
|
9
9
|
|
10
|
+
it 'should delta_to x:1 y:2' do
|
11
|
+
@view.move_to([2,4]).frame.should == CGRectMake(2,4,3,4)
|
12
|
+
end
|
13
|
+
|
10
14
|
it 'should rotate 45 degrees' do
|
11
15
|
angle = 45.degrees
|
12
16
|
@view.rotate_to(angle)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sugarcube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.20.
|
4
|
+
version: 0.20.12
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2013-04-
|
16
|
+
date: 2013-04-22 00:00:00.000000000 Z
|
17
17
|
dependencies: []
|
18
18
|
description: ! '== Description
|
19
19
|
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- lib/sugarcube/uipickerview.rb
|
120
120
|
- lib/sugarcube/uisegmentedcontrol.rb
|
121
121
|
- lib/sugarcube/uitableview.rb
|
122
|
+
- lib/sugarcube/uitableviewcell.rb
|
122
123
|
- lib/sugarcube/uitextview.rb
|
123
124
|
- lib/sugarcube/uiview.rb
|
124
125
|
- lib/sugarcube/uiviewcontroller.rb
|
@@ -167,6 +168,7 @@ files:
|
|
167
168
|
- spec/uiimage_color_at_spec.rb
|
168
169
|
- spec/uiimage_scale_spec.rb
|
169
170
|
- spec/uilabel_spec.rb
|
171
|
+
- spec/uitableviewcell_spec.rb
|
170
172
|
- spec/uiview_animation_spec.rb
|
171
173
|
- spec/uiview_attr_updates_spec.rb
|
172
174
|
- spec/uiview_spec.rb
|
@@ -232,6 +234,7 @@ test_files:
|
|
232
234
|
- spec/uiimage_color_at_spec.rb
|
233
235
|
- spec/uiimage_scale_spec.rb
|
234
236
|
- spec/uilabel_spec.rb
|
237
|
+
- spec/uitableviewcell_spec.rb
|
235
238
|
- spec/uiview_animation_spec.rb
|
236
239
|
- spec/uiview_attr_updates_spec.rb
|
237
240
|
- spec/uiview_spec.rb
|