sugarcube 0.10 → 0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +138 -2
- data/lib/sugarcube/adjust.rb +142 -47
- data/lib/sugarcube/nsindexpath.rb +1 -1
- data/lib/sugarcube/nsurl.rb +4 -0
- data/lib/sugarcube/nsuserdefaults.rb +16 -0
- data/lib/sugarcube/ror.rb +9 -0
- data/lib/sugarcube/symbol.rb +27 -0
- data/lib/sugarcube/to_s/nserror.rb +5 -0
- data/lib/sugarcube/to_s/uilabel.rb +7 -0
- data/lib/sugarcube/to_s/uiview.rb +6 -3
- data/lib/sugarcube/to_s/uiviewcontroller.rb +11 -0
- data/lib/sugarcube/uiactivityindicator.rb +2 -1
- data/lib/sugarcube/uialertview.rb +4 -0
- data/lib/sugarcube/uiimage.rb +21 -0
- data/lib/sugarcube/uiviewcontroller.rb +13 -11
- data/lib/sugarcube/version.rb +1 -1
- metadata +6 -2
data/README.md
CHANGED
@@ -86,6 +86,41 @@ Examples
|
|
86
86
|
# convert multiples of pi
|
87
87
|
2.pi # => 2 * Math::PI
|
88
88
|
0.5.pi # => 0.5 * Math::PI
|
89
|
+
```
|
90
|
+
|
91
|
+
NSCoder
|
92
|
+
---------
|
93
|
+
|
94
|
+
Shorthands and hash-like access to the coder/decoder objects.
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
# hash access is the handiest
|
98
|
+
coder['key'] = self.value
|
99
|
+
self.value = decoder['key']
|
100
|
+
|
101
|
+
# but if you want to store booleans and such in the MOST compact way:
|
102
|
+
coder.set('sugarcube_is_neat', toBool:self.is_sugarcube_neat?)
|
103
|
+
self.sugarcube_is_neat = decoder.bool('sugarcube_is_neat')
|
104
|
+
|
105
|
+
coder.set('number_of_things', toInt:self.number_of_things)
|
106
|
+
self.number_of_things = decoder.int('number_of_things')
|
107
|
+
|
108
|
+
# the entire list:
|
109
|
+
coder.set(key, toBool:value)
|
110
|
+
coder.set(key, toDouble:value)
|
111
|
+
coder.set(key, toFloat:value)
|
112
|
+
coder.set(key, toInt:value)
|
113
|
+
coder.set(key, toPoint:value)
|
114
|
+
coder.set(key, toRect:value)
|
115
|
+
coder.set(key, toSize:value)
|
116
|
+
|
117
|
+
decoder.bool(key)
|
118
|
+
decoder.double(key)
|
119
|
+
decoder.float(key)
|
120
|
+
decoder.int(key)
|
121
|
+
decoder.point(key)
|
122
|
+
decoder.rect(key)
|
123
|
+
decoder.size(key)
|
89
124
|
```
|
90
125
|
|
91
126
|
NSDate
|
@@ -332,6 +367,14 @@ This is the "big daddy". Lots of sugar here...
|
|
332
367
|
```ruby
|
333
368
|
image = "my_image".uiimage
|
334
369
|
image.uicolor # => UIColor.colorWithPatternImage(image)
|
370
|
+
```
|
371
|
+
|
372
|
+
###### Image Manipulation
|
373
|
+
|
374
|
+
```ruby
|
375
|
+
image.scale_to [37, 37]
|
376
|
+
image.rounded # default: 5 pt radius
|
377
|
+
image.rounded(10)
|
335
378
|
```
|
336
379
|
|
337
380
|
UIAlertView
|
@@ -810,15 +853,18 @@ Assume I ran `include SugarCube::Adjust` in these examples.
|
|
810
853
|
> adjust superview.subviews[4].subviews[1]
|
811
854
|
> up 1
|
812
855
|
> down 1 # same as up -1, obviously
|
856
|
+
> down # defaults to 1 anyway
|
813
857
|
> left 1
|
814
858
|
> right 1 # same as up -1, obviously
|
859
|
+
> left # => left 1
|
815
860
|
> origin 10, 12 # move to x:10, y:12
|
816
861
|
> wider 1
|
817
862
|
> thinner 1
|
818
|
-
> taller 1
|
819
|
-
> shorter 1
|
863
|
+
> taller # => taller 1
|
864
|
+
> shorter # => shorter 1
|
820
865
|
> size 100, 10 # set size to width:100, height: 10
|
821
866
|
> shadow(opacity: 0.5, offset: [0, 0], color: :black, radius: 1) # and path, which is a CGPath object.
|
867
|
+
> center # See `Centering` section below
|
822
868
|
> restore # original frame and shadow is saved when you call `adjust`
|
823
869
|
```
|
824
870
|
|
@@ -907,6 +953,78 @@ This better facilitates copy/paste of the values. Currently supported is:
|
|
907
953
|
|
908
954
|
Note: The `format` parameter can be passed as either a symbol or a string
|
909
955
|
|
956
|
+
### CENTER (in parent frame)
|
957
|
+
It is called as `center(which_element, of_total_number, horizontal_or_vertical, verbose_output)`
|
958
|
+
#### you can set 'direction' with any number of forms: 'horiz', 'vert', 'x', 'x and y'
|
959
|
+
|
960
|
+
Here are a few examples:
|
961
|
+
|
962
|
+
The default is to center the current element _horizontally_
|
963
|
+
|
964
|
+
```
|
965
|
+
(main)> center
|
966
|
+
[[145.0, 30.0], [30.0, 200.0]]
|
967
|
+
UIRoundedRectButton.origin = [145.0, 30.0]
|
968
|
+
=> "[[145.0, 30.0], [30.0, 200.0]]"
|
969
|
+
```
|
970
|
+
|
971
|
+
In order to place that same button in the CENTER of the screen, you can use this shorthand syntax:
|
972
|
+
`center 1,1,"xy"` or `center 1,1,:xy`
|
973
|
+
|
974
|
+
For the `horizontal_or_vertical` parameter, strings and symbols are interchangable
|
975
|
+
|
976
|
+
If you have three buttons and want them spaced evenly (vertically) across their parent frame, you can call it this way:
|
977
|
+
```
|
978
|
+
(main)> tree
|
979
|
+
0: . UIWindow(#6e1f950: [[0.0, 0.0], [320.0, 480.0]])
|
980
|
+
1: `-- UIView(#8b203b0: [[0.0, 20.0], [320.0, 460.0]])
|
981
|
+
2: +-- UIButton(#d028de0: [[10.0, 10.0], [320.0, 463.400512695312]])
|
982
|
+
3: | `-- UIImageView(#d02aaa0: [[0.0, 0.0], [320.0, 463.400512695312]])
|
983
|
+
4: +-- UIRoundedRectButton(#d02adb0: [[55.0, 110.0], [210.0, 20.0]])
|
984
|
+
5: | `-- UIButtonLabel(#d02af00: [[73.0, 0.0], [63.0, 19.0]])
|
985
|
+
6: +-- UIRoundedRectButton(#d028550: [[60.0, 30.0], [200.0, 20.0]])
|
986
|
+
7: | `-- UIButtonLabel(#d02afb0: [[68.0, 0.0], [63.0, 19.0]])
|
987
|
+
8: `-- UIRoundedRectButton(#d02b220: [[70.0, 30.0], [300.0, 20.0]])
|
988
|
+
9: `-- UIButtonLabel(#d02b300: [[118.0, 0.0], [63.0, 19.0]])
|
989
|
+
=> UIWindow(#6e1f950, [[0.0, 0.0], [320.0, 480.0]])
|
990
|
+
(main)> a 4; center 1, 3, :vert, false; center
|
991
|
+
[[55.0, 110.0], [210.0, 20.0]]
|
992
|
+
[[55.0, 110.0], [210.0, 20.0]]
|
993
|
+
UIRoundedRectButton.origin = [55.0, 110.0]
|
994
|
+
=> "[[55.0, 110.0], [210.0, 20.0]]"
|
995
|
+
(main)> a 6; center 2, 3, :vert, false; center
|
996
|
+
[[60.0, 220.0], [200.0, 20.0]]
|
997
|
+
[[60.0, 220.0], [200.0, 20.0]]
|
998
|
+
UIRoundedRectButton.origin = [60.0, 220.0]
|
999
|
+
=> "[[60.0, 220.0], [200.0, 20.0]]"
|
1000
|
+
(main)> a 8; center 3, 3, :vert, false; center
|
1001
|
+
[[70.0, 330.0], [300.0, 20.0]]
|
1002
|
+
[[10.0, 330.0], [300.0, 20.0]]
|
1003
|
+
UIRoundedRectButton.origin = [10.0, 330.0]
|
1004
|
+
=> "[[10.0, 330.0], [300.0, 20.0]]"
|
1005
|
+
```
|
1006
|
+
The calculated positions (x,y) are in the REPL output
|
1007
|
+
|
1008
|
+
|
1009
|
+
**Don't stop there!**
|
1010
|
+
|
1011
|
+
You can analyze `UIViewController` hierarchies, too. There's even a handy
|
1012
|
+
`root` method to grab the `rootViewController`:
|
1013
|
+
|
1014
|
+
```ruby
|
1015
|
+
(main)> tree root
|
1016
|
+
0: . #<MainScreenController:0xac23b80>
|
1017
|
+
1: +-- #<ScheduleViewController:0x13185d00>
|
1018
|
+
2: | +-- #<ScheduleTableController:0x131862f0>
|
1019
|
+
3: | `-- #<ScheduleCalendarController:0x131bba90>
|
1020
|
+
4: +-- #<CameraViewController:0x13191380>
|
1021
|
+
5: +-- #<UINavigationController:0xac01ea0>
|
1022
|
+
6: | `-- #<UITableController:0xac04e30>
|
1023
|
+
7: +-- #<PicturesViewController:0x1403ede0>
|
1024
|
+
8: `-- #<MessagesViewController:0x131a1bc0>
|
1025
|
+
=> #<MainScreenController:0xac23b80>
|
1026
|
+
```
|
1027
|
+
|
910
1028
|
|
911
1029
|
Pointers
|
912
1030
|
----------
|
@@ -944,3 +1062,21 @@ Quick wrapper for `CFUUIDCreate()` and `CFUUIDCreateString()`. Identical to the
|
|
944
1062
|
[teacup]: https://github.com/rubymotion/teacup
|
945
1063
|
[Fusionbox]: http://www.fusionbox.com/
|
946
1064
|
[fusionbox announcement]: http://fusionbox.org/projects/rubymotion-sugarcube/
|
1065
|
+
|
1066
|
+
Ruby on Rails Ripoffs (RoR-R?)
|
1067
|
+
---------------
|
1068
|
+
|
1069
|
+
```ruby
|
1070
|
+
# truthiness with `blank?`
|
1071
|
+
nil.blank? # => true
|
1072
|
+
false.blank? # => true
|
1073
|
+
''.blank? # => true
|
1074
|
+
[].blank? # => true
|
1075
|
+
{}.blank? # => true
|
1076
|
+
|
1077
|
+
0.blank? # => false
|
1078
|
+
true.blank? # => false
|
1079
|
+
'a'.blank? # => false
|
1080
|
+
['a'].blank? # => false
|
1081
|
+
{a: 'a'}.blank? # => false
|
1082
|
+
```
|
data/lib/sugarcube/adjust.rb
CHANGED
@@ -18,21 +18,24 @@ module SugarCube
|
|
18
18
|
return @@sugarcube_view if not view
|
19
19
|
|
20
20
|
if view.is_a? Fixnum
|
21
|
-
@@
|
22
|
-
raise "no views have been assigned to SugarCube::Adjust::tree" unless @@
|
21
|
+
@@sugarcube_items ||= nil
|
22
|
+
raise "no views have been assigned to SugarCube::Adjust::tree" unless @@sugarcube_items
|
23
23
|
|
24
|
-
view = @@
|
24
|
+
view = @@sugarcube_items[view]
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
27
|
+
if view.is_a?(UIView)
|
28
|
+
@@sugarcube_view = view
|
29
|
+
@@sugarcube_restore = {
|
30
|
+
frame: SugarCube::Adjust.frame,
|
31
|
+
shadow: SugarCube::Adjust.shadow,
|
32
|
+
}
|
32
33
|
|
33
|
-
|
34
|
-
|
34
|
+
if format
|
35
|
+
puts format_frame view.frame
|
36
|
+
end
|
35
37
|
end
|
38
|
+
|
36
39
|
view
|
37
40
|
end
|
38
41
|
alias a adjust
|
@@ -165,6 +168,52 @@ module SugarCube
|
|
165
168
|
end
|
166
169
|
alias z size
|
167
170
|
|
171
|
+
def center(*args)
|
172
|
+
@@sugarcube_view ||= nil
|
173
|
+
raise "no view has been assigned to SugarCube::Adjust::adjust" unless @@sugarcube_view
|
174
|
+
|
175
|
+
element = nil
|
176
|
+
total = nil
|
177
|
+
direction = 'h'
|
178
|
+
args.each do |option|
|
179
|
+
case option
|
180
|
+
when String, Symbol # accept string or symbol
|
181
|
+
direction = option.to_s
|
182
|
+
when Numeric
|
183
|
+
if not total
|
184
|
+
total = option
|
185
|
+
elsif not element
|
186
|
+
element = option
|
187
|
+
else
|
188
|
+
raise "I don't know what to do with #{option.inspect}"
|
189
|
+
end
|
190
|
+
else
|
191
|
+
raise "I don't know what to do with #{option.inspect}"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
element = 1 unless element
|
195
|
+
total = 1 unless total
|
196
|
+
|
197
|
+
view = @@sugarcube_view
|
198
|
+
|
199
|
+
left = view.origin.x
|
200
|
+
top = view.origin.y
|
201
|
+
|
202
|
+
if /h|x/.match(direction.downcase)
|
203
|
+
swidth = view.frame.width
|
204
|
+
pwidth = view.superview.frame.width / total
|
205
|
+
left = (pwidth - swidth) / 2 + pwidth * (element - 1)
|
206
|
+
end
|
207
|
+
if /v|y/.match(direction.downcase)
|
208
|
+
sheight = view.frame.height
|
209
|
+
pheight = view.superview.frame.height / total
|
210
|
+
top = (pheight - sheight) / 2 + pheight * (element - 1)
|
211
|
+
end
|
212
|
+
|
213
|
+
self.origin left, top
|
214
|
+
end
|
215
|
+
alias c center
|
216
|
+
|
168
217
|
##| SHADOW
|
169
218
|
def shadow shadow=nil
|
170
219
|
@@sugarcube_view ||= nil
|
@@ -201,64 +250,110 @@ module SugarCube
|
|
201
250
|
alias h shadow
|
202
251
|
|
203
252
|
##| TREE
|
204
|
-
def tree(
|
205
|
-
unless
|
206
|
-
|
253
|
+
def tree(item=nil, selector=nil, &sel_blk)
|
254
|
+
unless item
|
255
|
+
item = UIApplication.sharedApplication.keyWindow
|
256
|
+
end
|
257
|
+
if not item
|
258
|
+
puts 'View is nil (no window, view, or controller to display)'
|
259
|
+
return
|
207
260
|
end
|
208
261
|
|
209
|
-
if
|
210
|
-
|
211
|
-
|
212
|
-
|
262
|
+
if sel_blk
|
263
|
+
if selector
|
264
|
+
raise "You can't hand me a block AND a selector. I don't know what to do with them!"
|
265
|
+
end
|
266
|
+
if sel_blk.arity != 1
|
267
|
+
raise "The block you passed should accept one and only one object"
|
268
|
+
end
|
269
|
+
selector = sel_blk
|
270
|
+
elsif ! selector
|
271
|
+
if item.is_a? UIView
|
272
|
+
selector = :subviews
|
273
|
+
elsif item.is_a? UIViewController
|
274
|
+
selector = lambda { |ctlr|
|
275
|
+
ret = Array.new ctlr.childViewControllers
|
276
|
+
if ctlr.presentedViewController && ctlr.presentedViewController.presentingViewController == ctlr
|
277
|
+
ret << ctlr.presentedViewController
|
278
|
+
end
|
279
|
+
ret
|
280
|
+
}
|
281
|
+
else
|
282
|
+
raise "Unable to determine a SugarCube::Adjust::tree selector for #{item.class.name}"
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
@@sugarcube_items = []
|
287
|
+
if self.respond_to? :draw_tree
|
288
|
+
total = draw_tree(item, selector)
|
213
289
|
else
|
214
|
-
|
215
|
-
@@sugarcube_views << view
|
290
|
+
total = SugarCube::Adjust::draw_tree(item, selector)
|
216
291
|
end
|
292
|
+
puts ''
|
293
|
+
|
294
|
+
return item
|
295
|
+
end
|
296
|
+
|
297
|
+
def draw_tree(item, selector, tab=nil, is_last=true, items_index=0)
|
298
|
+
@@sugarcube_items << item
|
217
299
|
|
218
300
|
space = ' '
|
219
|
-
if
|
220
|
-
print
|
221
|
-
elsif
|
222
|
-
print
|
223
|
-
elsif
|
301
|
+
if items_index < 10
|
302
|
+
print ' '
|
303
|
+
elsif items_index < 100
|
304
|
+
print ' '
|
305
|
+
elsif items_index > 999 # good god, man!
|
224
306
|
space = ''
|
225
307
|
end
|
226
|
-
print
|
308
|
+
print items_index.to_s + ":" + space
|
227
309
|
|
228
310
|
if tab
|
229
311
|
print tab
|
230
|
-
|
231
|
-
|
312
|
+
if is_last
|
313
|
+
print '`-- '
|
314
|
+
tab += ' '
|
315
|
+
else
|
316
|
+
print '+-- '
|
317
|
+
tab += '| '
|
318
|
+
end
|
232
319
|
else
|
233
|
-
print
|
234
|
-
tab =
|
320
|
+
print '. '
|
321
|
+
tab = ''
|
235
322
|
end
|
236
323
|
|
237
|
-
if
|
238
|
-
|
324
|
+
if self == item
|
325
|
+
print "\033[1m"
|
326
|
+
end
|
327
|
+
if item.is_a? UIView
|
328
|
+
puts item.to_s superview: false
|
239
329
|
else
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
print "\033[0m"
|
246
|
-
end
|
330
|
+
puts item.to_s
|
331
|
+
end
|
332
|
+
if self == item
|
333
|
+
print "\033[0m"
|
334
|
+
end
|
247
335
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
}
|
336
|
+
if selector.is_a? Proc
|
337
|
+
items = selector.call(item)
|
338
|
+
else
|
339
|
+
items = item.send(selector)
|
253
340
|
end
|
341
|
+
items.each_with_index { |subview, index|
|
342
|
+
items_index += 1
|
343
|
+
items_index = SugarCube::Adjust::draw_tree(subview, selector, tab, index == items.length - 1, items_index)
|
344
|
+
}
|
254
345
|
|
255
|
-
return
|
346
|
+
return items_index
|
347
|
+
end
|
348
|
+
|
349
|
+
def root
|
350
|
+
(UIApplication.sharedApplication.keyWindow || UIApplication.sharedApplication.windows[0]).rootViewController
|
256
351
|
end
|
257
352
|
|
258
353
|
##| RESTORE
|
259
354
|
def restore
|
260
355
|
@@sugarcube_view ||= nil
|
261
|
-
raise
|
356
|
+
raise 'no view has been assigned to SugarCube::Adjust::adjust' unless @@sugarcube_view
|
262
357
|
|
263
358
|
@@sugarcube_restore.each do |msg, value|
|
264
359
|
SugarCube::Adjust.send(msg, value)
|
@@ -267,9 +362,9 @@ module SugarCube
|
|
267
362
|
|
268
363
|
def format_frame(frame)
|
269
364
|
case SugarCube::Adjust::repl_format
|
270
|
-
when :json then "
|
365
|
+
when :json then "{x: #{frame.origin.x}, y: #{frame.origin.y}, width: #{frame.size.width}, height: #{frame.size.height}}"
|
271
366
|
when :ruby then "[[#{frame.origin.x}, #{frame.origin.y}], [#{frame.size.width}, #{frame.size.height}]]"
|
272
|
-
when
|
367
|
+
when :objc
|
273
368
|
frame.to_s
|
274
369
|
else
|
275
370
|
raise "Unknown repl_format #{SugarCube::Adjust::repl_format.inspect}"
|
data/lib/sugarcube/nsurl.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
class NSUserDefaults
|
2
|
+
|
3
|
+
class << self
|
4
|
+
# Retrieves the object for the passed key
|
5
|
+
def [](key)
|
6
|
+
self.standardUserDefaults.objectForKey(key.to_s)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Sets the value for a given key and save it right away.
|
10
|
+
def []=(key, val)
|
11
|
+
self.standardUserDefaults.setObject(val, forKey: key.to_s)
|
12
|
+
self.standardUserDefaults.synchronize
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/lib/sugarcube/symbol.rb
CHANGED
@@ -31,6 +31,7 @@ class Symbol
|
|
31
31
|
attr_accessor :barmetrics
|
32
32
|
attr_accessor :barbuttomitems
|
33
33
|
attr_accessor :keyboardtypes
|
34
|
+
attr_accessor :autoresizemasks
|
34
35
|
|
35
36
|
attr_accessor :textalignments
|
36
37
|
attr_accessor :linebreakmodes
|
@@ -120,6 +121,8 @@ class Symbol
|
|
120
121
|
touch_up: UIControlEventTouchUpInside,
|
121
122
|
touch_down: UIControlEventTouchDown,
|
122
123
|
change: UIControlEventValueChanged|UIControlEventEditingChanged,
|
124
|
+
begin: UIControlEventEditingDidBegin,
|
125
|
+
end: UIControlEventEditingDidEnd,
|
123
126
|
# I'm leaving this for backwards compatibility. please use 'change' or
|
124
127
|
# 'editing_did_change':
|
125
128
|
changed: UIControlEventValueChanged|UIControlEventEditingChanged,
|
@@ -291,6 +294,25 @@ class Symbol
|
|
291
294
|
email: UIKeyboardTypeEmailAddress,
|
292
295
|
}
|
293
296
|
|
297
|
+
@autoresizemasks = {
|
298
|
+
none: UIViewAutoresizingNone,
|
299
|
+
|
300
|
+
flexibleleft: UIViewAutoresizingFlexibleLeftMargin,
|
301
|
+
flexiblewidth: UIViewAutoresizingFlexibleWidth,
|
302
|
+
flexibleright: UIViewAutoresizingFlexibleRightMargin,
|
303
|
+
flexibletop: UIViewAutoresizingFlexibleTopMargin,
|
304
|
+
flexibleheight: UIViewAutoresizingFlexibleHeight,
|
305
|
+
flexiblebottom: UIViewAutoresizingFlexibleBottomMargin,
|
306
|
+
|
307
|
+
# aliases
|
308
|
+
left: UIViewAutoresizingFlexibleLeftMargin,
|
309
|
+
width: UIViewAutoresizingFlexibleWidth,
|
310
|
+
right: UIViewAutoresizingFlexibleRightMargin,
|
311
|
+
top: UIViewAutoresizingFlexibleTopMargin,
|
312
|
+
height: UIViewAutoresizingFlexibleHeight,
|
313
|
+
bottom: UIViewAutoresizingFlexibleBottomMargin,
|
314
|
+
}
|
315
|
+
|
294
316
|
private
|
295
317
|
def look_in(here)
|
296
318
|
return here[self] if here.has_key? self
|
@@ -406,6 +428,11 @@ class Symbol
|
|
406
428
|
look_in(Symbol.keyboardtypes)
|
407
429
|
end
|
408
430
|
|
431
|
+
def uiautoresize
|
432
|
+
look_in(Symbol.autoresizemasks)
|
433
|
+
end
|
434
|
+
alias uiviewautoresizing uiautoresize
|
435
|
+
|
409
436
|
def uifont(size=UIFont.systemFontSize)
|
410
437
|
# system fonts
|
411
438
|
if Symbol.system_fonts.has_key? self
|
@@ -1,8 +1,11 @@
|
|
1
1
|
class UIView
|
2
2
|
|
3
|
-
def to_s
|
4
|
-
|
5
|
-
|
3
|
+
def to_s(options={})
|
4
|
+
options[:superview] = true if options[:superview].nil?
|
5
|
+
"#{self.class.name}(##{self.object_id.to_s(16)}, #{SugarCube::Adjust::format_frame(self.frame)}" +
|
6
|
+
(options[:inner] ? ', ' + options[:inner] : '') +
|
7
|
+
')' +
|
8
|
+
(options[:superview] && self.superview ? ", child of #{self.superview.class.name}(##{self.superview.object_id.to_s(16)})" : '')
|
6
9
|
end
|
7
10
|
|
8
11
|
end
|
@@ -9,6 +9,10 @@ class UIAlertView
|
|
9
9
|
# success: proc{ |pressed| puts "pressed: #{pressed}" },
|
10
10
|
# )
|
11
11
|
def self.alert(title, options={}, &block)
|
12
|
+
if options.is_a? String
|
13
|
+
options = {message: options}
|
14
|
+
end
|
15
|
+
|
12
16
|
# create the delegate
|
13
17
|
delegate = SugarCube::AlertViewDelegate.new
|
14
18
|
delegate.on_success = options[:success] || block
|
data/lib/sugarcube/uiimage.rb
CHANGED
@@ -14,5 +14,26 @@ class UIImage
|
|
14
14
|
@uiimageview = UIImageView.alloc.initWithImage(self)
|
15
15
|
end
|
16
16
|
|
17
|
+
##|
|
18
|
+
##| REALLY HANDY STUFF!
|
19
|
+
##|
|
20
|
+
def scale_to new_size
|
21
|
+
UIGraphicsBeginImageContextWithOptions(new_size, false, 0.0)
|
22
|
+
self.drawInRect([[0, 0], new_size])
|
23
|
+
image = UIGraphicsGetImageFromCurrentImageContext()
|
24
|
+
UIGraphicsEndImageContext()
|
25
|
+
return image
|
26
|
+
end
|
27
|
+
|
28
|
+
def rounded(corner_radius=5)
|
29
|
+
UIGraphicsBeginImageContext(size)
|
30
|
+
path = UIBezierPath.bezierPathWithRoundedRect([[0, 0], size], cornerRadius:corner_radius)
|
31
|
+
path.addClip
|
32
|
+
self.drawInRect([[0, 0], size])
|
33
|
+
image = UIGraphicsGetImageFromCurrentImageContext()
|
34
|
+
|
35
|
+
UIGraphicsEndImageContext()
|
36
|
+
return image
|
37
|
+
end
|
17
38
|
|
18
39
|
end
|
@@ -1,26 +1,27 @@
|
|
1
|
-
class
|
1
|
+
class UIViewController
|
2
2
|
|
3
3
|
def push(view_controller)
|
4
|
-
self.
|
4
|
+
self.addChildViewController(view_controller)
|
5
5
|
self
|
6
6
|
end
|
7
|
+
alias << push
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
class UINavigationController
|
7
13
|
|
8
|
-
def
|
14
|
+
def push(view_controller)
|
9
15
|
self.pushViewController(view_controller, animated: true)
|
10
16
|
self
|
11
17
|
end
|
18
|
+
alias << push
|
12
19
|
|
13
20
|
def pop(to_view=nil)
|
14
|
-
return self.!(to_view) if to_view
|
15
|
-
|
16
|
-
self.popViewControllerAnimated(true)
|
17
|
-
end
|
18
|
-
|
19
|
-
def !(to_view=nil)
|
20
21
|
if to_view
|
21
22
|
self.popToViewController(to_view, animated: true)
|
22
23
|
else
|
23
|
-
self.
|
24
|
+
self.popViewControllerAnimated(true)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -29,11 +30,12 @@ end
|
|
29
30
|
|
30
31
|
class UITabBarController
|
31
32
|
|
32
|
-
def
|
33
|
+
def push(view_controller)
|
33
34
|
view_controllers = [] + self.viewControllers
|
34
35
|
view_controllers << view_controller
|
35
36
|
self.setViewControllers(view_controllers, animated: true)
|
36
37
|
self
|
37
38
|
end
|
39
|
+
alias << push
|
38
40
|
|
39
41
|
end
|
data/lib/sugarcube/version.rb
CHANGED
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.
|
4
|
+
version: '0.11'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-10-
|
13
|
+
date: 2012-10-24 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description: ! '== Description
|
16
16
|
|
@@ -60,7 +60,9 @@ files:
|
|
60
60
|
- lib/sugarcube/nsindexset.rb
|
61
61
|
- lib/sugarcube/nsstring.rb
|
62
62
|
- lib/sugarcube/nsurl.rb
|
63
|
+
- lib/sugarcube/nsuserdefaults.rb
|
63
64
|
- lib/sugarcube/numeric.rb
|
65
|
+
- lib/sugarcube/ror.rb
|
64
66
|
- lib/sugarcube/symbol.rb
|
65
67
|
- lib/sugarcube/symbol/symbol_uicolor.rb
|
66
68
|
- lib/sugarcube/timer.rb
|
@@ -68,8 +70,10 @@ files:
|
|
68
70
|
- lib/sugarcube/to_s/nsset.rb
|
69
71
|
- lib/sugarcube/to_s/uicolor.rb
|
70
72
|
- lib/sugarcube/to_s/uievent.rb
|
73
|
+
- lib/sugarcube/to_s/uilabel.rb
|
71
74
|
- lib/sugarcube/to_s/uitouch.rb
|
72
75
|
- lib/sugarcube/to_s/uiview.rb
|
76
|
+
- lib/sugarcube/to_s/uiviewcontroller.rb
|
73
77
|
- lib/sugarcube/uiactivityindicator.rb
|
74
78
|
- lib/sugarcube/uialertview.rb
|
75
79
|
- lib/sugarcube/uibutton.rb
|