motion-egg 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/motion_egg.rb +12 -0
- data/lib/motion_egg/egg.rb +92 -0
- data/lib/motion_egg/uiwindow.rb +38 -0
- data/lib/motion_egg/version.rb +3 -0
- metadata +63 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5a755311e092feb9bf84952946cd0f3ab3f4d657
|
4
|
+
data.tar.gz: 9e055ea10c7e4e60e77c7e67cc629a0eb18b9206
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 05f01b628880ad4f2632c75e152e8088163a7a300d30974066b269aadaee9fdb602c97fde787a11772a0b12e5d4add934397648c067e98810b3ce7404ce75464
|
7
|
+
data.tar.gz: ee96ec7fee541c74da4b5741aefccfba40ed4d24eefe352bf1ea667599f647e4b79ddea83bbe9b99cc122a9e3a5f249d56518838643d085547819b660499694a
|
data/lib/motion_egg.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "motion_egg/version"
|
2
|
+
|
3
|
+
unless defined?(Motion::Project::Config)
|
4
|
+
raise "This file must be required within a RubyMotion project Rakefile."
|
5
|
+
end
|
6
|
+
|
7
|
+
Motion::Project::App.setup do |app|
|
8
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'motion_egg/*.rb')).each do |file|
|
9
|
+
app.files.unshift(file)
|
10
|
+
end
|
11
|
+
#app.frameworks += ["Twitter", "Accounts"]
|
12
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
class Egg
|
2
|
+
attr_accessor :number_touches, :current_code
|
3
|
+
|
4
|
+
DEFAULT_TOUCHES = 1
|
5
|
+
KONAMI = [
|
6
|
+
UISwipeGestureRecognizerDirectionUp, UISwipeGestureRecognizerDirectionUp,
|
7
|
+
UISwipeGestureRecognizerDirectionDown, UISwipeGestureRecognizerDirectionDown,
|
8
|
+
UISwipeGestureRecognizerDirectionLeft, UISwipeGestureRecognizerDirectionRight,
|
9
|
+
UISwipeGestureRecognizerDirectionLeft, UISwipeGestureRecognizerDirectionRight
|
10
|
+
]
|
11
|
+
|
12
|
+
def initialize (opts = {})
|
13
|
+
@options = {secret_code: KONAMI, number_touches: DEFAULT_TOUCHES, image_file: "toasty.png"}.merge(opts)
|
14
|
+
end
|
15
|
+
|
16
|
+
def activate
|
17
|
+
#p "************* OMG THE CODEZ! *************"
|
18
|
+
insert_egg
|
19
|
+
show_egg
|
20
|
+
NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: 'hide_egg:', userInfo: nil, repeats: false)
|
21
|
+
end
|
22
|
+
|
23
|
+
def show_egg(timing = 0.5)
|
24
|
+
# Animate the egg into the view:
|
25
|
+
UIView.animateWithDuration(timing,
|
26
|
+
delay:0.0,
|
27
|
+
options:UIViewAnimationOptionCurveLinear,
|
28
|
+
animations: lambda {
|
29
|
+
@egg_view.frame = show_frame
|
30
|
+
},
|
31
|
+
completion:lambda {|finished|
|
32
|
+
}
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def hide_egg(sender)
|
37
|
+
# Animate the egg out of the view:
|
38
|
+
UIView.animateWithDuration(0.5,
|
39
|
+
delay:0.0,
|
40
|
+
options:UIViewAnimationOptionCurveLinear,
|
41
|
+
animations: lambda {
|
42
|
+
@egg_view.frame = hidden_frame
|
43
|
+
},
|
44
|
+
completion:lambda {|finished|
|
45
|
+
#consider removing egg subview here.
|
46
|
+
}
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
def insert_egg
|
51
|
+
@egg_view ||= begin
|
52
|
+
egg_view = UIImageView.alloc.initWithFrame(hidden_frame)
|
53
|
+
egg_view.contentMode = UIViewContentModeScaleAspectFit
|
54
|
+
egg_view.image = UIImage.imageNamed(@options[:image_file])
|
55
|
+
egg_view
|
56
|
+
end
|
57
|
+
|
58
|
+
# We want to add the view to the root view
|
59
|
+
UIApplication.sharedApplication.keyWindow.subviews.objectAtIndex(0).nextResponder.view.addSubview(@egg_view)
|
60
|
+
end
|
61
|
+
|
62
|
+
def add_code new_direction
|
63
|
+
@current_code ||= Array.new
|
64
|
+
@current_code.push(new_direction)
|
65
|
+
|
66
|
+
# Only keep the last @current_code.size entries
|
67
|
+
@current_code = @current_code[-@options[:secret_code].size..-1] if @current_code.size > @options[:secret_code].size
|
68
|
+
#p @current_code
|
69
|
+
activate if @options[:secret_code] == @current_code
|
70
|
+
end
|
71
|
+
|
72
|
+
def number_touches
|
73
|
+
@options[:number_touches]
|
74
|
+
end
|
75
|
+
|
76
|
+
def hidden_frame
|
77
|
+
[[0,UIScreen.mainScreen.bounds.size.height + egg_height],[egg_width, egg_height]]
|
78
|
+
end
|
79
|
+
|
80
|
+
def show_frame
|
81
|
+
[[0,UIScreen.mainScreen.bounds.size.height - egg_height],[egg_width, egg_height]]
|
82
|
+
end
|
83
|
+
|
84
|
+
def egg_height
|
85
|
+
180
|
86
|
+
end
|
87
|
+
|
88
|
+
def egg_width
|
89
|
+
UIScreen.mainScreen.bounds.size.width
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class UIWindow
|
2
|
+
|
3
|
+
def add_egg(options = {})
|
4
|
+
|
5
|
+
# Easter egg workhorse
|
6
|
+
@egg = Egg.new options
|
7
|
+
|
8
|
+
#left
|
9
|
+
@swipe_gesture_left = UISwipeGestureRecognizer.alloc.initWithTarget(self, action:"handle_swipe:")
|
10
|
+
@swipe_gesture_left.direction = UISwipeGestureRecognizerDirectionLeft
|
11
|
+
@swipe_gesture_left.numberOfTouchesRequired = @egg.number_touches
|
12
|
+
self.addGestureRecognizer(@swipe_gesture_left)
|
13
|
+
|
14
|
+
#right
|
15
|
+
@swipe_gesture_right = UISwipeGestureRecognizer.alloc.initWithTarget(self, action:"handle_swipe:")
|
16
|
+
@swipe_gesture_right.direction = UISwipeGestureRecognizerDirectionRight
|
17
|
+
@swipe_gesture_right.numberOfTouchesRequired = @egg.number_touches
|
18
|
+
self.addGestureRecognizer(@swipe_gesture_right)
|
19
|
+
|
20
|
+
#up
|
21
|
+
@swipe_gesture_up = UISwipeGestureRecognizer.alloc.initWithTarget(self, action:"handle_swipe:")
|
22
|
+
@swipe_gesture_up.direction = UISwipeGestureRecognizerDirectionUp
|
23
|
+
@swipe_gesture_up.numberOfTouchesRequired = @egg.number_touches
|
24
|
+
self.addGestureRecognizer(@swipe_gesture_up)
|
25
|
+
|
26
|
+
#down
|
27
|
+
@swipe_gesture_down = UISwipeGestureRecognizer.alloc.initWithTarget(self, action:"handle_swipe:")
|
28
|
+
@swipe_gesture_down.direction = UISwipeGestureRecognizerDirectionDown
|
29
|
+
@swipe_gesture_down.numberOfTouchesRequired = @egg.number_touches
|
30
|
+
self.addGestureRecognizer(@swipe_gesture_down)
|
31
|
+
end
|
32
|
+
|
33
|
+
# each recognizer should have a direction, but you can send them all to the same function!
|
34
|
+
def handle_swipe(sender)
|
35
|
+
@egg.add_code(sender.direction)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: motion-egg
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gant Laborde
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: motion-egg lets you perform the Konami code and get a lovely surprise
|
28
|
+
in your app
|
29
|
+
email: gant@iconoclastlabs.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/motion_egg/egg.rb
|
35
|
+
- lib/motion_egg/uiwindow.rb
|
36
|
+
- lib/motion_egg/version.rb
|
37
|
+
- lib/motion_egg.rb
|
38
|
+
homepage: https://github.com/GantMan/motion-egg
|
39
|
+
licenses:
|
40
|
+
- MIT
|
41
|
+
metadata: {}
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 2.0.3
|
59
|
+
signing_key:
|
60
|
+
specification_version: 4
|
61
|
+
summary: Automatically add an easter egg to your iOS app
|
62
|
+
test_files: []
|
63
|
+
has_rdoc:
|