From ba950f4635ed466a47fb4b36ab559356a3c0deb2 Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Sun, 8 Sep 2013 21:03:42 +0200 Subject: [PATCH] Initial NGRotationGestureRecognizer demo project. --- OneFingerRotation.xcodeproj/project.pbxproj | 319 ++++++++++++++++++ OneFingerRotation/AppDelegate.h | 15 + OneFingerRotation/AppDelegate.m | 50 +++ OneFingerRotation/Default-568h@2x.png | Bin 0 -> 18594 bytes OneFingerRotation/Default.png | Bin 0 -> 6540 bytes OneFingerRotation/Default@2x.png | Bin 0 -> 16107 bytes .../NGRotationGestureRecognizer.h | 40 +++ .../NGRotationGestureRecognizer.m | 168 +++++++++ .../OneFingerRotation-Info.plist | 43 +++ .../OneFingerRotation-Prefix.pch | 14 + .../RotationGestureRecognizerViewController.h | 13 + .../RotationGestureRecognizerViewController.m | 44 +++ ...otationGestureRecognizerViewController.xib | 185 ++++++++++ OneFingerRotation/colorwheel.png | Bin 0 -> 63779 bytes OneFingerRotation/en.lproj/InfoPlist.strings | 2 + OneFingerRotation/main.m | 18 + 16 files changed, 911 insertions(+) create mode 100644 OneFingerRotation.xcodeproj/project.pbxproj create mode 100644 OneFingerRotation/AppDelegate.h create mode 100644 OneFingerRotation/AppDelegate.m create mode 100644 OneFingerRotation/Default-568h@2x.png create mode 100644 OneFingerRotation/Default.png create mode 100644 OneFingerRotation/Default@2x.png create mode 100644 OneFingerRotation/NGRotationGestureRecognizer/NGRotationGestureRecognizer.h create mode 100644 OneFingerRotation/NGRotationGestureRecognizer/NGRotationGestureRecognizer.m create mode 100644 OneFingerRotation/OneFingerRotation-Info.plist create mode 100644 OneFingerRotation/OneFingerRotation-Prefix.pch create mode 100644 OneFingerRotation/RotationGestureRecognizerViewController.h create mode 100644 OneFingerRotation/RotationGestureRecognizerViewController.m create mode 100644 OneFingerRotation/RotationGestureRecognizerViewController.xib create mode 100644 OneFingerRotation/colorwheel.png create mode 100644 OneFingerRotation/en.lproj/InfoPlist.strings create mode 100644 OneFingerRotation/main.m diff --git a/OneFingerRotation.xcodeproj/project.pbxproj b/OneFingerRotation.xcodeproj/project.pbxproj new file mode 100644 index 0000000..7dc91b9 --- /dev/null +++ b/OneFingerRotation.xcodeproj/project.pbxproj @@ -0,0 +1,319 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 2E06CF4017DCFED600E4F3ED /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E06CF3F17DCFED600E4F3ED /* UIKit.framework */; }; + 2E06CF4217DCFED600E4F3ED /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E06CF4117DCFED600E4F3ED /* Foundation.framework */; }; + 2E06CF4417DCFED600E4F3ED /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E06CF4317DCFED600E4F3ED /* CoreGraphics.framework */; }; + 2E06CF4A17DCFED600E4F3ED /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2E06CF4817DCFED600E4F3ED /* InfoPlist.strings */; }; + 2E06CF4C17DCFED600E4F3ED /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E06CF4B17DCFED600E4F3ED /* main.m */; }; + 2E06CF5017DCFED600E4F3ED /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E06CF4F17DCFED600E4F3ED /* AppDelegate.m */; }; + 2E06CF5217DCFED600E4F3ED /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 2E06CF5117DCFED600E4F3ED /* Default.png */; }; + 2E06CF5417DCFED600E4F3ED /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2E06CF5317DCFED600E4F3ED /* Default@2x.png */; }; + 2E06CF5617DCFED600E4F3ED /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2E06CF5517DCFED600E4F3ED /* Default-568h@2x.png */; }; + 2E06CF6317DCFF5C00E4F3ED /* NGRotationGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E06CF6217DCFF5C00E4F3ED /* NGRotationGestureRecognizer.m */; }; + 2E06CF6717DCFFB300E4F3ED /* RotationGestureRecognizerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E06CF6517DCFFB300E4F3ED /* RotationGestureRecognizerViewController.m */; }; + 2E06CF6817DCFFB300E4F3ED /* RotationGestureRecognizerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2E06CF6617DCFFB300E4F3ED /* RotationGestureRecognizerViewController.xib */; }; + 2E06CF6A17DD010600E4F3ED /* colorwheel.png in Resources */ = {isa = PBXBuildFile; fileRef = 2E06CF6917DD010600E4F3ED /* colorwheel.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 2E06CF3C17DCFED600E4F3ED /* OneFingerRotation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OneFingerRotation.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 2E06CF3F17DCFED600E4F3ED /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 2E06CF4117DCFED600E4F3ED /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 2E06CF4317DCFED600E4F3ED /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 2E06CF4717DCFED600E4F3ED /* OneFingerRotation-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "OneFingerRotation-Info.plist"; sourceTree = ""; }; + 2E06CF4917DCFED600E4F3ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 2E06CF4B17DCFED600E4F3ED /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 2E06CF4D17DCFED600E4F3ED /* OneFingerRotation-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OneFingerRotation-Prefix.pch"; sourceTree = ""; }; + 2E06CF4E17DCFED600E4F3ED /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 2E06CF4F17DCFED600E4F3ED /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 2E06CF5117DCFED600E4F3ED /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; + 2E06CF5317DCFED600E4F3ED /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; + 2E06CF5517DCFED600E4F3ED /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + 2E06CF6117DCFF5C00E4F3ED /* NGRotationGestureRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NGRotationGestureRecognizer.h; sourceTree = ""; }; + 2E06CF6217DCFF5C00E4F3ED /* NGRotationGestureRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NGRotationGestureRecognizer.m; sourceTree = ""; }; + 2E06CF6417DCFFB300E4F3ED /* RotationGestureRecognizerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RotationGestureRecognizerViewController.h; sourceTree = ""; }; + 2E06CF6517DCFFB300E4F3ED /* RotationGestureRecognizerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RotationGestureRecognizerViewController.m; sourceTree = ""; }; + 2E06CF6617DCFFB300E4F3ED /* RotationGestureRecognizerViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RotationGestureRecognizerViewController.xib; sourceTree = ""; }; + 2E06CF6917DD010600E4F3ED /* colorwheel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = colorwheel.png; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2E06CF3917DCFED600E4F3ED /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2E06CF4017DCFED600E4F3ED /* UIKit.framework in Frameworks */, + 2E06CF4217DCFED600E4F3ED /* Foundation.framework in Frameworks */, + 2E06CF4417DCFED600E4F3ED /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2E06CF3317DCFED600E4F3ED = { + isa = PBXGroup; + children = ( + 2E06CF4517DCFED600E4F3ED /* OneFingerRotation */, + 2E06CF3E17DCFED600E4F3ED /* Frameworks */, + 2E06CF3D17DCFED600E4F3ED /* Products */, + ); + sourceTree = ""; + }; + 2E06CF3D17DCFED600E4F3ED /* Products */ = { + isa = PBXGroup; + children = ( + 2E06CF3C17DCFED600E4F3ED /* OneFingerRotation.app */, + ); + name = Products; + sourceTree = ""; + }; + 2E06CF3E17DCFED600E4F3ED /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2E06CF3F17DCFED600E4F3ED /* UIKit.framework */, + 2E06CF4117DCFED600E4F3ED /* Foundation.framework */, + 2E06CF4317DCFED600E4F3ED /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 2E06CF4517DCFED600E4F3ED /* OneFingerRotation */ = { + isa = PBXGroup; + children = ( + 2E06CF6017DCFF5C00E4F3ED /* NGRotationGestureRecognizer */, + 2E06CF4E17DCFED600E4F3ED /* AppDelegate.h */, + 2E06CF4F17DCFED600E4F3ED /* AppDelegate.m */, + 2E06CF6417DCFFB300E4F3ED /* RotationGestureRecognizerViewController.h */, + 2E06CF6517DCFFB300E4F3ED /* RotationGestureRecognizerViewController.m */, + 2E06CF6617DCFFB300E4F3ED /* RotationGestureRecognizerViewController.xib */, + 2E06CF4617DCFED600E4F3ED /* Supporting Files */, + ); + path = OneFingerRotation; + sourceTree = ""; + }; + 2E06CF4617DCFED600E4F3ED /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 2E06CF6917DD010600E4F3ED /* colorwheel.png */, + 2E06CF4717DCFED600E4F3ED /* OneFingerRotation-Info.plist */, + 2E06CF4817DCFED600E4F3ED /* InfoPlist.strings */, + 2E06CF4B17DCFED600E4F3ED /* main.m */, + 2E06CF4D17DCFED600E4F3ED /* OneFingerRotation-Prefix.pch */, + 2E06CF5117DCFED600E4F3ED /* Default.png */, + 2E06CF5317DCFED600E4F3ED /* Default@2x.png */, + 2E06CF5517DCFED600E4F3ED /* Default-568h@2x.png */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 2E06CF6017DCFF5C00E4F3ED /* NGRotationGestureRecognizer */ = { + isa = PBXGroup; + children = ( + 2E06CF6117DCFF5C00E4F3ED /* NGRotationGestureRecognizer.h */, + 2E06CF6217DCFF5C00E4F3ED /* NGRotationGestureRecognizer.m */, + ); + path = NGRotationGestureRecognizer; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2E06CF3B17DCFED600E4F3ED /* OneFingerRotation */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2E06CF5917DCFED600E4F3ED /* Build configuration list for PBXNativeTarget "OneFingerRotation" */; + buildPhases = ( + 2E06CF3817DCFED600E4F3ED /* Sources */, + 2E06CF3917DCFED600E4F3ED /* Frameworks */, + 2E06CF3A17DCFED600E4F3ED /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = OneFingerRotation; + productName = OneFingerRotation; + productReference = 2E06CF3C17DCFED600E4F3ED /* OneFingerRotation.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2E06CF3417DCFED600E4F3ED /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0460; + }; + buildConfigurationList = 2E06CF3717DCFED600E4F3ED /* Build configuration list for PBXProject "OneFingerRotation" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 2E06CF3317DCFED600E4F3ED; + productRefGroup = 2E06CF3D17DCFED600E4F3ED /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2E06CF3B17DCFED600E4F3ED /* OneFingerRotation */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2E06CF3A17DCFED600E4F3ED /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2E06CF4A17DCFED600E4F3ED /* InfoPlist.strings in Resources */, + 2E06CF5217DCFED600E4F3ED /* Default.png in Resources */, + 2E06CF5417DCFED600E4F3ED /* Default@2x.png in Resources */, + 2E06CF5617DCFED600E4F3ED /* Default-568h@2x.png in Resources */, + 2E06CF6817DCFFB300E4F3ED /* RotationGestureRecognizerViewController.xib in Resources */, + 2E06CF6A17DD010600E4F3ED /* colorwheel.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2E06CF3817DCFED600E4F3ED /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2E06CF4C17DCFED600E4F3ED /* main.m in Sources */, + 2E06CF5017DCFED600E4F3ED /* AppDelegate.m in Sources */, + 2E06CF6317DCFF5C00E4F3ED /* NGRotationGestureRecognizer.m in Sources */, + 2E06CF6717DCFFB300E4F3ED /* RotationGestureRecognizerViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 2E06CF4817DCFED600E4F3ED /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 2E06CF4917DCFED600E4F3ED /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 2E06CF5717DCFED600E4F3ED /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 2; + }; + name = Debug; + }; + 2E06CF5817DCFED600E4F3ED /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = 2; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2E06CF5A17DCFED600E4F3ED /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "OneFingerRotation/OneFingerRotation-Prefix.pch"; + INFOPLIST_FILE = "OneFingerRotation/OneFingerRotation-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = 1; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 2E06CF5B17DCFED600E4F3ED /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "OneFingerRotation/OneFingerRotation-Prefix.pch"; + INFOPLIST_FILE = "OneFingerRotation/OneFingerRotation-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = 1; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2E06CF3717DCFED600E4F3ED /* Build configuration list for PBXProject "OneFingerRotation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2E06CF5717DCFED600E4F3ED /* Debug */, + 2E06CF5817DCFED600E4F3ED /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2E06CF5917DCFED600E4F3ED /* Build configuration list for PBXNativeTarget "OneFingerRotation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2E06CF5A17DCFED600E4F3ED /* Debug */, + 2E06CF5B17DCFED600E4F3ED /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2E06CF3417DCFED600E4F3ED /* Project object */; +} diff --git a/OneFingerRotation/AppDelegate.h b/OneFingerRotation/AppDelegate.h new file mode 100644 index 0000000..597f7b4 --- /dev/null +++ b/OneFingerRotation/AppDelegate.h @@ -0,0 +1,15 @@ +// +// AppDelegate.h +// OneFingerRotation +// +// Created by Wojtek Nagrodzki on 08/09/2013. +// +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@end diff --git a/OneFingerRotation/AppDelegate.m b/OneFingerRotation/AppDelegate.m new file mode 100644 index 0000000..2b7e0e8 --- /dev/null +++ b/OneFingerRotation/AppDelegate.m @@ -0,0 +1,50 @@ +// +// AppDelegate.m +// OneFingerRotation +// +// Created by Wojtek Nagrodzki on 08/09/2013. +// +// + +#import "AppDelegate.h" +#import "RotationGestureRecognizerViewController.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + // Override point for customization after application launch. + self.window.rootViewController = [[RotationGestureRecognizerViewController alloc] init]; + [self.window makeKeyAndVisible]; + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application +{ + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application +{ + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git a/OneFingerRotation/Default-568h@2x.png b/OneFingerRotation/Default-568h@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0891b7aabfcf3422423b109c8beed2bab838c607 GIT binary patch literal 18594 zcmeI4X;f257Jx&9fS`ixvS;&$x8J@slQFSel)6zJN=?13FB7H(lQjRkSy8x_-S~tvu2gzn1oS+dLcF#eqtq$ z%tf9TTvX?`)R@}3uBI;jzS-=ZR-Td&MHaS&;!0?Ni*#$#`n*~CcQK)Q9vAQ~TUpnI!j)a2biYK^R)M~A5wUDZhx?ULMX z3x1P&qt=trOY6P2U67L=m=U?F|5#Uj(eCueNTZaHs_ceWiHeET+j+tp3Jt9g(ekqP z2WOvfR{qV+9r+o4J5?qK>7;;^+I7tGv-i)es$X_D=EoKF+S?zsyj^oRFElP}c}JT< zd8SUs-?O?}2YD#ngKbnHgzHBcboxK_2r9l(?eNCl-pEzkJm}fY?WC*jnS?VBE4EpY zO$fEejz6fU;W2Kl>JeQBZBl-%Irg`obSlg*@4QB;Dd1H7^Oi5wvt4d{RZ!8Og?^aE z)k0$1g+V3fd(gdQ3d&q2q-FL*uy#}|bc^=VhFsl0jBgUGJ+-s3U8MK9A!YJJMxpci z5hJ%|{DwV48fZn0{n5l$N_KcSb#NKE4plB`9I6Zt=Z!~-zw0{9tg$L&Ju1F0X)Cy8 zKF;(&lJ>x)Jw(=;p~sF(Sd9VWGwFE2rnyS9!f^DZ8+aCLq zQ};>lcJ1GDLqjm6Hd>|Eabno@P`~Bn(~6^aD_#yoEH(a?Nm1S<;S+hSxI5d16^<1lEM3NPFi zkqPrpL)+ zgnseFikg`gJVBha1&7C4;O6>h=dt~`ND+;Zd?W(4v2JIb7Pt>Td42%M-Ju-XAH#Pns762L}K3 zDhvsRqN0Ni(1UrishD2YvV?4*h2iFj$+&N||Fn$4n|^NSU+o?~jq`0jVQt8T9l{7b zXiwwODFh2V!Q6sqP9S>WH$oOf$N~=d0-bqTlD61!=`&0eAP-F>XN?*|gtOXX{ zQVTWyYo4ZK0GAw!GHf|pz9`D;-bbb*5LBX*{bnz|+)$@&P9|ORM2o?95{;ejvo&r- zq8cBhTN6nn)7~W>54U)%-F_-b?YKdfk5I8MHcuzBD5)!;yv#Z&R&^y=@=>VTIMy#r zX&U<=BsPkdqcMe<_}2+>H%XKyrr5ZR8_KVe>ZqYN z^=^~TFD};;rHJ$U;{~w^hYojl4hRI@SH$^K{YEo=sg)WY87r!*7blQK&qnpDo0`Vn zkl)9u9g=mCh&ZCJS(L4yN3k0kQ zuvg$h2KEEk51T+O0JQ+r0`R>g{jvqM0Mr6d3qUOZwE!?PI7HY@CE|dr sfw?Q;rAv?G4&^^8-z_>&sWXMxvD*gPOU4CBe-*@OtE+wfmVJNyHv)PfH~;_u literal 0 HcmV?d00001 diff --git a/OneFingerRotation/Default.png b/OneFingerRotation/Default.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8ca6f693f96d511e9113c0eb59eec552354e42 GIT binary patch literal 6540 zcmeAS@N?(olHy`uVBq!ia0y~yU~~ZD2OMlbkt;o0To@QwR5G2N13aCb6#|O#(=u~X z85k@CTSM>X-wqM6>&y>YB4)1;;ojbLbbV-W^iFB1wa3^zCog^LCAReC4K0-?R_2{6 zrP*)4+_uWUy3w5N52M3PW_}MFMP9a~>YLvVZ1D_k*IMQ2QT^fwzoOb(*3gH$%aYWC zkHmcab=va2<#X%jakpJ;<1@F;k__#bwtC&%^D0v(FBh9K&$sK+<}2RJS609D)17$w ztdQP8(eLM8Ka}m_IQ@3wyMKP)l=oM4-?`YS_*P?4V_ORLPxsj&7Ju#kH;>6^Kp?T7~ zl+q?{UOOqV==?+d{=)5s|M~T1mwtH@+Z^$G&eEO9JNP^AX@3jZ*J*!!>lc|1-W%fA z@AOQpXZ_Lt>rxFXrGp*zLPiW@uo_c7C{As>j zWeX)wi+LTp_)@KYZCX{j;H?|1yXT4DnlS(Fr8gyP5|uaX_gLvaW0ScZdnG7o+u{T6 zFI-%d{ls*WuCDa5UJ@|RXv&ejZe}*BMkiWY51&pnRPw(hlykSzvj6e%mYz-GdvzBD zF10?szF_~!jS=?2HyQuPCvARXAe}C}WP|yQ*>5~~=*Nxq8+HHW1~FMDRCP^TcacKuk$ z(U#REVv)D!PhJ*ecH-ELFUrfyV&*)Z)>UCOuS?yd^L@Afk>ihynYPc{^CRwu+JHX+#$@YsC4c|l0tGigsn@jy) zXD($Ouk>H+V(Mr6NQT0S9BFM~V6nkj;1OBOz`zY;a|<&v%$g$sEJPk;hD4M^`1)8S z=jZArrsOB3>Q&?x097+E*i={nnYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&U 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 literal 0 HcmV?d00001 diff --git a/OneFingerRotation/NGRotationGestureRecognizer/NGRotationGestureRecognizer.h b/OneFingerRotation/NGRotationGestureRecognizer/NGRotationGestureRecognizer.h new file mode 100644 index 0000000..ce124d9 --- /dev/null +++ b/OneFingerRotation/NGRotationGestureRecognizer/NGRotationGestureRecognizer.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2013 Wojciech Nagrodzki + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#import + +/** + * Uses one finger to calculate rotation. Center of rotation in center point of the view + */ +@interface NGRotationGestureRecognizer : UIGestureRecognizer + +/** + * Changes from 0 to 2PI + */ +@property (assign, nonatomic) CGFloat rotation; + +/** + * Angular velocity in radians per second. + */ +@property (assign, nonatomic, readonly) CGFloat velocity; + +@end diff --git a/OneFingerRotation/NGRotationGestureRecognizer/NGRotationGestureRecognizer.m b/OneFingerRotation/NGRotationGestureRecognizer/NGRotationGestureRecognizer.m new file mode 100644 index 0000000..38bca49 --- /dev/null +++ b/OneFingerRotation/NGRotationGestureRecognizer/NGRotationGestureRecognizer.m @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2013 Wojciech Nagrodzki + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#import "NGRotationGestureRecognizer.h" +#import + + +static CGFloat kMinimumAngle = 0.02; + + +CGPoint CGRectGetMidPoint(CGRect rect) +{ + return CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); +} + + +@interface NGRotationGestureRecognizer () + +@property (strong, nonatomic) UITouch * trackedTouch; +@property (assign, nonatomic) CGPoint initialTouchLocation; +@property (assign, nonatomic) CGPoint currentTouchLocation; +@property (assign, nonatomic) NSTimeInterval previousTimeStamp; + +@end + + +@implementation NGRotationGestureRecognizer + +#pragma mark - Public Properties + +- (void)setRotation:(CGFloat)rotation +{ + _rotation = rotation; + [self adjustInitialTouchLocationToMatchRotation:rotation]; +} + +#pragma mark - Overriden + +- (void)reset +{ + self.trackedTouch = nil; +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + // if a touch is beeing tracked, we ignore all other touches + if (self.trackedTouch != nil) { + for (UITouch * touch in touches) { + [self ignoreTouch:touch forEvent:event]; + } + return; + } + + // gesture fails if more then one finger touched the screen at once + if ([event touchesForGestureRecognizer:self].count > 1) { + self.state = UIGestureRecognizerStateFailed; + return; + } + + self.trackedTouch = [touches anyObject]; + self.previousTimeStamp = self.trackedTouch.timestamp; + self.currentTouchLocation = [self.trackedTouch locationInView:[self referenceView]]; + self.rotation = 0; +} + +- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event +{ + self.currentTouchLocation = [self.trackedTouch locationInView:[self referenceView]]; + + CGPoint centerOfRotation = [self centerOfRotationInReferenceView]; + + CGFloat initialVectorAngle = [self angleForVectorWithStartPoint:centerOfRotation endPoint:self.initialTouchLocation]; + CGFloat currentVectorAngle = [self angleForVectorWithStartPoint:centerOfRotation endPoint:self.currentTouchLocation]; + + CGFloat currentRotation = currentVectorAngle - initialVectorAngle; + CGFloat deltaRotation = currentRotation - self.rotation; + + // fix delta rotation + if (deltaRotation > M_PI) + deltaRotation -= 2 * M_PI; + else if (deltaRotation < -M_PI) + deltaRotation += 2 * M_PI; + + NSTimeInterval currentTimeStamp = self.trackedTouch.timestamp; + CGFloat deltaTime = currentTimeStamp - self.previousTimeStamp; + self.previousTimeStamp = currentTimeStamp; + + if (self.state == UIGestureRecognizerStatePossible) { + if (fabsf(deltaRotation) < kMinimumAngle) + return; + + _rotation = currentRotation; + _velocity = deltaRotation / deltaTime; + self.state = UIGestureRecognizerStateBegan; + return; + } + + _rotation = currentRotation; + _velocity = deltaRotation / deltaTime; + self.state = UIGestureRecognizerStateChanged; +} + +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event +{ + if (self.state == UIGestureRecognizerStateChanged) + self.state = UIGestureRecognizerStateEnded; + else + self.state = UIGestureRecognizerStateFailed; +} + +- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event +{ + self.state = UIGestureRecognizerStateCancelled; +} + +#pragma mark - Private Methods + +- (CGPoint)centerOfRotationInReferenceView +{ + CGPoint centerOfRotation = CGRectGetMidPoint(self.view.bounds); + return [self.view convertPoint:centerOfRotation toView:[self referenceView]]; +} + +- (UIView *)referenceView +{ + return self.view.superview; +} + +- (float)angleForVectorWithStartPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint +{ + CGFloat componentX = endPoint.x - startPoint.x; + CGFloat componentY = endPoint.y - startPoint.y; + CGFloat angle = atan2f(componentY, componentX); + if (angle < 0) + angle += 2 * M_PI; + + return angle; +} + +- (void)adjustInitialTouchLocationToMatchRotation:(CGFloat)rotation +{ + CGPoint centerOfRotation = [self centerOfRotationInReferenceView]; + CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(centerOfRotation.x, centerOfRotation.y); + CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(-rotation); + CGAffineTransform customRotation = CGAffineTransformConcat(CGAffineTransformConcat( CGAffineTransformInvert(translateTransform), rotationTransform), translateTransform); + self.initialTouchLocation = CGPointApplyAffineTransform(self.currentTouchLocation, customRotation); +} + +@end diff --git a/OneFingerRotation/OneFingerRotation-Info.plist b/OneFingerRotation/OneFingerRotation-Info.plist new file mode 100644 index 0000000..dcacff8 --- /dev/null +++ b/OneFingerRotation/OneFingerRotation-Info.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + izydor86.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/OneFingerRotation/OneFingerRotation-Prefix.pch b/OneFingerRotation/OneFingerRotation-Prefix.pch new file mode 100644 index 0000000..af39e22 --- /dev/null +++ b/OneFingerRotation/OneFingerRotation-Prefix.pch @@ -0,0 +1,14 @@ +// +// Prefix header for all source files of the 'OneFingerRotation' target in the 'OneFingerRotation' project +// + +#import + +#ifndef __IPHONE_3_0 +#warning "This project uses features only available in iOS SDK 3.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/OneFingerRotation/RotationGestureRecognizerViewController.h b/OneFingerRotation/RotationGestureRecognizerViewController.h new file mode 100644 index 0000000..d65247e --- /dev/null +++ b/OneFingerRotation/RotationGestureRecognizerViewController.h @@ -0,0 +1,13 @@ +// +// RotationGestureRecognizerViewController.h +// RotateView +// +// Created by Wojtek Nagrodzki on 29/08/2013. +// Copyright (c) 2013 Wojtek Nagrodzki. All rights reserved. +// + +#import + +@interface RotationGestureRecognizerViewController : UIViewController + +@end diff --git a/OneFingerRotation/RotationGestureRecognizerViewController.m b/OneFingerRotation/RotationGestureRecognizerViewController.m new file mode 100644 index 0000000..5943a16 --- /dev/null +++ b/OneFingerRotation/RotationGestureRecognizerViewController.m @@ -0,0 +1,44 @@ +// +// RotationGestureRecognizerViewController.m +// RotateView +// +// Created by Wojtek Nagrodzki on 29/08/2013. +// Copyright (c) 2013 Wojtek Nagrodzki. All rights reserved. +// + +#import "RotationGestureRecognizerViewController.h" +#import "NGRotationGestureRecognizer.h" + +@interface RotationGestureRecognizerViewController () + +@property (weak, nonatomic) IBOutlet UIImageView *twirlImageView; + +@end + +@implementation RotationGestureRecognizerViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + NGRotationGestureRecognizer * gestureRecognizer = [[NGRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotationGesture:)]; + [self.twirlImageView addGestureRecognizer:gestureRecognizer]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + self.twirlImageView.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds)); +} + +- (void)handleRotationGesture:(NGRotationGestureRecognizer *)gestureRecognizer +{ + if (gestureRecognizer.state == UIGestureRecognizerStateBegan) { + gestureRecognizer.rotation = atan2(self.twirlImageView.transform.b, self.twirlImageView.transform.a); + return; + } + else if (gestureRecognizer.state == UIGestureRecognizerStateChanged) { + self.twirlImageView.transform = CGAffineTransformMakeRotation(gestureRecognizer.rotation); + } +} + +@end diff --git a/OneFingerRotation/RotationGestureRecognizerViewController.xib b/OneFingerRotation/RotationGestureRecognizerViewController.xib new file mode 100644 index 0000000..37c5475 --- /dev/null +++ b/OneFingerRotation/RotationGestureRecognizerViewController.xib @@ -0,0 +1,185 @@ + + + + 1552 + 12E55 + 3084 + 1187.39 + 626.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 2083 + + + IBProxyObject + IBUIImageView + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 256 + {{60, 60}, {200, 200}} + + + + NO + YES + 4 + YES + IBCocoaTouchFramework + + NSImage + colorwheel.png + + + + {{0, 20}, {320, 548}} + + + + + 3 + MC42NjY2NjY2NjY3AA + + + + IBUIScreenMetrics + + YES + + + + + + {320, 568} + {568, 320} + + + IBCocoaTouchFramework + Retina 4 Full Screen + 2 + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + twirlImageView + + + + 9 + + + + + + 0 + + + + + + 1 + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + + + RotationGestureRecognizerViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 9 + + + + + RotationGestureRecognizerViewController + UIViewController + + twirlImageView + UIImageView + + + twirlImageView + + twirlImageView + UIImageView + + + + IBProjectSource + ./Classes/RotationGestureRecognizerViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + + colorwheel.png + {200, 200} + + 2083 + + diff --git a/OneFingerRotation/colorwheel.png b/OneFingerRotation/colorwheel.png new file mode 100644 index 0000000000000000000000000000000000000000..86d516a225b6986b05e7937786135759071fa3c4 GIT binary patch literal 63779 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 B6u}O2tXp1+~}Cmf$S-?Q9+TXGiRe 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 + +#import "AppDelegate.h" + +int main(int argc, char *argv[]) +{ + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +}