From 21aba068be490678edb2820442da468c519d2b0d Mon Sep 17 00:00:00 2001 From: Sameh Date: Tue, 27 Oct 2015 02:25:29 +0200 Subject: [PATCH] Swift 2 updated Updated Panoramic control to be compatible with Swift 2. --- Panoramic/Panoramic.xcodeproj/project.pbxproj | 237 +++++++++--------- .../xcshareddata/Panoramic.xccheckout | 41 --- .../xcshareddata/Panoramic.xcscmblueprint | 27 ++ .../UserInterfaceState.xcuserstate | Bin 12806 -> 26540 bytes .../xcschemes/Panoramic.xcscheme | 25 +- .../xcschemes/xcschememanagement.plist | 4 +- Panoramic/Panoramic/AppDelegate.swift | 4 +- Panoramic/Panoramic/Info.plist | 2 +- Panoramic/Panoramic/PanoramaIndicator.swift | 17 +- Panoramic/Panoramic/PanoramaView.swift | 109 ++++---- .../Panoramic/PanoramaViewController.swift | 2 +- Panoramic/Panoramic/ViewController.swift | 2 +- Panoramic/PanoramicTests/Info.plist | 2 +- Panoramic/PanoramicTests/PanoramicTests.swift | 2 +- 14 files changed, 236 insertions(+), 238 deletions(-) delete mode 100644 Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcshareddata/Panoramic.xccheckout create mode 100644 Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcshareddata/Panoramic.xcscmblueprint diff --git a/Panoramic/Panoramic.xcodeproj/project.pbxproj b/Panoramic/Panoramic.xcodeproj/project.pbxproj index d320313..f546fff 100644 --- a/Panoramic/Panoramic.xcodeproj/project.pbxproj +++ b/Panoramic/Panoramic.xcodeproj/project.pbxproj @@ -7,52 +7,52 @@ objects = { /* Begin PBXBuildFile section */ - 29C36C4F1A409688006A83A2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36C4E1A409688006A83A2 /* AppDelegate.swift */; }; - 29C36C511A409688006A83A2 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36C501A409688006A83A2 /* ViewController.swift */; }; - 29C36C541A409688006A83A2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 29C36C521A409688006A83A2 /* Main.storyboard */; }; - 29C36C561A409688006A83A2 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29C36C551A409688006A83A2 /* Images.xcassets */; }; - 29C36C591A409688006A83A2 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29C36C571A409688006A83A2 /* LaunchScreen.xib */; }; - 29C36C651A409688006A83A2 /* PanoramicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36C641A409688006A83A2 /* PanoramicTests.swift */; }; - 29C36C701A4096D0006A83A2 /* PanoramaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36C6E1A4096D0006A83A2 /* PanoramaView.swift */; }; - 29C36C711A4096D0006A83A2 /* PanoramaIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36C6F1A4096D0006A83A2 /* PanoramaIndicator.swift */; }; - 29C36C741A409712006A83A2 /* PanoramaViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36C731A409712006A83A2 /* PanoramaViewController.swift */; }; + 29C36B4D1A3F5FC9006A83A2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36B4C1A3F5FC9006A83A2 /* AppDelegate.swift */; }; + 29C36B4F1A3F5FC9006A83A2 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36B4E1A3F5FC9006A83A2 /* ViewController.swift */; }; + 29C36B521A3F5FC9006A83A2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 29C36B501A3F5FC9006A83A2 /* Main.storyboard */; }; + 29C36B541A3F5FC9006A83A2 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29C36B531A3F5FC9006A83A2 /* Images.xcassets */; }; + 29C36B571A3F5FC9006A83A2 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 29C36B551A3F5FC9006A83A2 /* LaunchScreen.xib */; }; + 29C36B631A3F5FC9006A83A2 /* PanoramicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36B621A3F5FC9006A83A2 /* PanoramicTests.swift */; }; + 29C36B6E1A3F5FF6006A83A2 /* PanoramaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36B6C1A3F5FF6006A83A2 /* PanoramaView.swift */; }; + 29C36B6F1A3F5FF6006A83A2 /* PanoramaIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36B6D1A3F5FF6006A83A2 /* PanoramaIndicator.swift */; }; + 29C36B721A3F6045006A83A2 /* PanoramaViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29C36B711A3F6045006A83A2 /* PanoramaViewController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 29C36C5F1A409688006A83A2 /* PBXContainerItemProxy */ = { + 29C36B5D1A3F5FC9006A83A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 29C36C411A409688006A83A2 /* Project object */; + containerPortal = 29C36B3F1A3F5FC9006A83A2 /* Project object */; proxyType = 1; - remoteGlobalIDString = 29C36C481A409688006A83A2; + remoteGlobalIDString = 29C36B461A3F5FC9006A83A2; remoteInfo = Panoramic; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 29C36C491A409688006A83A2 /* Panoramic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Panoramic.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 29C36C4D1A409688006A83A2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 29C36C4E1A409688006A83A2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 29C36C501A409688006A83A2 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 29C36C531A409688006A83A2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 29C36C551A409688006A83A2 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 29C36C581A409688006A83A2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; - 29C36C5E1A409688006A83A2 /* PanoramicTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PanoramicTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 29C36C631A409688006A83A2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 29C36C641A409688006A83A2 /* PanoramicTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PanoramicTests.swift; sourceTree = ""; }; - 29C36C6E1A4096D0006A83A2 /* PanoramaView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PanoramaView.swift; path = Panoramic/PanoramaView.swift; sourceTree = ""; }; - 29C36C6F1A4096D0006A83A2 /* PanoramaIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PanoramaIndicator.swift; path = Panoramic/PanoramaIndicator.swift; sourceTree = ""; }; - 29C36C731A409712006A83A2 /* PanoramaViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PanoramaViewController.swift; sourceTree = ""; }; + 29C36B471A3F5FC9006A83A2 /* Panoramic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Panoramic.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 29C36B4B1A3F5FC9006A83A2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 29C36B4C1A3F5FC9006A83A2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 29C36B4E1A3F5FC9006A83A2 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 29C36B511A3F5FC9006A83A2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 29C36B531A3F5FC9006A83A2 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 29C36B561A3F5FC9006A83A2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 29C36B5C1A3F5FC9006A83A2 /* PanoramicTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PanoramicTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 29C36B611A3F5FC9006A83A2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 29C36B621A3F5FC9006A83A2 /* PanoramicTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PanoramicTests.swift; sourceTree = ""; }; + 29C36B6C1A3F5FF6006A83A2 /* PanoramaView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PanoramaView.swift; path = Panoramic/PanoramaView.swift; sourceTree = ""; }; + 29C36B6D1A3F5FF6006A83A2 /* PanoramaIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PanoramaIndicator.swift; path = Panoramic/PanoramaIndicator.swift; sourceTree = ""; }; + 29C36B711A3F6045006A83A2 /* PanoramaViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PanoramaViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 29C36C461A409688006A83A2 /* Frameworks */ = { + 29C36B441A3F5FC9006A83A2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 29C36C5B1A409688006A83A2 /* Frameworks */ = { + 29C36B591A3F5FC9006A83A2 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -62,69 +62,69 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 29C36C401A409688006A83A2 = { + 29C36B3E1A3F5FC9006A83A2 = { isa = PBXGroup; children = ( - 29C36C721A4096D4006A83A2 /* Panoramic View */, - 29C36C4B1A409688006A83A2 /* Panoramic */, - 29C36C611A409688006A83A2 /* PanoramicTests */, - 29C36C4A1A409688006A83A2 /* Products */, + 29C36B701A3F6001006A83A2 /* Panoramic View */, + 29C36B491A3F5FC9006A83A2 /* Panoramic */, + 29C36B5F1A3F5FC9006A83A2 /* PanoramicTests */, + 29C36B481A3F5FC9006A83A2 /* Products */, ); sourceTree = ""; }; - 29C36C4A1A409688006A83A2 /* Products */ = { + 29C36B481A3F5FC9006A83A2 /* Products */ = { isa = PBXGroup; children = ( - 29C36C491A409688006A83A2 /* Panoramic.app */, - 29C36C5E1A409688006A83A2 /* PanoramicTests.xctest */, + 29C36B471A3F5FC9006A83A2 /* Panoramic.app */, + 29C36B5C1A3F5FC9006A83A2 /* PanoramicTests.xctest */, ); name = Products; sourceTree = ""; }; - 29C36C4B1A409688006A83A2 /* Panoramic */ = { + 29C36B491A3F5FC9006A83A2 /* Panoramic */ = { isa = PBXGroup; children = ( - 29C36C4E1A409688006A83A2 /* AppDelegate.swift */, - 29C36C501A409688006A83A2 /* ViewController.swift */, - 29C36C521A409688006A83A2 /* Main.storyboard */, - 29C36C731A409712006A83A2 /* PanoramaViewController.swift */, - 29C36C551A409688006A83A2 /* Images.xcassets */, - 29C36C571A409688006A83A2 /* LaunchScreen.xib */, - 29C36C4C1A409688006A83A2 /* Supporting Files */, + 29C36B4C1A3F5FC9006A83A2 /* AppDelegate.swift */, + 29C36B4E1A3F5FC9006A83A2 /* ViewController.swift */, + 29C36B501A3F5FC9006A83A2 /* Main.storyboard */, + 29C36B711A3F6045006A83A2 /* PanoramaViewController.swift */, + 29C36B531A3F5FC9006A83A2 /* Images.xcassets */, + 29C36B551A3F5FC9006A83A2 /* LaunchScreen.xib */, + 29C36B4A1A3F5FC9006A83A2 /* Supporting Files */, ); path = Panoramic; sourceTree = ""; }; - 29C36C4C1A409688006A83A2 /* Supporting Files */ = { + 29C36B4A1A3F5FC9006A83A2 /* Supporting Files */ = { isa = PBXGroup; children = ( - 29C36C4D1A409688006A83A2 /* Info.plist */, + 29C36B4B1A3F5FC9006A83A2 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; - 29C36C611A409688006A83A2 /* PanoramicTests */ = { + 29C36B5F1A3F5FC9006A83A2 /* PanoramicTests */ = { isa = PBXGroup; children = ( - 29C36C641A409688006A83A2 /* PanoramicTests.swift */, - 29C36C621A409688006A83A2 /* Supporting Files */, + 29C36B621A3F5FC9006A83A2 /* PanoramicTests.swift */, + 29C36B601A3F5FC9006A83A2 /* Supporting Files */, ); path = PanoramicTests; sourceTree = ""; }; - 29C36C621A409688006A83A2 /* Supporting Files */ = { + 29C36B601A3F5FC9006A83A2 /* Supporting Files */ = { isa = PBXGroup; children = ( - 29C36C631A409688006A83A2 /* Info.plist */, + 29C36B611A3F5FC9006A83A2 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; - 29C36C721A4096D4006A83A2 /* Panoramic View */ = { + 29C36B701A3F6001006A83A2 /* Panoramic View */ = { isa = PBXGroup; children = ( - 29C36C6E1A4096D0006A83A2 /* PanoramaView.swift */, - 29C36C6F1A4096D0006A83A2 /* PanoramaIndicator.swift */, + 29C36B6C1A3F5FF6006A83A2 /* PanoramaView.swift */, + 29C36B6D1A3F5FF6006A83A2 /* PanoramaIndicator.swift */, ); name = "Panoramic View"; sourceTree = ""; @@ -132,13 +132,13 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 29C36C481A409688006A83A2 /* Panoramic */ = { + 29C36B461A3F5FC9006A83A2 /* Panoramic */ = { isa = PBXNativeTarget; - buildConfigurationList = 29C36C681A409688006A83A2 /* Build configuration list for PBXNativeTarget "Panoramic" */; + buildConfigurationList = 29C36B661A3F5FC9006A83A2 /* Build configuration list for PBXNativeTarget "Panoramic" */; buildPhases = ( - 29C36C451A409688006A83A2 /* Sources */, - 29C36C461A409688006A83A2 /* Frameworks */, - 29C36C471A409688006A83A2 /* Resources */, + 29C36B431A3F5FC9006A83A2 /* Sources */, + 29C36B441A3F5FC9006A83A2 /* Frameworks */, + 29C36B451A3F5FC9006A83A2 /* Resources */, ); buildRules = ( ); @@ -146,46 +146,48 @@ ); name = Panoramic; productName = Panoramic; - productReference = 29C36C491A409688006A83A2 /* Panoramic.app */; + productReference = 29C36B471A3F5FC9006A83A2 /* Panoramic.app */; productType = "com.apple.product-type.application"; }; - 29C36C5D1A409688006A83A2 /* PanoramicTests */ = { + 29C36B5B1A3F5FC9006A83A2 /* PanoramicTests */ = { isa = PBXNativeTarget; - buildConfigurationList = 29C36C6B1A409688006A83A2 /* Build configuration list for PBXNativeTarget "PanoramicTests" */; + buildConfigurationList = 29C36B691A3F5FC9006A83A2 /* Build configuration list for PBXNativeTarget "PanoramicTests" */; buildPhases = ( - 29C36C5A1A409688006A83A2 /* Sources */, - 29C36C5B1A409688006A83A2 /* Frameworks */, - 29C36C5C1A409688006A83A2 /* Resources */, + 29C36B581A3F5FC9006A83A2 /* Sources */, + 29C36B591A3F5FC9006A83A2 /* Frameworks */, + 29C36B5A1A3F5FC9006A83A2 /* Resources */, ); buildRules = ( ); dependencies = ( - 29C36C601A409688006A83A2 /* PBXTargetDependency */, + 29C36B5E1A3F5FC9006A83A2 /* PBXTargetDependency */, ); name = PanoramicTests; productName = PanoramicTests; - productReference = 29C36C5E1A409688006A83A2 /* PanoramicTests.xctest */; + productReference = 29C36B5C1A3F5FC9006A83A2 /* PanoramicTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 29C36C411A409688006A83A2 /* Project object */ = { + 29C36B3F1A3F5FC9006A83A2 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0620; + LastSwiftMigration = 0700; + LastSwiftUpdateCheck = 0700; + LastUpgradeCheck = 0700; ORGANIZATIONNAME = SMApps; TargetAttributes = { - 29C36C481A409688006A83A2 = { + 29C36B461A3F5FC9006A83A2 = { CreatedOnToolsVersion = 6.2; }; - 29C36C5D1A409688006A83A2 = { + 29C36B5B1A3F5FC9006A83A2 = { CreatedOnToolsVersion = 6.2; - TestTargetID = 29C36C481A409688006A83A2; + TestTargetID = 29C36B461A3F5FC9006A83A2; }; }; }; - buildConfigurationList = 29C36C441A409688006A83A2 /* Build configuration list for PBXProject "Panoramic" */; + buildConfigurationList = 29C36B421A3F5FC9006A83A2 /* Build configuration list for PBXProject "Panoramic" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -193,29 +195,29 @@ en, Base, ); - mainGroup = 29C36C401A409688006A83A2; - productRefGroup = 29C36C4A1A409688006A83A2 /* Products */; + mainGroup = 29C36B3E1A3F5FC9006A83A2; + productRefGroup = 29C36B481A3F5FC9006A83A2 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 29C36C481A409688006A83A2 /* Panoramic */, - 29C36C5D1A409688006A83A2 /* PanoramicTests */, + 29C36B461A3F5FC9006A83A2 /* Panoramic */, + 29C36B5B1A3F5FC9006A83A2 /* PanoramicTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 29C36C471A409688006A83A2 /* Resources */ = { + 29C36B451A3F5FC9006A83A2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 29C36C541A409688006A83A2 /* Main.storyboard in Resources */, - 29C36C591A409688006A83A2 /* LaunchScreen.xib in Resources */, - 29C36C561A409688006A83A2 /* Images.xcassets in Resources */, + 29C36B521A3F5FC9006A83A2 /* Main.storyboard in Resources */, + 29C36B571A3F5FC9006A83A2 /* LaunchScreen.xib in Resources */, + 29C36B541A3F5FC9006A83A2 /* Images.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 29C36C5C1A409688006A83A2 /* Resources */ = { + 29C36B5A1A3F5FC9006A83A2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -225,49 +227,49 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 29C36C451A409688006A83A2 /* Sources */ = { + 29C36B431A3F5FC9006A83A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 29C36C701A4096D0006A83A2 /* PanoramaView.swift in Sources */, - 29C36C511A409688006A83A2 /* ViewController.swift in Sources */, - 29C36C741A409712006A83A2 /* PanoramaViewController.swift in Sources */, - 29C36C711A4096D0006A83A2 /* PanoramaIndicator.swift in Sources */, - 29C36C4F1A409688006A83A2 /* AppDelegate.swift in Sources */, + 29C36B6E1A3F5FF6006A83A2 /* PanoramaView.swift in Sources */, + 29C36B4F1A3F5FC9006A83A2 /* ViewController.swift in Sources */, + 29C36B721A3F6045006A83A2 /* PanoramaViewController.swift in Sources */, + 29C36B6F1A3F5FF6006A83A2 /* PanoramaIndicator.swift in Sources */, + 29C36B4D1A3F5FC9006A83A2 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 29C36C5A1A409688006A83A2 /* Sources */ = { + 29C36B581A3F5FC9006A83A2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 29C36C651A409688006A83A2 /* PanoramicTests.swift in Sources */, + 29C36B631A3F5FC9006A83A2 /* PanoramicTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 29C36C601A409688006A83A2 /* PBXTargetDependency */ = { + 29C36B5E1A3F5FC9006A83A2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 29C36C481A409688006A83A2 /* Panoramic */; - targetProxy = 29C36C5F1A409688006A83A2 /* PBXContainerItemProxy */; + target = 29C36B461A3F5FC9006A83A2 /* Panoramic */; + targetProxy = 29C36B5D1A3F5FC9006A83A2 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 29C36C521A409688006A83A2 /* Main.storyboard */ = { + 29C36B501A3F5FC9006A83A2 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 29C36C531A409688006A83A2 /* Base */, + 29C36B511A3F5FC9006A83A2 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 29C36C571A409688006A83A2 /* LaunchScreen.xib */ = { + 29C36B551A3F5FC9006A83A2 /* LaunchScreen.xib */ = { isa = PBXVariantGroup; children = ( - 29C36C581A409688006A83A2 /* Base */, + 29C36B561A3F5FC9006A83A2 /* Base */, ); name = LaunchScreen.xib; sourceTree = ""; @@ -275,7 +277,7 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 29C36C661A409688006A83A2 /* Debug */ = { + 29C36B641A3F5FC9006A83A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -295,6 +297,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -317,7 +320,7 @@ }; name = Debug; }; - 29C36C671A409688006A83A2 /* Release */ = { + 29C36B651A3F5FC9006A83A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -352,29 +355,31 @@ }; name = Release; }; - 29C36C691A409688006A83A2 /* Debug */ = { + 29C36B671A3F5FC9006A83A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = Panoramic/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.smapps.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - 29C36C6A1A409688006A83A2 /* Release */ = { + 29C36B681A3F5FC9006A83A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = Panoramic/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.smapps.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; - 29C36C6C1A409688006A83A2 /* Debug */ = { + 29C36B6A1A3F5FC9006A83A2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -388,12 +393,13 @@ ); INFOPLIST_FILE = PanoramicTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.smapps.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Panoramic.app/Panoramic"; }; name = Debug; }; - 29C36C6D1A409688006A83A2 /* Release */ = { + 29C36B6B1A3F5FC9006A83A2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -403,6 +409,7 @@ ); INFOPLIST_FILE = PanoramicTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = "com.smapps.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Panoramic.app/Panoramic"; }; @@ -411,32 +418,34 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 29C36C441A409688006A83A2 /* Build configuration list for PBXProject "Panoramic" */ = { + 29C36B421A3F5FC9006A83A2 /* Build configuration list for PBXProject "Panoramic" */ = { isa = XCConfigurationList; buildConfigurations = ( - 29C36C661A409688006A83A2 /* Debug */, - 29C36C671A409688006A83A2 /* Release */, + 29C36B641A3F5FC9006A83A2 /* Debug */, + 29C36B651A3F5FC9006A83A2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 29C36C681A409688006A83A2 /* Build configuration list for PBXNativeTarget "Panoramic" */ = { + 29C36B661A3F5FC9006A83A2 /* Build configuration list for PBXNativeTarget "Panoramic" */ = { isa = XCConfigurationList; buildConfigurations = ( - 29C36C691A409688006A83A2 /* Debug */, - 29C36C6A1A409688006A83A2 /* Release */, + 29C36B671A3F5FC9006A83A2 /* Debug */, + 29C36B681A3F5FC9006A83A2 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; - 29C36C6B1A409688006A83A2 /* Build configuration list for PBXNativeTarget "PanoramicTests" */ = { + 29C36B691A3F5FC9006A83A2 /* Build configuration list for PBXNativeTarget "PanoramicTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 29C36C6C1A409688006A83A2 /* Debug */, - 29C36C6D1A409688006A83A2 /* Release */, + 29C36B6A1A3F5FC9006A83A2 /* Debug */, + 29C36B6B1A3F5FC9006A83A2 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 29C36C411A409688006A83A2 /* Project object */; + rootObject = 29C36B3F1A3F5FC9006A83A2 /* Project object */; } diff --git a/Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcshareddata/Panoramic.xccheckout b/Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcshareddata/Panoramic.xccheckout deleted file mode 100644 index 37e9b34..0000000 --- a/Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcshareddata/Panoramic.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ - - - - - IDESourceControlProjectFavoriteDictionaryKey - - IDESourceControlProjectIdentifier - F66642B7-4BB5-41EE-87BC-740E88AF8D2B - IDESourceControlProjectName - Panoramic - IDESourceControlProjectOriginsDictionary - - C8EB9E62E11C410B9993230C4914B21E925D2459 - https://github.com/iSame7/Panoramic.git - - IDESourceControlProjectPath - Panoramic/Panoramic.xcodeproj - IDESourceControlProjectRelativeInstallPathDictionary - - C8EB9E62E11C410B9993230C4914B21E925D2459 - ../../.. - - IDESourceControlProjectURL - https://github.com/iSame7/Panoramic.git - IDESourceControlProjectVersion - 111 - IDESourceControlProjectWCCIdentifier - C8EB9E62E11C410B9993230C4914B21E925D2459 - IDESourceControlProjectWCConfigurations - - - IDESourceControlRepositoryExtensionIdentifierKey - public.vcs.git - IDESourceControlWCCIdentifierKey - C8EB9E62E11C410B9993230C4914B21E925D2459 - IDESourceControlWCCName - Panoramic - - - - diff --git a/Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcshareddata/Panoramic.xcscmblueprint b/Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcshareddata/Panoramic.xcscmblueprint new file mode 100644 index 0000000..d325ca8 --- /dev/null +++ b/Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcshareddata/Panoramic.xcscmblueprint @@ -0,0 +1,27 @@ +{ + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "D359FF3C54B1BAF14FF22A745D45A8C0CA649396" : 0 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "9E50FD57-17B8-4739-907B-CD1BBEC451FB", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "D359FF3C54B1BAF14FF22A745D45A8C0CA649396" : "Panoramic\/Panoramic\/" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "Panoramic", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Panoramic.xcodeproj", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/iSame7\/Panoramic.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "D359FF3C54B1BAF14FF22A745D45A8C0CA649396" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/iSame7\/Panoramic.git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "D359FF3C54B1BAF14FF22A745D45A8C0CA649396" + } + ] +} \ No newline at end of file diff --git a/Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcuserdata/gbahig.xcuserdatad/UserInterfaceState.xcuserstate b/Panoramic/Panoramic.xcodeproj/project.xcworkspace/xcuserdata/gbahig.xcuserdatad/UserInterfaceState.xcuserstate index fd7b320328a46df6f8f1bbe5a54bb11e9667fdf9..02d28c1fae072412e891dda5e8b449374ce5a5ae 100644 GIT binary patch literal 26540 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 CAFo*e literal 12806 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 diff --git a/Panoramic/Panoramic.xcodeproj/xcuserdata/gbahig.xcuserdatad/xcschemes/Panoramic.xcscheme b/Panoramic/Panoramic.xcodeproj/xcuserdata/gbahig.xcuserdatad/xcschemes/Panoramic.xcscheme index 8d981b0..7a3285d 100644 --- a/Panoramic/Panoramic.xcodeproj/xcuserdata/gbahig.xcuserdatad/xcschemes/Panoramic.xcscheme +++ b/Panoramic/Panoramic.xcodeproj/xcuserdata/gbahig.xcuserdatad/xcschemes/Panoramic.xcscheme @@ -1,6 +1,6 @@ @@ -28,7 +28,7 @@ buildForAnalyzing = "YES"> @@ -37,16 +37,16 @@ + shouldUseLaunchSchemeArgsEnv = "YES"> @@ -56,27 +56,30 @@ + + @@ -86,16 +89,16 @@ diff --git a/Panoramic/Panoramic.xcodeproj/xcuserdata/gbahig.xcuserdatad/xcschemes/xcschememanagement.plist b/Panoramic/Panoramic.xcodeproj/xcuserdata/gbahig.xcuserdatad/xcschemes/xcschememanagement.plist index 8193987..2e3d63e 100644 --- a/Panoramic/Panoramic.xcodeproj/xcuserdata/gbahig.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Panoramic/Panoramic.xcodeproj/xcuserdata/gbahig.xcuserdatad/xcschemes/xcschememanagement.plist @@ -12,12 +12,12 @@ SuppressBuildableAutocreation - 29C36C481A409688006A83A2 + 29C36B461A3F5FC9006A83A2 primary - 29C36C5D1A409688006A83A2 + 29C36B5B1A3F5FC9006A83A2 primary diff --git a/Panoramic/Panoramic/AppDelegate.swift b/Panoramic/Panoramic/AppDelegate.swift index 37fbedd..f4bf496 100644 --- a/Panoramic/Panoramic/AppDelegate.swift +++ b/Panoramic/Panoramic/AppDelegate.swift @@ -2,7 +2,7 @@ // AppDelegate.swift // Panoramic // -// Created by Sameh Mabrouk on 12/16/14. +// Created by Sameh Mabrouk on 12/15/14. // Copyright (c) 2014 SMApps. All rights reserved. // @@ -15,7 +15,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { - var panoramaVC : PanoramaViewController? = PanoramaViewController() + let panoramaVC : PanoramaViewController? = PanoramaViewController() window = UIWindow(frame: UIScreen.mainScreen().bounds) if let window = window { window.backgroundColor = UIColor.orangeColor() diff --git a/Panoramic/Panoramic/Info.plist b/Panoramic/Panoramic/Info.plist index c79049e..6905cc6 100644 --- a/Panoramic/Panoramic/Info.plist +++ b/Panoramic/Panoramic/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.smapps.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/Panoramic/Panoramic/PanoramaIndicator.swift b/Panoramic/Panoramic/PanoramaIndicator.swift index 271f1b4..2ee5129 100644 --- a/Panoramic/Panoramic/PanoramaIndicator.swift +++ b/Panoramic/Panoramic/PanoramaIndicator.swift @@ -21,7 +21,7 @@ extension UIScrollView{ //MARK: Getters/Setters func setViewForPanoramaIndicator(viewScrollIndicator:UIView){ - objc_setAssociatedObject(self, &viewScrollIndicatorKey, viewScrollIndicator, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) + objc_setAssociatedObject(self, &viewScrollIndicatorKey, viewScrollIndicator, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) } func getViewForPanoramaIndicator() -> UIView?{ @@ -30,7 +30,8 @@ extension UIScrollView{ } func setBackgroundViewForPanoramaIndicator(backgroundViewScrollIndicator:UIView){ - objc_setAssociatedObject(self, &backgroundViewScrollIndicatorKey, backgroundViewScrollIndicator, UInt(OBJC_ASSOCIATION_RETAIN_NONATOMIC)) + objc_setAssociatedObject(self, &backgroundViewScrollIndicatorKey, backgroundViewScrollIndicator, .OBJC_ASSOCIATION_RETAIN) + objc_setAssociatedObject(dismissed, &key, nil, .OBJC_ASSOCIATION_RETAIN) } func getBackgroundViewForPanoramaIndicator()-> UIView?{ @@ -85,7 +86,7 @@ extension UIScrollView{ func refreshBackgroundPanoramaIndicator(){ let backgroundViewScrollIndicator:UIView = self.getBackgroundViewForPanoramaIndicator()! - var x:CGFloat = self.contentOffset.x + ScrollIndicatorLeftRightThreshold + let x:CGFloat = self.contentOffset.x + ScrollIndicatorLeftRightThreshold let rect:CGRect = CGRect(x: x, y: backgroundViewScrollIndicator.frame.origin.y, width: backgroundViewScrollIndicator.frame.width, height: backgroundViewScrollIndicator.frame.height) backgroundViewScrollIndicator.frame = rect } @@ -94,14 +95,14 @@ extension UIScrollView{ let viewScrollIndicator:UIView = self.getViewForPanoramaIndicator()! let percent:CGFloat = self.contentOffset.x / self.contentSize.width - var x:CGFloat = self.contentOffset.x + ((self.bounds.size.width - ScrollIndicatorLeftRightThreshold) * percent) + ScrollIndicatorLeftRightThreshold + let x:CGFloat = self.contentOffset.x + ((self.bounds.size.width - ScrollIndicatorLeftRightThreshold) * percent) + ScrollIndicatorLeftRightThreshold let rect:CGRect = CGRect(x: x, y: viewScrollIndicator.frame.origin.y, width: viewScrollIndicator.frame.width, height: viewScrollIndicator.frame.height) viewScrollIndicator.frame = rect } func disablePanoramaIndicator(){ - println("disablePanoramaIndicator") + print("disablePanoramaIndicator") self.stopObservers() self.getBackgroundViewForPanoramaIndicator()?.removeFromSuperview() self.getViewForPanoramaIndicator()?.removeFromSuperview() @@ -110,8 +111,8 @@ extension UIScrollView{ //MARK: KVO func setupObservers(){ - self.addObserver(self, forKeyPath:"contentSize", options: NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Old , context: nil) - self.addObserver(self, forKeyPath:"contentOffset", options: NSKeyValueObservingOptions.New | NSKeyValueObservingOptions.Old , context: nil) + self.addObserver(self, forKeyPath:"contentSize", options: [NSKeyValueObservingOptions.New, NSKeyValueObservingOptions.Old] , context: nil) + self.addObserver(self, forKeyPath:"contentOffset", options: [NSKeyValueObservingOptions.New, NSKeyValueObservingOptions.Old] , context: nil) } func stopObservers(){ @@ -121,7 +122,7 @@ extension UIScrollView{ } - override public func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer) { + override public func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer) { if self.contentSize.width > 0.0{ diff --git a/Panoramic/Panoramic/PanoramaView.swift b/Panoramic/Panoramic/PanoramaView.swift index bbd3696..3c1bc5f 100644 --- a/Panoramic/Panoramic/PanoramaView.swift +++ b/Panoramic/Panoramic/PanoramaView.swift @@ -12,7 +12,7 @@ import CoreMotion class PanoramaView: UIView { - + //Constatnts let CRMotionViewRotationMinimumThreshold:CGFloat = 0.1 let CRMotionGyroUpdateInterval:NSTimeInterval = 1 / 100 @@ -22,21 +22,21 @@ class PanoramaView: UIView { private var motionManager: CMMotionManager = CMMotionManager() private var motionEnabled: Bool = true private var scrollIndicatorEnabled: Bool = true - + //Subviews private var viewFrame: CGRect! private var scrollView: UIScrollView! private var imageView: UIImageView! - + //Managing Motion private var motionRate:CGFloat! private var minimumXOffset:CGFloat! private var maximumXOffset:CGFloat! - + // The image that will be diplayed. private var image: UIImage! - - + + // MARK: - Initialization override init(frame: CGRect) { super.init(frame: frame) @@ -44,113 +44,112 @@ class PanoramaView: UIView { self.commonInit() } - required init(coder aDecoder: NSCoder) { + required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } - - + + // MARK: - Instance methods func commonInit(){ - + self.scrollView = UIScrollView(frame: self.viewFrame) self.scrollView.userInteractionEnabled = false self.scrollView.alwaysBounceVertical = false self.scrollView.contentSize = CGSizeZero self.addSubview(self.scrollView) - + self.imageView = UIImageView(frame: self.viewFrame) - self.imageView.autoresizingMask = .FlexibleWidth | .FlexibleHeight + self.imageView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] self.imageView.backgroundColor = UIColor.blackColor() self.imageView.contentMode = UIViewContentMode.ScaleAspectFit self.scrollView.addSubview(self.imageView) - + self.minimumXOffset = 0 self.scrollIndicatorEnabled = true self.startMonitoring() - + } - + // MARK: - Setters /* - set image for the imageview to display it to the reciever. + set image for the imageview to display it to the reciever. */ func setImage(image:UIImage){ - + self.image = image - + let width = self.viewFrame.size.height / self.image.size.height * self.image.size.width self.imageView.frame = CGRectMake(0, 0, width, self.viewFrame.height) self.imageView.backgroundColor = UIColor.blueColor() self.imageView.image = self.image - + self.scrollView.contentSize = CGSizeMake(self.imageView.frame.size.width, self.scrollView.frame.size.height) self.scrollView.contentOffset = CGPointMake((self.scrollView.contentSize.width - self.scrollView.frame.size.width) / 2, 0) - + //enable panormama indicator. self.scrollView.enablePanoramaIndicator() - + self.motionRate = self.image.size.width / self.viewFrame.size.width * CRMotionViewRotationFactor self.maximumXOffset = self.scrollView.contentSize.width - self.scrollView.frame.size.width } - + /* enable motion and recieving the gyro updates. */ func setMotionEnabled(motionEnabled:Bool){ - + self.motionEnabled = motionEnabled if self.motionEnabled{ - + self.startMonitoring() } else{ - + self.stopMonitoring() } } - + /* enable or disable the scrolling of the scrolling indicator of PanoramaIndicator. */ func setScrollIndicatorEnabled(scrollIndicatorEnabled:Bool){ - + self.scrollIndicatorEnabled = scrollIndicatorEnabled if self.scrollIndicatorEnabled{ //enable panormama indicator. self.scrollView.enablePanoramaIndicator() } else{ - + //disable panormama indicator. self.scrollView.disablePanoramaIndicator() } - + } - + // MARK: - Core Motion /* start monitoring the updates of the gyro to rotate the scrollview accoring the device motion rotation rate. */ func startMonitoring(){ - + + self.motionManager.gyroUpdateInterval = CRMotionGyroUpdateInterval if !self.motionManager.gyroActive && self.motionManager.gyroAvailable{ - - self.motionManager.startGyroUpdatesToQueue(NSOperationQueue.currentQueue(), withHandler: { (gyroData:CMGyroData!, error:NSError!) -> Void in - - self.rotateAccordingToDeviceMotionRotationRate(gyroData) - - + + self.motionManager.startGyroUpdatesToQueue(NSOperationQueue.currentQueue()!, withHandler: { (CMGyroData, NSError) -> Void in + self.rotateAccordingToDeviceMotionRotationRate(CMGyroData!) }) - + + } - + else{ - - println("No Availabel gyro") + + print("No Availabel gyro") } } - + /* this function calculate the rotation of UIScrollview accoring to the device motion rotation rate. */ @@ -165,32 +164,32 @@ class PanoramaView: UIView { */ let rotationRate = CGFloat(gyroData.rotationRate.y) if abs(rotationRate) >= CRMotionViewRotationMinimumThreshold{ - + var offsetX = self.scrollView.contentOffset.x - rotationRate * self.motionRate if offsetX > self.maximumXOffset{ - + offsetX = self.maximumXOffset } else if offsetX < self.minimumXOffset{ - + offsetX = self.minimumXOffset } - - - UIView.animateWithDuration(0.3, delay: 0.0, options: .BeginFromCurrentState | .AllowUserInteraction | .CurveEaseOut, animations: { () -> Void in + + + UIView.animateWithDuration(0.3, delay: 0.0, options: [.BeginFromCurrentState, .AllowUserInteraction, .CurveEaseOut], animations: { () -> Void in self.scrollView.setContentOffset(CGPointMake(offsetX, 0), animated: false) - }, completion: nil) + }, completion: nil) } - - + + } - + /* - Stop gyro updates if reciever set motionEnabled = false + Stop gyro updates if reciever set motionEnabled = false */ func stopMonitoring(){ - + self.motionManager.stopGyroUpdates() } - + } diff --git a/Panoramic/Panoramic/PanoramaViewController.swift b/Panoramic/Panoramic/PanoramaViewController.swift index 7c8e09c..83048eb 100644 --- a/Panoramic/Panoramic/PanoramaViewController.swift +++ b/Panoramic/Panoramic/PanoramaViewController.swift @@ -12,7 +12,7 @@ class PanoramaViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - var motionView:PanoramaView = PanoramaView(frame: self.view.bounds) + let motionView:PanoramaView = PanoramaView(frame: self.view.bounds) motionView.setImage(UIImage(named:"London_Tower_Bridge_Sunset_Cityscape_Panorama")!) self.view.addSubview(motionView) } diff --git a/Panoramic/Panoramic/ViewController.swift b/Panoramic/Panoramic/ViewController.swift index 5683b39..c7febff 100644 --- a/Panoramic/Panoramic/ViewController.swift +++ b/Panoramic/Panoramic/ViewController.swift @@ -2,7 +2,7 @@ // ViewController.swift // Panoramic // -// Created by Sameh Mabrouk on 12/16/14. +// Created by Sameh Mabrouk on 12/15/14. // Copyright (c) 2014 SMApps. All rights reserved. // diff --git a/Panoramic/PanoramicTests/Info.plist b/Panoramic/PanoramicTests/Info.plist index ae38ac7..ba72822 100644 --- a/Panoramic/PanoramicTests/Info.plist +++ b/Panoramic/PanoramicTests/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.smapps.$(PRODUCT_NAME:rfc1034identifier) + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/Panoramic/PanoramicTests/PanoramicTests.swift b/Panoramic/PanoramicTests/PanoramicTests.swift index 8be54ff..8506093 100644 --- a/Panoramic/PanoramicTests/PanoramicTests.swift +++ b/Panoramic/PanoramicTests/PanoramicTests.swift @@ -2,7 +2,7 @@ // PanoramicTests.swift // PanoramicTests // -// Created by Sameh Mabrouk on 12/16/14. +// Created by Sameh Mabrouk on 12/15/14. // Copyright (c) 2014 SMApps. All rights reserved. //