Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
users:shilo:extensions:shswipeevent [2011/06/22 03:50]
67.181.244.12 [Changelog]
users:shilo:extensions:shswipeevent [2013/03/05 10:19] (current)
Line 1: Line 1:
 +====== SHSwipeEvent ======
 +---- dataentry extension ----
 +type            : extension
 +author_mail     : shilo86@gmail.com Shilo White
 +description     : A simple swipe event.
 +lastupdate_dt   : 2011-03-22
 +compatible      : v1.X
 +depends         : 
 +tags            : swipe, event, swipeevent
 +homepage_url    : https://gist.github.com/882536
 +download_url    : https://gist.github.com/gists/882536/download
 +sample_url      : http://shilo.coarsemode.com/sparrow/extensions/shswipeevent/SnakeSample.zip
 +min iOS version : 3.2
 +----
  
 +===== Description =====
 +SHSwipeEvent class will allow you to easily listen to swipe events inside Sparrow, it also contains extra methods to get the location and direction based on spaces that inherit SPDisplayObject.
 +
 +===== Sample =====
 +[[http://shilo.coarsemode.com/sparrow/extensions/shswipeevent/SnakeSample.zip|{{http://shilo.coarsemode.com/sparrow/extensions/shswipeevent/SnakeScreenshot.png}}]]
 +  * Project: [[http://shilo.coarsemode.com/sparrow/extensions/shswipeevent/SnakeSample.zip|Snake Game]]
 +  * Screenshot: [[http://shilo.coarsemode.com/sparrow/extensions/shswipeevent/SnakeScreenshot.png|SnakeScreenshot.png]]
 +  * Recording: [[http://shilo.coarsemode.com/sparrow/extensions/shswipeevent/SnakeRecording.mov|SnakeRecording.mov]]
 +
 +===== Example =====
 +<code objc>
 +@implementation Game
 +- (id)initWithWidth:(float)width height:(float)height {
 +        if (self = [super initWithWidth:width height:height]) {
 +         //set a container sprite in landscape
 + mContainer = [SPSprite sprite];
 + mContainer.rotation = SP_D2R(90);
 + mContainer.x = 320;
 + [self addChild:mContainer];
 +
 + //start swipe recognizer
 + [self.stage startSwipeRecognizer];
 +
 + //add a swipe event listener
 + [self addEventListener:@selector(onSwipe:) atObject:self forType:SH_EVENT_TYPE_SWIPE];
 +        }
 +        return self;
 +}
 +
 +- (void)onSwipe:(SHSwipeEvent *)event {
 +        //get the global coordinates from the start of the swipe
 + SPPoint *globalLocation = event.location;
 +
 + //get the local coordinates based on mContainer
 + SPPoint *localLocation = [event locationInSpace:mContainer];
 +
 + //get the global swipe direction
 + SHSwipeDirection globalDirection = event.direction;
 +
 + //get the local swipe direction based on mContainer
 + SHSwipeDirection localDirection = [event directionInSpace:mContainer];
 +
 + //check the local swipe direction
 + if (localDirection == SHSwipeDirectionUp) {
 + NSLog(@"swiped up");
 + } else if (localDirection == SHSwipeDirectionDown) {
 + NSLog(@"swiped down");
 + } else if (localDirection == SHSwipeDirectionLeft) {
 + NSLog(@"swiped left");
 + } else if (localDirection == SHSwipeDirectionRight) {
 + NSLog(@"swiped right");
 + }
 +}
 +
 +- (void)dealloc {
 + //stop and remove swipe recognizer
 + [self.stage stopSwipeRecognizer];
 +
 + [self removeChild:mContainer];
 + [super dealloc];
 +}
 +@end
 +</code>
 +
 +===== Instructions =====
 +==== To add into your Sparrow project ====
 +  - Download the source files here: [[https://gist.github.com/gists/882536/download]]
 +  - Open your desired Sparrow project
 +  - Drag and drop the files into the "Groups & Files" pane
 +  - Open "Game.h"
 +  - Include the extension: <code objc>#include "SHSwipeEvent.h"</code>
 +  - Save "Game.h"
 +
 +==== To add directly into Sparrow source ====
 +  - Download the source files here: [[https://gist.github.com/gists/882536/download]]
 +  - Save the files into Sparrow's "/Classes/" directory
 +    * Example: "/sparrow/src/Classes/"
 +  - Navigate back one directory and open "Sparrow.xcodeproj"
 +    * Example: "/sparrow/src/Sparrow.xcodeproj"
 +  - Inside the "Groups & Files" pane, locate the "Events" group folder
 +    * Example: "Sparrow -> Classes -> Events"
 +  - Right click the "Display" group folder and click "Add -> Existing Files.."
 +  - Navigate into the "/Classes/" directory and select "SHSwipeEvent.h" and "SHSwipeEvent.m", then click "add"
 +  - On the next window, leave all options as default and click "add"
 +  - In the "Groups & Files" pane, Open "Sparrow.h"
 +    * Example "Sparrow -> Classes -> Sparrow.h"
 +  - At the bottom of the file, add: <code objc>#import "SHSwipeEvent.h"</code>
 +  - Save "Sparrow.h"
 +  - Close "Sparrow.xcodeproj"
 +
 +===== Troubleshooting =====
 +==== Why is it not recognizing swipes? ====
 +Make sure you add this line before listening for a SPSwipeEvent:
 +<code objc>[self.stage startSwipeRecognizer];</code>
 +
 +==== Why is it not recognizing the correct swipe direction? ====
 +if you are using "directionInSpace:" method with a SPDisplayObject that has a rotation that is not in increments of 90 degrees, you won't always get an accurate direction. This is because UISwipeGestureRecognizer does not hold the exactly angle/degree of the direction. Again, this is only if you use degrees that are not: (-180, -90, 0, 90, 180, 270, ect).
 +
 +==== Why am I getting a runtime error/crash? ====
 +If you are encountering this runtime error:
 +<code objc>*** Terminating app due to uncaught exception 'NativeViewDoesNotExist', reason: 'nativeView not linked to stage yet.'</code>
 +
 +Inside your ApplicationDelegate, I suggest you link your Game class to sparrowView (SPView) BEFORE initializing your Game class, like so:
 +<code objc>
 +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 +    SP_CREATE_POOL(pool);
 + 
 +    [SPStage setSupportHighResolutions:YES];
 +    [SPAudioEngine start];
 + 
 +    Game *game = [Game alloc];
 +    sparrowView.stage = game;
 +    game = [game init];
 +    [game release];
 + 
 +    [window makeKeyAndVisible];
 +    [sparrowView start];
 + 
 +    SP_RELEASE_POOL(pool);
 + 
 +    return YES;
 +}
 +</code>
 +
 +//Warning: Although this method works fine in this situation, it might not be safe to get an instance of other Apple/Sparrow classes before initialization. The class might release and initialize a new instance of itself in the "init" method, which would make the old instance invalid.//
 +
 +You could also call "startSwipeRecognizer:" method after the initialization of your Game class to ensure that SPStage is linked to SPView.
 +
 +===== Source Code =====
 +%gist(882536)%
 +
 +===== Changelog =====
 +  * //2011-03-10:// First version
 +  * //2011-06-21:// Events now dispatch to hit display objects and bubble correctly. (Thank you odie)
 +
 +===== Todo =====
 +  * Add continuous swipe option
 
 
Powered by DokuWiki