sugarcube 1.3.5 → 1.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/README.md +21 -0
- data/lib/sugarcube-animations/uiview.rb +42 -14
- data/lib/sugarcube-constants/symbol.rb +1 -0
- data/lib/sugarcube-events/uicontrol.rb +1 -1
- data/lib/sugarcube-events/uitextview.rb +1 -1
- data/lib/sugarcube-factories/uibutton.rb +15 -9
- data/lib/sugarcube-gestures/gestures.rb +1 -1
- data/lib/sugarcube/version.rb +1 -1
- data/spec/symbol_constants_spec.rb +1 -0
- metadata +3 -3
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -71,6 +71,27 @@ Installation
|
|
71
71
|
# in terminal
|
72
72
|
$ bundle install
|
73
73
|
|
74
|
+
Memory Management
|
75
|
+
=================
|
76
|
+
|
77
|
+
There are some very convenient helper methods around touches and gestures, but
|
78
|
+
they come with an unfortunate side effect. These helpers accept a block, but
|
79
|
+
that block retains a reference to the object it was created in, which is usually
|
80
|
+
a controller.
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
# ... somewhere in a controller
|
84
|
+
button.on :touch do
|
85
|
+
# handle touch event
|
86
|
+
self.do_something! # <= the block retains 'self' so that this handler will
|
87
|
+
# work, even if the controller is released.
|
88
|
+
end
|
89
|
+
```
|
90
|
+
|
91
|
+
To fix this, you need to call `sugarcube_cleanup` when a controller is "going
|
92
|
+
away". Another option is to add/remove button/gesture callbacks when the view
|
93
|
+
appears, and remove them when it disappears.
|
94
|
+
|
74
95
|
Packages
|
75
96
|
========
|
76
97
|
|
@@ -59,10 +59,6 @@ class UIView
|
|
59
59
|
animation_options = curve | from_current
|
60
60
|
end
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
62
|
if duration == 0 && delay == 0
|
67
63
|
animations.call
|
68
64
|
after_adjusted.call(true) if after_adjusted
|
@@ -106,12 +102,12 @@ class UIView
|
|
106
102
|
|
107
103
|
def show
|
108
104
|
self.hidden = false
|
109
|
-
self
|
105
|
+
return self
|
110
106
|
end
|
111
107
|
|
112
108
|
def hide
|
113
109
|
self.hidden = true
|
114
|
-
self
|
110
|
+
return self
|
115
111
|
end
|
116
112
|
|
117
113
|
# Same as UIView##animate, but acts on self
|
@@ -129,7 +125,7 @@ class UIView
|
|
129
125
|
self.send("#{key}=", value)
|
130
126
|
end
|
131
127
|
end
|
132
|
-
self
|
128
|
+
return self
|
133
129
|
end
|
134
130
|
|
135
131
|
# Changes the layer opacity.
|
@@ -207,7 +203,7 @@ class UIView
|
|
207
203
|
position = SugarCube::CoreGraphics::Point(f.origin)
|
208
204
|
to_position = CGPoint.new(position.x + delta.x, position.y + delta.y)
|
209
205
|
move_to(to_position, options, more_options, &after)
|
210
|
-
self
|
206
|
+
return self
|
211
207
|
end
|
212
208
|
|
213
209
|
def resize_to(size, options={}, more_options={}, &after)
|
@@ -278,21 +274,21 @@ class UIView
|
|
278
274
|
|
279
275
|
case direction
|
280
276
|
when :left
|
281
|
-
size ||= self.
|
277
|
+
size ||= self.frame.size.width
|
282
278
|
delta_to([-size, 0], options, &after)
|
283
279
|
when :right
|
284
|
-
size ||= self.
|
280
|
+
size ||= self.frame.size.width
|
285
281
|
delta_to([size, 0], options, &after)
|
286
282
|
when :up
|
287
|
-
size ||= self.
|
283
|
+
size ||= self.frame.size.height
|
288
284
|
delta_to([0, -size], options, &after)
|
289
285
|
when :down
|
290
|
-
size ||= self.
|
286
|
+
size ||= self.frame.size.height
|
291
287
|
delta_to([0, size], options, &after)
|
292
288
|
else
|
293
289
|
raise "Unknown direction #{direction.inspect}"
|
294
290
|
end
|
295
|
-
self
|
291
|
+
return self
|
296
292
|
end
|
297
293
|
|
298
294
|
# Vibrates the target. You can trick this thing out to do other effects, like:
|
@@ -337,7 +333,7 @@ class UIView
|
|
337
333
|
animation.values = [origin, left, right, origin]
|
338
334
|
animation.keyTimes = [0, 0.25, 0.75, 1.0]
|
339
335
|
self.layer.addAnimation(animation, forKey:'shake')
|
340
|
-
self
|
336
|
+
return self
|
341
337
|
end
|
342
338
|
|
343
339
|
# this dummy method is needed to define the setDuration method
|
@@ -389,6 +385,38 @@ class UIView
|
|
389
385
|
end
|
390
386
|
end
|
391
387
|
|
388
|
+
# Moves the view on screen while slowly rotating it.
|
389
|
+
#
|
390
|
+
# Based on https://github.com/warrenm/AHAlertView/blob/master/AHAlertView/AHAlertView.m
|
391
|
+
def tumble_in(options={}, &after)
|
392
|
+
if options.is_a? Numeric
|
393
|
+
default_duration = options
|
394
|
+
options = {}
|
395
|
+
else
|
396
|
+
default_duration = 0.3
|
397
|
+
end
|
398
|
+
|
399
|
+
reset_transform = self.transform
|
400
|
+
reset_center = self.center
|
401
|
+
|
402
|
+
options[:duration] ||= default_duration
|
403
|
+
options[:options] ||= UIViewAnimationOptionCurveEaseOut
|
404
|
+
options[:after] = after
|
405
|
+
|
406
|
+
window = UIApplication.sharedApplication.windows[0]
|
407
|
+
top = self.convertPoint([0, 0], toView:nil).y
|
408
|
+
height = window.frame.size.height - top
|
409
|
+
offset = CGPoint.new(0, height * -1.5)
|
410
|
+
offset = CGPointApplyAffineTransform(offset, self.transform)
|
411
|
+
self.transform = CGAffineTransformConcat(self.transform, CGAffineTransformMakeRotation(Math::PI/4))
|
412
|
+
self.center = CGPointMake(self.center.x + offset.x, self.center.y + offset.y)
|
413
|
+
|
414
|
+
self.animate(options) do
|
415
|
+
self.transform = reset_transform
|
416
|
+
self.center = reset_center
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
392
420
|
# Moves the view backwards, similar to what Google has been doing a lot
|
393
421
|
# recently
|
394
422
|
def back_fiend!(options={}, more_options={})
|
@@ -5,57 +5,63 @@ class UIButton
|
|
5
5
|
end
|
6
6
|
def rounded
|
7
7
|
if self != UIButton
|
8
|
-
raise "Custom subclasses of UIButton
|
8
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
9
9
|
end
|
10
10
|
self.buttonWithType(UIButtonTypeRoundedRect)
|
11
11
|
end
|
12
12
|
def rounded_rect
|
13
13
|
if self != UIButton
|
14
|
-
raise "Custom subclasses of UIButton
|
14
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
15
15
|
end
|
16
16
|
self.buttonWithType(UIButtonTypeRoundedRect)
|
17
17
|
end
|
18
18
|
def detail
|
19
19
|
if self != UIButton
|
20
|
-
raise "Custom subclasses of UIButton
|
20
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
21
21
|
end
|
22
22
|
self.buttonWithType(UIButtonTypeDetailDisclosure)
|
23
23
|
end
|
24
24
|
def detail_disclosure
|
25
25
|
if self != UIButton
|
26
|
-
raise "Custom subclasses of UIButton
|
26
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
27
27
|
end
|
28
28
|
self.buttonWithType(UIButtonTypeDetailDisclosure)
|
29
29
|
end
|
30
30
|
def info
|
31
31
|
if self != UIButton
|
32
|
-
raise "Custom subclasses of UIButton
|
32
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
33
33
|
end
|
34
34
|
self.buttonWithType(UIButtonTypeInfoLight)
|
35
35
|
end
|
36
36
|
def info_light
|
37
37
|
if self != UIButton
|
38
|
-
raise "Custom subclasses of UIButton
|
38
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
39
39
|
end
|
40
40
|
self.buttonWithType(UIButtonTypeInfoLight)
|
41
41
|
end
|
42
42
|
def info_dark
|
43
43
|
if self != UIButton
|
44
|
-
raise "Custom subclasses of UIButton
|
44
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
45
45
|
end
|
46
46
|
self.buttonWithType(UIButtonTypeInfoDark)
|
47
47
|
end
|
48
48
|
def contact
|
49
49
|
if self != UIButton
|
50
|
-
raise "Custom subclasses of UIButton
|
50
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
51
51
|
end
|
52
52
|
self.buttonWithType(UIButtonTypeContactAdd)
|
53
53
|
end
|
54
54
|
def contact_add
|
55
55
|
if self != UIButton
|
56
|
-
raise "Custom subclasses of UIButton
|
56
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
57
57
|
end
|
58
58
|
self.buttonWithType(UIButtonTypeContactAdd)
|
59
59
|
end
|
60
|
+
def system
|
61
|
+
if self != UIButton
|
62
|
+
raise "Custom subclasses of UIButton must be created using UIButton.custom"
|
63
|
+
end
|
64
|
+
self.buttonWithType(UIButtonTypeSystem)
|
65
|
+
end
|
60
66
|
end
|
61
67
|
end
|
data/lib/sugarcube/version.rb
CHANGED
@@ -203,6 +203,7 @@ describe "Symbol - constants" do
|
|
203
203
|
:info_dark.uibuttontype.should == UIButtonTypeInfoDark
|
204
204
|
:contact.uibuttontype.should == UIButtonTypeContactAdd
|
205
205
|
:contact_add.uibuttontype.should == UIButtonTypeContactAdd
|
206
|
+
:system.uibuttontype.should == UIButtonTypeSystem
|
206
207
|
end
|
207
208
|
|
208
209
|
it 'should support `uicontrolstate`' do
|
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: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2013-
|
15
|
+
date: 2013-12-05 00:00:00.000000000 Z
|
16
16
|
dependencies: []
|
17
17
|
description: ! '== Description
|
18
18
|
|
@@ -273,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
273
273
|
version: '0'
|
274
274
|
requirements: []
|
275
275
|
rubyforge_project:
|
276
|
-
rubygems_version: 1.8.
|
276
|
+
rubygems_version: 1.8.11
|
277
277
|
signing_key:
|
278
278
|
specification_version: 3
|
279
279
|
summary: Extensions for Ruby to make Rubymotion development more enjoyable, and hopefully
|