sugarcube 0.10 → 0.11
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/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
|