sugarcube 0.16.5 → 0.16.9

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -693,7 +693,12 @@ shake offset: 8, # move 8 px left, and 8 px right
693
693
  # vigorous nodding - modifying transform.translation.y:
694
694
  view.shake offset: 20, repeat: 10, duration: 5, keypath: 'transform.translation.y'
695
695
  # an adorable wiggle - modifying transform.rotation:
696
- superview.shake offset: 0.1, repeat: 2, duration: 0.5, keypath: 'transform.rotation'
696
+ view.shake offset: 0.1, repeat: 2, duration: 0.5, keypath: 'transform.rotation'
697
+
698
+ # this was pulled off warrenm's AHAlertView project. I thought the effect was
699
+ # awesome, and deserved more attention!
700
+ # https://github.com/warrenm/AHAlertView
701
+ view.tumble # the view will fall and rotate - a good 'cancel button effect'
697
702
  ```
698
703
 
699
704
  Using the completed callback you can string animations together for a low-tech
@@ -1,4 +1,26 @@
1
1
  include SugarCube::CoreGraphics
2
2
 
3
3
  class AppDelegate
4
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
5
+ return true if RUBYMOTION_ENV == 'test'
6
+
7
+ @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
8
+ ctlr = MyController.new
9
+ @window.rootViewController = ctlr
10
+ @window.makeKeyAndVisible
11
+ end
12
+ end
13
+
14
+
15
+ class MyController < UIViewController
16
+
17
+ def loadView
18
+ super.tap do
19
+ @label = 'Hi!'.uilabel
20
+ @label.center = self.view.center
21
+ @label.textColor = :white.uicolor
22
+ self.view << @label
23
+ end
24
+ end
25
+
4
26
  end
@@ -97,9 +97,14 @@ module SugarCube
97
97
  x_or_origin = SugarCube::CoreGraphics::Point(x_or_origin) unless x_or_origin.is_a? CGPoint
98
98
  x = x_or_origin.x
99
99
  y = x_or_origin.y
100
- y_or_size = SugarCube::CoreGraphics::Size(y_or_size) unless y_or_size.is_a? CGSize
101
- w = y_or_size.width
102
- h = y_or_size.height
100
+ if y_or_size.is_a?(CGPoint)
101
+ w = y_or_size.x - x
102
+ h = y_or_size.y - y
103
+ else
104
+ y_or_size = SugarCube::CoreGraphics::Size(y_or_size)
105
+ w = y_or_size.width
106
+ h = y_or_size.height
107
+ end
103
108
  # three args
104
109
  elsif h.nil?
105
110
  if x_or_origin.is_a? Numeric
@@ -38,6 +38,19 @@ class NSString
38
38
  self.uiimage.uicolor(alpha)
39
39
  end
40
40
 
41
+ # @param font [UIFont] Optional, defaults to UIFont.systemFontOfSize(UIFont.systemFontSize)
42
+ # @return [UILabel]
43
+ def uilabel(font=nil)
44
+ font ||= :system.uifont(:label.uifontsize)
45
+ size = self.sizeWithFont(font)
46
+ UILabel.alloc.initWithFrame([[0, 0], size]).tap { |label|
47
+ label.text = self
48
+ label.font = font
49
+ # why isn't this just the default!?
50
+ label.backgroundColor = :clear.uicolor
51
+ }
52
+ end
53
+
41
54
  def escape_url
42
55
  CFURLCreateStringByAddingPercentEscapes(
43
56
  nil,
@@ -670,9 +670,9 @@ class Symbol
670
670
  end
671
671
 
672
672
  def uifontsize
673
- size = look_in(Symbol.system_fonts)
673
+ size = look_in(Symbol.font_sizes)
674
674
  if size.is_a? Symbol
675
- return UIFont.send(Symbol.font_sizes[self])
675
+ return UIFont.send(size)
676
676
  end
677
677
  return size.to_f
678
678
  end
@@ -115,7 +115,7 @@ class UIView
115
115
  options = { opacity: options }
116
116
  end
117
117
 
118
- options[:after] ||= after
118
+ options[:after] = after
119
119
 
120
120
  animate(options) {
121
121
  self.layer.opacity = options[:opacity]
@@ -169,7 +169,7 @@ class UIView
169
169
  options = { duration: options }
170
170
  end
171
171
 
172
- options[:after] ||= after
172
+ options[:after] = after
173
173
 
174
174
  animate(options) {
175
175
  f = self.frame
@@ -192,7 +192,7 @@ class UIView
192
192
  options = { angle: options }
193
193
  end
194
194
 
195
- options[:after] ||= after
195
+ options[:after] = after
196
196
 
197
197
  animate(options) {
198
198
  self.transform = CGAffineTransformMakeRotation(options[:angle])
@@ -223,6 +223,12 @@ class UIView
223
223
  self
224
224
  end
225
225
 
226
+ # Vibrates the target. You can trick this thing out to do other effects, like:
227
+ # @example
228
+ # # wiggle
229
+ # view.shake(offset: 0.1, repeat: 2, duration: 0.5, keypath: 'transform.rotation')
230
+ # # slow nodding
231
+ # view.shake(offset: 20, repeat: 10, duration: 5, keypath: 'transform.translation.y')
226
232
  def shake(options={})
227
233
  if options.is_a? Numeric
228
234
  duration = options
@@ -253,6 +259,46 @@ class UIView
253
259
  self
254
260
  end
255
261
 
262
+ # Moves the view off screen while slowly rotating it.
263
+ #
264
+ # Based on https://github.com/warrenm/AHAlertView/blob/master/AHAlertView/AHAlertView.m
265
+ def tumble(options={}, &after)
266
+ if options.is_a? Numeric
267
+ default_duration = options
268
+ options = {}
269
+ else
270
+ default_duration = 0.3
271
+ end
272
+
273
+ options[:duration] ||= default_duration
274
+ options[:options] ||= UIViewAnimationOptionCurveEaseIn
275
+ reset_transform = self.transform
276
+ reset_after = ->(finished) {
277
+ self.transform = reset_transform
278
+ }
279
+
280
+ if after
281
+ options[:after] = ->(finished) {
282
+ reset_after.call(finished)
283
+
284
+ if after.arity == 0
285
+ after.call
286
+ else
287
+ after.call(finished)
288
+ end
289
+ }
290
+ else
291
+ options[:after] = reset_after
292
+ end
293
+
294
+ self.animate(options) {
295
+ offset = CGPoint.new(0, self.superview.bounds.size.height * 1.5)
296
+ offset = CGPointApplyAffineTransform(offset, self.transform)
297
+ self.transform = CGAffineTransformConcat(self.transform, CGAffineTransformMakeRotation(-Math::PI/4))
298
+ self.center = CGPointMake(self.center.x + offset.x, self.center.y + offset.y)
299
+ }
300
+ end
301
+
256
302
  # Easily take a snapshot of a UIView
257
303
  def uiimage
258
304
  scale = UIScreen.mainScreen.scale
@@ -1,3 +1,3 @@
1
1
  module SugarCube
2
- Version = '0.16.5'
2
+ Version = '0.16.9'
3
3
  end
@@ -135,7 +135,7 @@ describe "SugarCube::CoreGraphics" do
135
135
  CGRectEqualToRect(r, CGRect.new([array[0], array[1]], [array[2], array[3]])).should == true
136
136
  end
137
137
 
138
- it 'should accept 2 arguments (CGPoint, CGSize)' do
138
+ it 'should accept 2 arguments: (CGPoint, CGSize)' do
139
139
  args = [CGPoint.new(1, 2), CGSize.new(3, 4)]
140
140
  r = Rect(*args)
141
141
  r.origin.x.should == 1
@@ -145,14 +145,14 @@ describe "SugarCube::CoreGraphics" do
145
145
  CGRectEqualToRect(r, CGRect.new(args[0], args[1])).should == true
146
146
  end
147
147
 
148
- it 'should accept 2 arguments: (CGPoint, CGSize)' do
149
- args = [CGPoint.new(1, 2), CGSize.new(3, 4)]
148
+ it 'should accept 2 arguments: (CGPoint, CGPoint)' do
149
+ args = [CGPoint.new(1, 2), CGPoint.new(3, 4)]
150
150
  r = Rect(*args)
151
151
  r.origin.x.should == 1
152
152
  r.origin.y.should == 2
153
- r.size.width.should == 3
154
- r.size.height.should == 4
155
- CGRectEqualToRect(r, CGRect.new(args[0], args[1])).should == true
153
+ r.size.width.should == 2
154
+ r.size.height.should == 2
155
+ CGRectEqualToRect(r, CGRect.new(args[0], [2, 2])).should == true
156
156
  end
157
157
 
158
158
  it 'should accept 3 arguments: ([x, y], w, h)' do
@@ -48,6 +48,26 @@ describe "NSString" do
48
48
  ((color.blue * 2).round / 2.0).should == 0.5
49
49
  end
50
50
 
51
+ it "should have a #uilabel method" do
52
+ str = 'test'
53
+ str_size = str.sizeWithFont(UIFont.systemFontOfSize(UIFont.labelFontSize))
54
+ label = str.uilabel
55
+ label.size.width == str_size.width
56
+ label.size.height == str_size.height
57
+ label.backgroundColor == UIColor.clearColor
58
+ end
59
+
60
+ it "should have a #uilabel(font) method" do
61
+ str = 'test'
62
+ font = UIFont.boldSystemFontOfSize(20)
63
+ str_size = str.sizeWithFont(font)
64
+ label = str.uilabel(font)
65
+ label.font.should == font
66
+ label.size.width == str_size.width
67
+ label.size.height == str_size.height
68
+ label.backgroundColor == UIColor.clearColor
69
+ end
70
+
51
71
  it "should have a #escape_url method" do
52
72
  ' '.escape_url.should == '%20'
53
73
  '?<>&=;%'.escape_url.should == '%3F%3C%3E%26%3D%3B%25'
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.16.5
4
+ version: 0.16.9
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-02-08 00:00:00.000000000 Z
16
+ date: 2013-02-12 00:00:00.000000000 Z
17
17
  dependencies: []
18
18
  description: ! '== Description
19
19