├── Demo ├── SpinKitTests │ ├── en.lproj │ │ └── InfoPlist.strings │ ├── SpinKitTests.m │ └── SpinKitTests-Info.plist ├── SpinKit │ ├── Images.xcassets │ │ ├── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── RTTestViewController.h │ ├── RTAppDelegate.h │ ├── main.m │ ├── SpinKit-Prefix.pch │ ├── LanchScreen.xib │ ├── SpinKit-Info.plist │ ├── RTAppDelegate.m │ └── RTTestViewController.m └── SpinKit.xcodeproj │ ├── project.xcworkspace │ └── contents.xcworkspacedata │ └── project.pbxproj ├── .gitignore ├── SpinKit.podspec ├── LICENSE ├── SpinKit ├── Animations │ ├── RTSpinKitArcAnimation.h │ ├── RTSpinKitWaveAnimation.h │ ├── RTSpinKitArcAltAnimation.h │ ├── RTSpinKitBounceAnimation.h │ ├── RTSpinKitCircleAnimation.h │ ├── RTSpinKitPlaneAnimation.h │ ├── RTSpinKitPulseAnimation.h │ ├── RTSpinKit9CubeGridAnimation.h │ ├── RTSpinKitWordPressAnimation.h │ ├── RTSpinKitChasingDotsAnimation.h │ ├── RTSpinKitCircleFlipAnimation.h │ ├── RTSpinKitThreeBounceAnimation.h │ ├── RTSpinKitFadingCircleAnimation.h │ ├── RTSpinKitWanderingCubesAnimation.h │ ├── RTSpinKitFadingCircleAltAnimation.h │ ├── RTSpinKitPlaneAnimation.m │ ├── RTSpinKitPulseAnimation.m │ ├── RTSpinKitCircleFlipAnimation.m │ ├── RTSpinKitFadingCircleAnimation.m │ ├── RTSpinKitBounceAnimation.m │ ├── RTSpinKitWaveAnimation.m │ ├── RTSpinKitThreeBounceAnimation.m │ ├── RTSpinKitArcAnimation.m │ ├── RTSpinKitCircleAnimation.m │ ├── RTSpinKitFadingCircleAltAnimation.m │ ├── RTSpinKit9CubeGridAnimation.m │ ├── RTSpinKitWordPressAnimation.m │ ├── RTSpinKitArcAltAnimation.m │ ├── RTSpinKitWanderingCubesAnimation.m │ └── RTSpinKitChasingDotsAnimation.m ├── RTSpinKitAnimating.h ├── RTSpinKitUtils.h ├── RTSpinKitUtils.m ├── RTSpinKitView.h └── RTSpinKitView.m └── README.md /Demo/SpinKitTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Demo/SpinKit/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Demo/SpinKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Demo/SpinKit/RTTestViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTTestViewController.h 3 | // SpinKit 4 | // 5 | // Created by Ramon Torres on 1/1/14. 6 | // Copyright (c) 2014 Ramon Torres. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface RTTestViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | .DS_Store 3 | */build/* 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | profile 14 | *.moved-aside 15 | DerivedData 16 | .idea/ 17 | *.hmap 18 | *.xccheckout 19 | 20 | #CocoaPods 21 | Pods 22 | -------------------------------------------------------------------------------- /Demo/SpinKit/RTAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTAppDelegate.h 3 | // SpinKit 4 | // 5 | // Created by Ramon Torres on 1/1/14. 6 | // Copyright (c) 2014 Ramon Torres. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface RTAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Demo/SpinKit/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // SpinKit 4 | // 5 | // Created by Ramon Torres on 1/1/14. 6 | // Copyright (c) 2014 Ramon Torres. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "RTAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([RTAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Demo/SpinKit/SpinKit-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_3_0 10 | #warning "This project uses features only available in iOS SDK 3.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /SpinKit.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'SpinKit' 3 | s.version = '1.2.0' 4 | s.authors = {'Ramon Torres' => 'raymondjavaxx@gmail.com'} 5 | s.homepage = 'https://github.com/raymondjavaxx/SpinKit-ObjC' 6 | s.summary = 'UIActivityIndicatorView replacement with multiple styles and animations.' 7 | s.source = {:git => 'https://github.com/raymondjavaxx/SpinKit-ObjC.git', :tag => '1.2.0'} 8 | s.license = {:type => 'MIT', :file => 'LICENSE'} 9 | s.platform = :ios, '6.0' 10 | s.public_header_files = 'SpinKit/RTSpinKitView.h', 'SpinKit/RTSpinKitAnimating.h' 11 | s.source_files = 'SpinKit/**/*.{m,h}' 12 | s.requires_arc = true 13 | end 14 | -------------------------------------------------------------------------------- /Demo/SpinKitTests/SpinKitTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // SpinKitTests.m 3 | // SpinKitTests 4 | // 5 | // Created by Ramon Torres on 1/1/14. 6 | // Copyright (c) 2014 Ramon Torres. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface SpinKitTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation SpinKitTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /Demo/SpinKitTests/SpinKitTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.macropoetry.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Ramon Torres 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Demo/SpinKit/LanchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Demo/SpinKit/SpinKit-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.example.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LanchScreen 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UIStatusBarStyle 34 | UIStatusBarStyleBlackTranslucent 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitArcAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitArcAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitArcAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitWaveAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitWaveAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitWaveAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitArcAltAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitArcAltAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitArcAltAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitBounceAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitBounceAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitBounceAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitCircleAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitCircleAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitCircleAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitPlaneAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitPlaneAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitPlaneAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitPulseAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitPulseAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitPulseAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKit9CubeGridAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKit9CubeGridAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKit9CubeGridAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitWordPressAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitWordPressAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitWordPressAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/RTSpinKitAnimating.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitAnimating.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | 27 | @protocol RTSpinKitAnimating 28 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color; 29 | @end 30 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitChasingDotsAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitChasingDotsAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitChasingDotsAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitCircleFlipAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitCircleFlipAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitCircleFlipAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitThreeBounceAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitThreeBounceAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitThreeBounceAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitFadingCircleAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitFadingCircleAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitFadingCircleAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitWanderingCubesAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitWanderingCubesAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitWanderingCubesAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitFadingCircleAltAnimation.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitFadingCircleAltAnimation.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitAnimating.h" 27 | 28 | @interface RTSpinKitFadingCircleAltAnimation : NSObject 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /SpinKit/RTSpinKitUtils.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitUtils.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | #import "RTSpinKitView.h" 27 | #import "RTSpinKitAnimating.h" 28 | 29 | CATransform3D RTSpinKit3DRotationWithPerspective(CGFloat perspective, CGFloat angle, CGFloat x, CGFloat y, CGFloat z); 30 | NSObject* RTSpinKitAnimationFromStyle(RTSpinKitViewStyle style); 31 | -------------------------------------------------------------------------------- /Demo/SpinKit/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "3x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "3x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "57x57", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "57x57", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "iphone", 45 | "size" : "60x60", 46 | "scale" : "3x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "29x29", 51 | "scale" : "1x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "2x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "40x40", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "2x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "50x50", 71 | "scale" : "1x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "50x50", 76 | "scale" : "2x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "72x72", 81 | "scale" : "1x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "72x72", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ipad", 90 | "size" : "76x76", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "idiom" : "ipad", 95 | "size" : "76x76", 96 | "scale" : "2x" 97 | } 98 | ], 99 | "info" : { 100 | "version" : 1, 101 | "author" : "xcode" 102 | } 103 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | SpinKit-ObjC 2 | ============ 3 | 4 | UIKit port of [SpinKit](https://github.com/tobiasahlin/SpinKit). 5 | 6 | Installing 7 | ---------- 8 | 9 | [CocoaPods](http://cocoapods.org/) is the recommended way for adding SpinKit to your project. 10 | 11 | pod 'SpinKit', '~> 1.1' 12 | 13 | If you are not yet using CocoaPods, I definetly recommend you to check out their [Getting Started guide](http://guides.cocoapods.org/using/getting-started.html) and the [NSHipster article](http://nshipster.com/cocoapods/). 14 | 15 | Usage 16 | ----- 17 | 18 | Simply instantiate `RTSpinKitView` with the desired style and add to your view hierarchy. 19 | 20 | #import 21 | ... 22 | RTSpinKitView *spinner = [[RTSpinKitView alloc] initWithStyle:RTSpinKitViewStyleWave]; 23 | [self.view addSubview:spinner]; 24 | 25 | You can change the size of the spinner by manipulating the `spinnerSize` property. The default size is `37.0`. 26 | 27 | spinner.spinnerSize = 100.0; 28 | [spinner sizeToFit]; 29 | 30 | Available styles: 31 | 32 | * `RTSpinKitViewStylePlane` 33 | * `RTSpinKitViewStyleCircleFlip` 34 | * `RTSpinKitViewStyleBounce` 35 | * `RTSpinKitViewStyleWave` 36 | * `RTSpinKitViewStyleWanderingCubes` 37 | * `RTSpinKitViewStylePulse` 38 | * `RTSpinKitViewStyleChasingDots` 39 | * `RTSpinKitViewStyleThreeBounce` 40 | * `RTSpinKitViewStyleCircle` 41 | * `RTSpinKitViewStyle9CubeGrid` 42 | * `RTSpinKitViewStyleWordPress` 43 | * `RTSpinKitViewStyleFadingCircle` 44 | * `RTSpinKitViewStyleFadingCircleAlt` 45 | * `RTSpinKitViewStyleArc` 46 | * `RTSpinKitViewStyleArcAlt` 47 | 48 | MBProgressHUD 49 | ------------- 50 | 51 | SpinKit integrates nicely with the amazing [MBProgressHUD](https://github.com/jdg/MBProgressHUD) library: 52 | 53 | RTSpinKitView *spinner = [[RTSpinKitView alloc] initWithStyle:RTSpinKitViewStyleWave color:[UIColor whiteColor]]; 54 | 55 | MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 56 | hud.square = YES; 57 | hud.mode = MBProgressHUDModeCustomView; 58 | hud.customView = spinner; 59 | hud.labelText = NSLocalizedString(@"Loading", @"Loading"); 60 | 61 | [spinner startAnimating]; 62 | 63 | Acknowledgements 64 | ---------------- 65 | 66 | Animations based on [SpinKit](https://github.com/tobiasahlin/SpinKit) by [Tobias Ahlin](https://github.com/tobiasahlin). 67 | 68 | [SpinKit Contributors](https://github.com/raymondjavaxx/SpinKit-ObjC/graphs/contributors). 69 | -------------------------------------------------------------------------------- /Demo/SpinKit/RTAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTAppDelegate.m 3 | // SpinKit 4 | // 5 | // Created by Ramon Torres on 1/1/14. 6 | // Copyright (c) 2014 Ramon Torres. All rights reserved. 7 | // 8 | 9 | #import "RTAppDelegate.h" 10 | #import "RTTestViewController.h" 11 | 12 | @implementation RTAppDelegate 13 | 14 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 15 | { 16 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 17 | // Override point for customization after application launch. 18 | self.window.backgroundColor = [UIColor whiteColor]; 19 | self.window.rootViewController = [[RTTestViewController alloc] init]; 20 | [self.window makeKeyAndVisible]; 21 | return YES; 22 | } 23 | 24 | - (void)applicationWillResignActive:(UIApplication *)application 25 | { 26 | // 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. 27 | // 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. 28 | } 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application 31 | { 32 | // 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. 33 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 34 | } 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application 37 | { 38 | // 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. 39 | } 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application 42 | { 43 | // 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. 44 | } 45 | 46 | - (void)applicationWillTerminate:(UIApplication *)application 47 | { 48 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitPlaneAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitPlaneAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitPlaneAnimation.h" 26 | #import "RTSpinKitUtils.h" 27 | 28 | @implementation RTSpinKitPlaneAnimation 29 | 30 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 31 | { 32 | CALayer *plane = [CALayer layer]; 33 | plane.frame = CGRectInset(CGRectMake(0.0, 0.0, size.width, size.height), 2.0, 2.0); 34 | plane.backgroundColor = color.CGColor; 35 | plane.anchorPoint = CGPointMake(0.5, 0.5); 36 | plane.anchorPointZ = 0.5; 37 | plane.shouldRasterize = YES; 38 | plane.rasterizationScale = [[UIScreen mainScreen] scale]; 39 | [layer addSublayer:plane]; 40 | 41 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 42 | anim.removedOnCompletion = NO; 43 | anim.repeatCount = HUGE_VALF; 44 | anim.duration = 1.2; 45 | anim.keyTimes = @[@(0.0), @(0.5), @(1.0)]; 46 | 47 | anim.timingFunctions = @[ 48 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 49 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 50 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 51 | ]; 52 | 53 | anim.values = @[ 54 | [NSValue valueWithCATransform3D:RTSpinKit3DRotationWithPerspective(1.0/120.0, 0, 0, 0, 0)], 55 | [NSValue valueWithCATransform3D:RTSpinKit3DRotationWithPerspective(1.0/120.0, M_PI, 0.0, 1.0,0.0)], 56 | [NSValue valueWithCATransform3D:RTSpinKit3DRotationWithPerspective(1.0/120.0, M_PI, 0.0, 0.0,1.0)] 57 | ]; 58 | 59 | [plane addAnimation:anim forKey:@"spinkit-anim"]; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitPulseAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitPulseAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitPulseAnimation.h" 26 | 27 | @implementation RTSpinKitPulseAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime(); 32 | 33 | CALayer *circle = [CALayer layer]; 34 | circle.frame = CGRectInset(CGRectMake(0.0, 0.0, size.width, size.height), 2.0, 2.0); 35 | circle.backgroundColor = color.CGColor; 36 | circle.anchorPoint = CGPointMake(0.5, 0.5); 37 | circle.opacity = 1.0; 38 | circle.cornerRadius = CGRectGetHeight(circle.bounds) * 0.5; 39 | circle.transform = CATransform3DMakeScale(0.0, 0.0, 0.0); 40 | 41 | CAKeyframeAnimation *scaleAnim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 42 | scaleAnim.values = @[ 43 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)], 44 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)] 45 | ]; 46 | 47 | CAKeyframeAnimation *opacityAnim = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; 48 | opacityAnim.values = @[@(1.0), @(0.0)]; 49 | 50 | CAAnimationGroup *animGroup = [CAAnimationGroup animation]; 51 | animGroup.removedOnCompletion = NO; 52 | animGroup.beginTime = beginTime; 53 | animGroup.repeatCount = HUGE_VALF; 54 | animGroup.duration = 1.0; 55 | animGroup.animations = @[scaleAnim, opacityAnim]; 56 | animGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 57 | 58 | [layer addSublayer:circle]; 59 | [circle addAnimation:animGroup forKey:@"spinkit-anim"]; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitCircleFlipAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitCircleFlipAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitCircleFlipAnimation.h" 26 | #import "RTSpinKitUtils.h" 27 | 28 | @implementation RTSpinKitCircleFlipAnimation 29 | 30 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 31 | { 32 | CALayer *circle = [CALayer layer]; 33 | circle.frame = CGRectInset(CGRectMake(0.0, 0.0, size.width, size.height), 2.0, 2.0); 34 | circle.backgroundColor = color.CGColor; 35 | circle.cornerRadius = CGRectGetHeight(circle.bounds) * 0.5; 36 | circle.anchorPoint = CGPointMake(0.5, 0.5); 37 | circle.anchorPointZ = 0.5; 38 | circle.shouldRasterize = YES; 39 | circle.rasterizationScale = [[UIScreen mainScreen] scale]; 40 | [layer addSublayer:circle]; 41 | 42 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 43 | anim.removedOnCompletion = NO; 44 | anim.repeatCount = HUGE_VALF; 45 | anim.duration = 1.2; 46 | anim.keyTimes = @[@(0.0), @(0.5), @(1.0)]; 47 | 48 | anim.timingFunctions = @[ 49 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 50 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 51 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 52 | ]; 53 | 54 | anim.values = @[ 55 | [NSValue valueWithCATransform3D:RTSpinKit3DRotationWithPerspective(1.0/120.0, 0, 0, 0, 0)], 56 | [NSValue valueWithCATransform3D:RTSpinKit3DRotationWithPerspective(1.0/120.0, M_PI, 0.0, 1.0, 0.0)], 57 | [NSValue valueWithCATransform3D:RTSpinKit3DRotationWithPerspective(1.0/120.0, M_PI, 0.0, 0.0, 1.0)] 58 | ]; 59 | 60 | [circle addAnimation:anim forKey:@"spinkit-anim"]; 61 | } 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitFadingCircleAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitFadingCircleAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitFadingCircleAnimation.h" 26 | #include 27 | 28 | @implementation RTSpinKitFadingCircleAnimation 29 | 30 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 31 | { 32 | NSTimeInterval beginTime = CACurrentMediaTime(); 33 | 34 | CGFloat radius = size.width / 2; 35 | CGFloat squareSize = size.width / 6; 36 | 37 | for (NSInteger i=0; i < 12; i+=1) { 38 | CALayer *square = [CALayer layer]; 39 | 40 | CGFloat angle = i * (M_PI_2/3.0); 41 | CGFloat x = radius + sinf(angle) * radius; 42 | CGFloat y = radius - cosf(angle) * radius; 43 | square.frame = CGRectMake(x, y, squareSize, squareSize); 44 | square.backgroundColor = color.CGColor; 45 | square.anchorPoint = CGPointMake(0.5, 0.5); 46 | square.opacity = 0.0; 47 | 48 | CATransform3D transform = CATransform3DIdentity; 49 | transform = CATransform3DRotate(transform, angle, 0, 0, 1.0); 50 | square.transform = transform; 51 | 52 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; 53 | anim.removedOnCompletion = NO; 54 | anim.repeatCount = HUGE_VALF; 55 | anim.duration = 1.0; 56 | anim.beginTime = beginTime + (0.084 * i); 57 | anim.keyTimes = @[@(0.0), @(0.5), @(1.0)]; 58 | 59 | anim.timingFunctions = @[ 60 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 61 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 62 | ]; 63 | 64 | anim.values = @[@(1.0), @(0.0), @(0.0)]; 65 | 66 | [layer addSublayer:square]; 67 | [square addAnimation:anim forKey:@"spinkit-anim"]; 68 | } 69 | } 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitBounceAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitBounceAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitBounceAnimation.h" 26 | 27 | @implementation RTSpinKitBounceAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime(); 32 | 33 | for (NSInteger i=0; i < 2; i+=1) { 34 | CALayer *circle = [CALayer layer]; 35 | circle.frame = CGRectInset(CGRectMake(0.0, 0.0, size.width, size.height), 2.0, 2.0); 36 | circle.backgroundColor = color.CGColor; 37 | circle.anchorPoint = CGPointMake(0.5, 0.5); 38 | circle.opacity = 0.6; 39 | circle.cornerRadius = CGRectGetHeight(circle.bounds) * 0.5; 40 | circle.transform = CATransform3DMakeScale(0.0, 0.0, 0.0); 41 | 42 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 43 | anim.removedOnCompletion = NO; 44 | anim.repeatCount = HUGE_VALF; 45 | anim.duration = 2.0; 46 | anim.beginTime = beginTime - (1.0 * i); 47 | anim.keyTimes = @[@(0.0), @(0.5), @(1.0)]; 48 | 49 | anim.timingFunctions = @[ 50 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 51 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 52 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 53 | ]; 54 | 55 | anim.values = @[ 56 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)], 57 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)], 58 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)] 59 | ]; 60 | 61 | [layer addSublayer:circle]; 62 | [circle addAnimation:anim forKey:@"spinkit-anim"]; 63 | } 64 | } 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitWaveAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitWaveAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitWaveAnimation.h" 26 | 27 | @implementation RTSpinKitWaveAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime() + 1.2; 32 | CGFloat barWidth = size.width / 5.0; 33 | 34 | for (NSInteger i=0; i < 5; i+=1) { 35 | CALayer *bar = [CALayer layer]; 36 | bar.backgroundColor = color.CGColor; 37 | bar.frame = CGRectMake(barWidth * i, 0.0, barWidth - 3.0, size.height); 38 | bar.transform = CATransform3DMakeScale(1.0, 0.3, 0.0); 39 | 40 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 41 | anim.removedOnCompletion = NO; 42 | anim.beginTime = beginTime - (1.2 - (0.1 * i)); 43 | anim.duration = 1.2; 44 | anim.repeatCount = HUGE_VALF; 45 | 46 | anim.keyTimes = @[@(0.0), @(0.2), @(0.4), @(1.0)]; 47 | 48 | anim.timingFunctions = @[ 49 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 50 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 51 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 52 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 53 | ]; 54 | 55 | anim.values = @[ 56 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 0.4, 0.0)], 57 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)], 58 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 0.4, 0.0)], 59 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 0.4, 0.0)] 60 | ]; 61 | 62 | [bar addAnimation:anim forKey:@"spinkit-anim"]; 63 | 64 | [layer addSublayer:bar]; 65 | } 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitThreeBounceAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitThreeBounceAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitThreeBounceAnimation.h" 26 | 27 | @implementation RTSpinKitThreeBounceAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime(); 32 | 33 | CGFloat offset = size.width / 8; 34 | CGFloat circleSize = offset * 2; 35 | 36 | for (NSInteger i=0; i < 3; i+=1) { 37 | CALayer *circle = [CALayer layer]; 38 | circle.frame = CGRectMake(i * 3 * offset, size.height / 2, circleSize, circleSize); 39 | circle.backgroundColor = color.CGColor; 40 | circle.anchorPoint = CGPointMake(0.5, 0.5); 41 | circle.cornerRadius = CGRectGetHeight(circle.bounds) * 0.5; 42 | circle.transform = CATransform3DMakeScale(0.0, 0.0, 0.0); 43 | 44 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 45 | anim.removedOnCompletion = NO; 46 | anim.repeatCount = HUGE_VALF; 47 | anim.duration = 1.5; 48 | anim.beginTime = beginTime + (0.25 * i); 49 | anim.keyTimes = @[@(0.0), @(0.5), @(1.0)]; 50 | 51 | anim.timingFunctions = @[ 52 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 53 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 54 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 55 | ]; 56 | 57 | anim.values = @[ 58 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)], 59 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)], 60 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)] 61 | ]; 62 | 63 | [layer addSublayer:circle]; 64 | [circle addAnimation:anim forKey:@"spinkit-anim"]; 65 | } 66 | } 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitArcAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitArcAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitArcAnimation.h" 26 | 27 | @implementation RTSpinKitArcAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer *)layer withSize:(CGSize)size color:(UIColor *)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime(); 32 | 33 | CGRect frame = CGRectInset(CGRectMake(0.0, 0.0, size.width, size.height), 2.0, 2.0); 34 | CGFloat radius = CGRectGetWidth(frame) / 2.0; 35 | CGPoint center = CGPointMake(CGRectGetMidX(frame), CGRectGetMidY(frame)); 36 | 37 | CALayer *arc = [CALayer layer]; 38 | arc.frame = CGRectMake(0.0, 0.0, size.width, size.height); 39 | arc.backgroundColor = color.CGColor; 40 | arc.anchorPoint = CGPointMake(0.5, 0.5); 41 | arc.cornerRadius = CGRectGetWidth(arc.frame) / 2.0; 42 | 43 | CGMutablePathRef path = CGPathCreateMutable(); 44 | CGPathAddArc(path, NULL, center.x, center.y, radius, 0.0, ((M_PI * 2.0) / 360.0) * 300.0, NO); 45 | 46 | CAShapeLayer *mask = [CAShapeLayer layer]; 47 | mask.frame = CGRectMake(0.0, 0.0, size.width, size.height); 48 | mask.path = path; 49 | mask.strokeColor = [[UIColor blackColor] CGColor]; 50 | mask.fillColor = [[UIColor clearColor] CGColor]; 51 | mask.lineWidth = 2.0; 52 | mask.cornerRadius = frame.size.width / 2.0; 53 | mask.anchorPoint = CGPointMake(0.5, 0.5); 54 | 55 | arc.mask = mask; 56 | 57 | CGPathRelease(path); 58 | 59 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; 60 | anim.removedOnCompletion = NO; 61 | anim.repeatCount = HUGE_VALF; 62 | anim.duration = 0.8; 63 | anim.beginTime = beginTime; 64 | anim.timeOffset = [[NSDate date] timeIntervalSince1970]; 65 | anim.keyTimes = @[@(0.0), @(0.5), @(1.0)]; 66 | 67 | anim.values = @[ 68 | [NSNumber numberWithDouble:0.0], 69 | [NSNumber numberWithDouble:M_PI], 70 | [NSNumber numberWithDouble:M_PI * 2.0] 71 | ]; 72 | 73 | [layer addSublayer:arc]; 74 | [arc addAnimation:anim forKey:@"spinkit-anim"]; 75 | } 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitCircleAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitCircleAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitCircleAnimation.h" 26 | #include 27 | 28 | @implementation RTSpinKitCircleAnimation 29 | 30 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 31 | { 32 | NSTimeInterval beginTime = CACurrentMediaTime(); 33 | 34 | CGFloat radius = size.width / 2; 35 | CGFloat circleSize = size.width / 4; 36 | 37 | for (NSInteger i=0; i < 8; i+=1) { 38 | CALayer *circle = [CALayer layer]; 39 | 40 | CGFloat angle = i * M_PI_4; 41 | CGFloat x = radius + sinf(angle) * radius; 42 | CGFloat y = radius - cosf(angle) * radius; 43 | circle.frame = CGRectMake(x, y, circleSize, circleSize); 44 | circle.backgroundColor = color.CGColor; 45 | circle.anchorPoint = CGPointMake(0.5, 0.5); 46 | circle.cornerRadius = CGRectGetHeight(circle.bounds) * 0.5; 47 | circle.transform = CATransform3DMakeScale(0.0, 0.0, 0.0); 48 | 49 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 50 | anim.removedOnCompletion = NO; 51 | anim.repeatCount = HUGE_VALF; 52 | anim.duration = 1.0; 53 | anim.beginTime = beginTime + (0.125 * i); 54 | anim.keyTimes = @[@(0.0), @(0.5), @(1.0)]; 55 | 56 | anim.timingFunctions = @[ 57 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 58 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 59 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 60 | ]; 61 | 62 | anim.values = @[ 63 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)], 64 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)], 65 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)] 66 | ]; 67 | 68 | [layer addSublayer:circle]; 69 | [circle addAnimation:anim forKey:@"spinkit-anim"]; 70 | } 71 | } 72 | 73 | @end 74 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitFadingCircleAltAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitFadingCircleAltAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitFadingCircleAltAnimation.h" 26 | #include 27 | 28 | static const CGFloat kRTSpinKitDegToRad = 0.0174532925; 29 | 30 | @implementation RTSpinKitFadingCircleAltAnimation 31 | 32 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color { 33 | NSTimeInterval beginTime = CACurrentMediaTime() ; 34 | 35 | CGFloat radius = size.width / 2; 36 | 37 | for (NSInteger i=0; i < 12; i+=1) { 38 | CALayer *circle = [CALayer layer]; 39 | circle.backgroundColor = color.CGColor; 40 | circle.anchorPoint = CGPointMake(0.5, 0.5); 41 | circle.frame = CGRectMake(radius + cosf(kRTSpinKitDegToRad * (30.0 * i)) * radius , radius + sinf(kRTSpinKitDegToRad * (30.0 * i)) * radius, radius / 2, radius / 2); 42 | circle.shouldRasterize = YES; 43 | circle.rasterizationScale = [[UIScreen mainScreen] scale]; 44 | circle.cornerRadius = CGRectGetHeight(circle.bounds) * 0.5; 45 | 46 | CAKeyframeAnimation* transformAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 47 | 48 | transformAnimation.values = @[ 49 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)], 50 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)] 51 | ]; 52 | 53 | CAKeyframeAnimation* opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"]; 54 | 55 | opacityAnimation.values = @[ 56 | @(1.0), 57 | @(0.0) 58 | ]; 59 | 60 | CAAnimationGroup* animationGroup = [[CAAnimationGroup alloc] init]; 61 | animationGroup.removedOnCompletion = NO; 62 | animationGroup.repeatCount = HUGE_VALF; 63 | animationGroup.duration = 1.2; 64 | animationGroup.beginTime = beginTime - (1.2 - (0.1 * i)); 65 | animationGroup.animations = @[transformAnimation, opacityAnimation]; 66 | [circle addAnimation:animationGroup forKey:@"spinkit-anim"]; 67 | [layer addSublayer:circle]; 68 | } 69 | } 70 | 71 | @end 72 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKit9CubeGridAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKit9CubeGridAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKit9CubeGridAnimation.h" 26 | 27 | @implementation RTSpinKit9CubeGridAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime(); 32 | 33 | CGFloat squareSize = size.width / 3; 34 | 35 | for (NSInteger sum = 0; sum < 5; sum++) 36 | { 37 | for (NSInteger x = 0; x < 3; x++) 38 | { 39 | for (NSInteger y = 0; y < 3; y++) 40 | { 41 | if (x + y == sum) 42 | { 43 | CALayer *square = [CALayer layer]; 44 | square.frame = CGRectMake(x * squareSize, y * squareSize, squareSize, squareSize); 45 | square.backgroundColor = color.CGColor; 46 | square.transform = CATransform3DMakeScale(0.0, 0.0, 0.0); 47 | 48 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 49 | anim.removedOnCompletion = NO; 50 | anim.repeatCount = HUGE_VALF; 51 | anim.duration = 1.5; 52 | anim.beginTime = beginTime + (0.1 * sum); 53 | anim.keyTimes = @[@(0.0), @(0.4), @(0.6), @(1.0)]; 54 | 55 | anim.timingFunctions = @[ 56 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 57 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 58 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 59 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 60 | ]; 61 | 62 | anim.values = @[ 63 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)], 64 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)], 65 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)], 66 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)] 67 | ]; 68 | 69 | [layer addSublayer:square]; 70 | [square addAnimation:anim forKey:@"spinkit-anim"]; 71 | } 72 | } 73 | } 74 | } 75 | } 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitWordPressAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitWordPressAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitWordPressAnimation.h" 26 | 27 | @implementation RTSpinKitWordPressAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime(); 32 | 33 | CALayer *spinner = [CALayer layer]; 34 | spinner.frame = CGRectMake(0.0, 0.0, size.width, size.height); 35 | spinner.anchorPoint = CGPointMake(0.5, 0.5); 36 | spinner.transform = CATransform3DIdentity; 37 | spinner.backgroundColor = color.CGColor; 38 | spinner.shouldRasterize = YES; 39 | spinner.rasterizationScale = [[UIScreen mainScreen] scale]; 40 | [layer addSublayer:spinner]; 41 | 42 | CAKeyframeAnimation *spinnerAnim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 43 | spinnerAnim.removedOnCompletion = NO; 44 | spinnerAnim.repeatCount = HUGE_VALF; 45 | spinnerAnim.duration = 1.0; 46 | spinnerAnim.beginTime = beginTime; 47 | spinnerAnim.keyTimes = @[@(0.0), @(0.25), @(0.5), @(0.75), @(1.0)]; 48 | 49 | spinnerAnim.timingFunctions = @[ 50 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 51 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 52 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 53 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 54 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear] 55 | ]; 56 | 57 | spinnerAnim.values = @[ 58 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(0, 0, 0, 1.0)], 59 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 0, 0, 1.0)], 60 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0, 0, 1.0)], 61 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(3 * M_PI_2, 0, 0, 1.0)], 62 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(2 * M_PI, 0, 0, 1.0)] 63 | ]; 64 | 65 | [spinner addAnimation:spinnerAnim forKey:@"spinkit-anim"]; 66 | 67 | CAShapeLayer *circleMask = [CAShapeLayer layer]; 68 | circleMask.frame = spinner.bounds; 69 | circleMask.fillColor = [UIColor blackColor].CGColor; 70 | circleMask.anchorPoint = CGPointMake(0.5, 0.5); 71 | 72 | CGMutablePathRef path = CGPathCreateMutable(); 73 | CGPathAddEllipseInRect(path, nil, spinner.frame); 74 | 75 | CGFloat circleSize = size.width * 0.25; 76 | CGPathAddEllipseInRect(path, nil, CGRectMake(CGRectGetMidX(spinner.frame) - circleSize/2, 3.0, circleSize, circleSize)); 77 | CGPathCloseSubpath(path); 78 | circleMask.path = path; 79 | circleMask.fillRule = kCAFillRuleEvenOdd; 80 | CGPathRelease(path); 81 | 82 | spinner.mask = circleMask; 83 | } 84 | 85 | @end 86 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitArcAltAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitArcAltAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitArcAltAnimation.h" 26 | 27 | @implementation RTSpinKitArcAltAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer *)layer withSize:(CGSize)size color:(UIColor *)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime(); 32 | 33 | CGRect frame = CGRectInset(CGRectMake(0.0, 0.0, size.width, size.height), 2.0, 2.0); 34 | CGFloat radius = CGRectGetWidth(frame) / 2.0; 35 | CGPoint center = CGPointMake(CGRectGetMidX(frame), CGRectGetMidY(frame)); 36 | 37 | CALayer *arc = [CALayer layer]; 38 | arc.frame = CGRectMake(0.0, 0.0, size.width, size.height); 39 | arc.backgroundColor = color.CGColor; 40 | arc.anchorPoint = CGPointMake(0.5, 0.5); 41 | arc.cornerRadius = CGRectGetWidth(arc.frame) / 2.0; 42 | 43 | CGMutablePathRef path = CGPathCreateMutable(); 44 | CGPathAddArc(path, NULL, center.x, center.y, radius, 0.0, M_PI * 2.0, NO); 45 | 46 | CAShapeLayer *mask = [CAShapeLayer layer]; 47 | mask.frame = CGRectMake(0.0, 0.0, size.width, size.height); 48 | mask.path = path; 49 | mask.strokeColor = [[UIColor blackColor] CGColor]; 50 | mask.fillColor = [[UIColor clearColor] CGColor]; 51 | mask.lineWidth = 2.0; 52 | mask.cornerRadius = frame.size.width / 2.0; 53 | mask.anchorPoint = CGPointMake(0.5, 0.5); 54 | 55 | arc.mask = mask; 56 | 57 | CGPathRelease(path); 58 | 59 | CGFloat duration = 1.2; 60 | 61 | CAKeyframeAnimation *strokeEndAnim = [CAKeyframeAnimation animationWithKeyPath:@"strokeEnd"]; 62 | strokeEndAnim.removedOnCompletion = NO; 63 | strokeEndAnim.repeatCount = HUGE_VALF; 64 | strokeEndAnim.duration = duration; 65 | strokeEndAnim.beginTime = beginTime; 66 | strokeEndAnim.keyTimes = @[@(0.0), @(0.4), @(1.0)]; 67 | strokeEndAnim.values = @[@(0.0), @(1.0), @(1.0)]; 68 | strokeEndAnim.timingFunctions = @[ 69 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut], 70 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut], 71 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut], 72 | ]; 73 | 74 | CAKeyframeAnimation *strokeStartAnim = [CAKeyframeAnimation animationWithKeyPath:@"strokeStart"]; 75 | strokeStartAnim.removedOnCompletion = NO; 76 | strokeStartAnim.repeatCount = HUGE_VALF; 77 | strokeStartAnim.duration = duration; 78 | strokeStartAnim.beginTime = beginTime; 79 | strokeStartAnim.keyTimes = @[@(0.0), @(0.6), @(1.0)]; 80 | strokeStartAnim.values = @[@(0.0), @(0.0), @(1.0)]; 81 | strokeStartAnim.timingFunctions = @[ 82 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 83 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 84 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 85 | ]; 86 | 87 | [layer addSublayer:arc]; 88 | [mask addAnimation:strokeStartAnim forKey:@"spinkit-anim.start"]; 89 | [mask addAnimation:strokeEndAnim forKey:@"spinkit-anim.end"]; 90 | } 91 | 92 | @end 93 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitWanderingCubesAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitWanderingCubesAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitWanderingCubesAnimation.h" 26 | #include 27 | 28 | static const CGFloat kRTSpinKitDegToRad = 0.0174532925; 29 | 30 | @implementation RTSpinKitWanderingCubesAnimation 31 | 32 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 33 | { 34 | NSTimeInterval beginTime = CACurrentMediaTime(); 35 | CGFloat cubeSize = floor(size.width / 3.0); 36 | CGFloat widthMinusCubeSize = size.width - cubeSize; 37 | 38 | for (NSInteger i=0; i<2; i+=1) { 39 | CALayer *cube = [CALayer layer]; 40 | cube.backgroundColor = color.CGColor; 41 | cube.frame = CGRectMake(0.0, 0.0, cubeSize, cubeSize); 42 | cube.anchorPoint = CGPointMake(0.5, 0.5); 43 | cube.shouldRasterize = YES; 44 | cube.rasterizationScale = [[UIScreen mainScreen] scale]; 45 | 46 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 47 | anim.removedOnCompletion = NO; 48 | anim.beginTime = beginTime - (i * 0.9); 49 | anim.duration = 1.8; 50 | anim.repeatCount = HUGE_VALF; 51 | 52 | anim.keyTimes = @[@(0.0), @(0.25), @(0.50), @(0.75), @(1.0)]; 53 | 54 | anim.timingFunctions = @[ 55 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 56 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 57 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 58 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 59 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 60 | ]; 61 | 62 | CATransform3D t0 = CATransform3DIdentity; 63 | 64 | CATransform3D t1 = CATransform3DMakeTranslation(widthMinusCubeSize, 0.0, 0.0); 65 | t1 = CATransform3DRotate(t1, -90.0 * kRTSpinKitDegToRad, 0.0, 0.0, 1.0); 66 | t1 = CATransform3DScale(t1, 0.5, 0.5, 1.0); 67 | 68 | CATransform3D t2 = CATransform3DMakeTranslation(widthMinusCubeSize, widthMinusCubeSize, 0.0); 69 | t2 = CATransform3DRotate(t2, -180.0 * kRTSpinKitDegToRad, 0.0, 0.0, 1.0); 70 | t2 = CATransform3DScale(t2, 1.0, 1.0, 1.0); 71 | 72 | CATransform3D t3 = CATransform3DMakeTranslation(0.0, widthMinusCubeSize, 0.0); 73 | t3 = CATransform3DRotate(t3, -270.0 * kRTSpinKitDegToRad, 0.0, 0.0, 1.0); 74 | t3 = CATransform3DScale(t3, 0.5, 0.5, 1.0); 75 | 76 | CATransform3D t4 = CATransform3DMakeTranslation(0.0, 0.0, 0.0); 77 | t4 = CATransform3DRotate(t4, -360.0 * kRTSpinKitDegToRad, 0.0, 0.0, 1.0); 78 | t4 = CATransform3DScale(t4, 1.0, 1.0, 1.0); 79 | 80 | anim.values = @[[NSValue valueWithCATransform3D:t0], 81 | [NSValue valueWithCATransform3D:t1], 82 | [NSValue valueWithCATransform3D:t2], 83 | [NSValue valueWithCATransform3D:t3], 84 | [NSValue valueWithCATransform3D:t4]]; 85 | 86 | [layer addSublayer:cube]; 87 | [cube addAnimation:anim forKey:@"spinkit-anim"]; 88 | } 89 | } 90 | 91 | @end 92 | -------------------------------------------------------------------------------- /SpinKit/RTSpinKitUtils.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitUtils.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitUtils.h" 26 | 27 | // Animations 28 | #import "RTSpinKit9CubeGridAnimation.h" 29 | #import "RTSpinKitBounceAnimation.h" 30 | #import "RTSpinKitChasingDotsAnimation.h" 31 | #import "RTSpinKitCircleAnimation.h" 32 | #import "RTSpinKitCircleFlipAnimation.h" 33 | #import "RTSpinKitFadingCircleAltAnimation.h" 34 | #import "RTSpinKitFadingCircleAnimation.h" 35 | #import "RTSpinKitPlaneAnimation.h" 36 | #import "RTSpinKitPulseAnimation.h" 37 | #import "RTSpinKitThreeBounceAnimation.h" 38 | #import "RTSpinKitWanderingCubesAnimation.h" 39 | #import "RTSpinKitWaveAnimation.h" 40 | #import "RTSpinKitWordPressAnimation.h" 41 | #import "RTSpinKitArcAnimation.h" 42 | #import "RTSpinKitArcAltAnimation.h" 43 | 44 | CATransform3D RTSpinKit3DRotationWithPerspective(CGFloat perspective, 45 | CGFloat angle, 46 | CGFloat x, 47 | CGFloat y, 48 | CGFloat z) 49 | { 50 | CATransform3D transform = CATransform3DIdentity; 51 | transform.m34 = perspective; 52 | return CATransform3DRotate(transform, angle, x, y, z); 53 | } 54 | 55 | NSObject* RTSpinKitAnimationFromStyle(RTSpinKitViewStyle style) 56 | { 57 | switch (style) { 58 | case RTSpinKitViewStyleCustom: 59 | return nil; 60 | 61 | case RTSpinKitViewStylePlane: 62 | return [[RTSpinKitPlaneAnimation alloc] init]; 63 | 64 | case RTSpinKitViewStyleCircleFlip: 65 | return [[RTSpinKitCircleFlipAnimation alloc] init]; 66 | 67 | case RTSpinKitViewStyleBounce: 68 | return [[RTSpinKitBounceAnimation alloc] init]; 69 | 70 | case RTSpinKitViewStyleWave: 71 | return [[RTSpinKitWaveAnimation alloc] init]; 72 | 73 | case RTSpinKitViewStyleWanderingCubes: 74 | return [[RTSpinKitWanderingCubesAnimation alloc] init]; 75 | 76 | case RTSpinKitViewStylePulse: 77 | return [[RTSpinKitPulseAnimation alloc] init]; 78 | 79 | case RTSpinKitViewStyleChasingDots: 80 | return [[RTSpinKitChasingDotsAnimation alloc] init]; 81 | 82 | case RTSpinKitViewStyleThreeBounce: 83 | return [[RTSpinKitThreeBounceAnimation alloc] init]; 84 | 85 | case RTSpinKitViewStyleCircle: 86 | return [[RTSpinKitCircleAnimation alloc] init]; 87 | 88 | case RTSpinKitViewStyle9CubeGrid: 89 | return [[RTSpinKit9CubeGridAnimation alloc] init]; 90 | 91 | case RTSpinKitViewStyleWordPress: 92 | return [[RTSpinKitWordPressAnimation alloc] init]; 93 | 94 | case RTSpinKitViewStyleFadingCircle: 95 | return [[RTSpinKitFadingCircleAnimation alloc] init]; 96 | 97 | case RTSpinKitViewStyleFadingCircleAlt: 98 | return [[RTSpinKitFadingCircleAltAnimation alloc] init]; 99 | 100 | case RTSpinKitViewStyleArc: 101 | return [[RTSpinKitArcAnimation alloc] init]; 102 | 103 | case RTSpinKitViewStyleArcAlt: 104 | return [[RTSpinKitArcAltAnimation alloc] init]; 105 | 106 | default: 107 | NSCAssert(NO, @"Unicorns exist"); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /SpinKit/Animations/RTSpinKitChasingDotsAnimation.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitChasingDotsAnimation.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitChasingDotsAnimation.h" 26 | 27 | @implementation RTSpinKitChasingDotsAnimation 28 | 29 | -(void)setupSpinKitAnimationInLayer:(CALayer*)layer withSize:(CGSize)size color:(UIColor*)color 30 | { 31 | NSTimeInterval beginTime = CACurrentMediaTime(); 32 | 33 | CALayer *spinner = [CALayer layer]; 34 | spinner.frame = CGRectMake(0.0, 0.0, size.width, size.height); 35 | spinner.anchorPoint = CGPointMake(0.5, 0.5); 36 | spinner.transform = CATransform3DIdentity; 37 | spinner.shouldRasterize = YES; 38 | spinner.rasterizationScale = [[UIScreen mainScreen] scale]; 39 | [layer addSublayer:spinner]; 40 | 41 | CAKeyframeAnimation *spinnerAnim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 42 | spinnerAnim.removedOnCompletion = NO; 43 | spinnerAnim.repeatCount = HUGE_VALF; 44 | spinnerAnim.duration = 2.0; 45 | spinnerAnim.beginTime = beginTime; 46 | spinnerAnim.keyTimes = @[@(0.0), @(0.25), @(0.5), @(0.75), @(1.0)]; 47 | 48 | spinnerAnim.timingFunctions = @[ 49 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 50 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 51 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 52 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear], 53 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear] 54 | ]; 55 | 56 | spinnerAnim.values = @[ 57 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(0, 0, 0, 1.0)], 58 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 0, 0, 1.0)], 59 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0, 0, 1.0)], 60 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(3 * M_PI_2, 0, 0, 1.0)], 61 | [NSValue valueWithCATransform3D:CATransform3DMakeRotation(2 * M_PI, 0, 0, 1.0)] 62 | ]; 63 | 64 | [spinner addAnimation:spinnerAnim forKey:@"spinner-anim"]; 65 | 66 | for (NSInteger i=0; i < 2; i+=1) { 67 | CALayer *circle = [CALayer layer]; 68 | CGFloat offset = size.width * 0.3 * i; 69 | circle.frame = CGRectOffset(CGRectApplyAffineTransform(CGRectMake(0.0, 0.0, size.width, size.height), CGAffineTransformMakeScale(0.6, 0.6)), offset, offset); 70 | circle.backgroundColor = color.CGColor; 71 | circle.anchorPoint = CGPointMake(0.5, 0.5); 72 | circle.cornerRadius = CGRectGetHeight(circle.bounds) * 0.5; 73 | circle.transform = CATransform3DMakeScale(0.0, 0.0, 0.0); 74 | 75 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 76 | anim.removedOnCompletion = NO; 77 | anim.repeatCount = HUGE_VALF; 78 | anim.duration = 2.0; 79 | anim.beginTime = beginTime - (1.0 * i); 80 | anim.keyTimes = @[@(0.0), @(0.5), @(1.0)]; 81 | 82 | anim.timingFunctions = @[ 83 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 84 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], 85 | [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut] 86 | ]; 87 | 88 | anim.values = @[ 89 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)], 90 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 0.0)], 91 | [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0.0)] 92 | ]; 93 | 94 | [spinner addSublayer:circle]; 95 | [circle addAnimation:anim forKey:@"spinkit-anim"]; 96 | } 97 | } 98 | 99 | @end 100 | -------------------------------------------------------------------------------- /SpinKit/RTSpinKitView.h: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitView.h 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import 26 | 27 | typedef NS_ENUM(NSInteger, RTSpinKitViewStyle) { 28 | RTSpinKitViewStyleCustom, 29 | RTSpinKitViewStylePlane, 30 | RTSpinKitViewStyleCircleFlip, 31 | RTSpinKitViewStyleBounce, 32 | RTSpinKitViewStyleWave, 33 | RTSpinKitViewStyleWanderingCubes, 34 | RTSpinKitViewStylePulse, 35 | RTSpinKitViewStyleChasingDots, 36 | RTSpinKitViewStyleThreeBounce, 37 | RTSpinKitViewStyleCircle, 38 | RTSpinKitViewStyle9CubeGrid, 39 | RTSpinKitViewStyleWordPress, 40 | RTSpinKitViewStyleFadingCircle, 41 | RTSpinKitViewStyleFadingCircleAlt, 42 | RTSpinKitViewStyleArc, 43 | RTSpinKitViewStyleArcAlt 44 | }; 45 | 46 | @protocol RTSpinKitAnimating; 47 | 48 | /** 49 | The `RTSpinKitView` defines an activity indicator view. It's interface is very similar 50 | to `UIActivityIndicatorView`. 51 | */ 52 | @interface RTSpinKitView : UIView 53 | 54 | /** 55 | The color of the activity indicator. 56 | */ 57 | @property (nonatomic, strong) UIColor *color; 58 | 59 | /** 60 | Whether or not the receiver should be hidden when not animating. 61 | */ 62 | @property (nonatomic, assign) BOOL hidesWhenStopped; 63 | 64 | /** 65 | The style for the activity indicator. 66 | 67 | @see RTSpinKitViewStyle 68 | */ 69 | @property (nonatomic, assign) RTSpinKitViewStyle style; 70 | 71 | /** 72 | The size of the spinner. The view will be automatically resized to fit the activity indicator. 73 | */ 74 | @property (nonatomic, assign) CGFloat spinnerSize; 75 | 76 | @property (nonatomic, assign, getter = isStopped) BOOL stopped; 77 | 78 | /** 79 | Returns an object initialized from data in a given unarchiver. 80 | 81 | @return The initialized SpinKit view using the data in aDecoder; 82 | */ 83 | - (instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER; 84 | 85 | /** 86 | Initializes and returns an activity indicator object. 87 | 88 | @param style The style of the activity indicator. 89 | 90 | @return The newly-initialized SpinKit view. 91 | */ 92 | -(instancetype)initWithStyle:(RTSpinKitViewStyle)style; 93 | 94 | /** 95 | Initializes and returns an activity indicator object. 96 | 97 | @param style The style of the activity indicator. 98 | @param color The color of the activity indicator. 99 | 100 | @return The newly-initialized SpinKit view. 101 | */ 102 | -(instancetype)initWithStyle:(RTSpinKitViewStyle)style 103 | color:(UIColor*)color; 104 | 105 | /** 106 | Initializes and returns an activity indicator object. 107 | 108 | @param animator The RTSpinKitAnimating conforming animator object that will perform the animation. 109 | @param color The color of the activity indicator. 110 | @param spinnerSize The size of the spinner. 111 | 112 | @return The newly-initialized SpinKit view. 113 | */ 114 | -(instancetype)initWithAnimator:(id)animator 115 | color:(UIColor*)color 116 | spinnerSize:(CGFloat)spinnerSize; 117 | 118 | /** 119 | Initializes and returns an activity indicator object. 120 | 121 | Designated initializer. 122 | 123 | @param style The style of the activity indicator. 124 | @param color The color of the activity indicator. 125 | @param spinnerSize The size of the spinner. 126 | 127 | @return The newly-initialized SpinKit view. 128 | */ 129 | -(instancetype)initWithStyle:(RTSpinKitViewStyle)style 130 | color:(UIColor*)color 131 | spinnerSize:(CGFloat)spinnerSize NS_DESIGNATED_INITIALIZER; 132 | 133 | /** 134 | Starts the animation of the activity indicator. 135 | */ 136 | -(void)startAnimating; 137 | 138 | /** 139 | Stops the animation of the activity indicator. 140 | */ 141 | -(void)stopAnimating; 142 | 143 | /** 144 | Returns whether the receiver is animating. 145 | 146 | @return `YES` if the receiver is animating, otherwise `NO`. 147 | */ 148 | -(BOOL)isAnimating; 149 | 150 | /** 151 | Sets the color of the spinner. 152 | 153 | @param color The desired color for the spinner. 154 | @param animated Whether or not to animate. 155 | */ 156 | -(void)setColor:(UIColor *)color animated:(BOOL)animated; 157 | 158 | @end 159 | -------------------------------------------------------------------------------- /Demo/SpinKit/RTTestViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTTestViewController.m 3 | // SpinKit 4 | // 5 | // Created by Ramon Torres on 1/1/14. 6 | // Copyright (c) 2014 Ramon Torres. All rights reserved. 7 | // 8 | 9 | #import "RTTestViewController.h" 10 | #import "RTSpinKitView.h" 11 | 12 | @interface RTTestViewController () 13 | @property (nonatomic, assign) NSInteger numberOfSpinners; 14 | @end 15 | 16 | @implementation RTTestViewController 17 | 18 | -(void)loadView { 19 | self.numberOfSpinners = 0; 20 | 21 | UIScrollView *scrollView = [[UIScrollView alloc] init]; 22 | scrollView.pagingEnabled = YES; 23 | scrollView.alwaysBounceVertical = NO; 24 | scrollView.alwaysBounceHorizontal = YES; 25 | scrollView.directionalLockEnabled = YES; 26 | scrollView.backgroundColor = [UIColor darkGrayColor]; 27 | self.view = scrollView; 28 | 29 | [self insertSpinnerOfStyle: RTSpinKitViewStylePlane 30 | backgroundColor:[UIColor colorWithRed:0.827 green:0.329 blue:0 alpha:1.0] 31 | label:@"Plane"]; 32 | 33 | [self insertSpinnerOfStyle: RTSpinKitViewStyleBounce 34 | backgroundColor:[UIColor colorWithRed:0.173 green:0.243 blue:0.314 alpha:1.0] 35 | label:@"Bounce"]; 36 | 37 | [self insertSpinnerOfStyle: RTSpinKitViewStyleWave 38 | backgroundColor:[UIColor colorWithRed:0.102 green:0.737 blue:0.612 alpha:1.0] 39 | label:@"Wave"]; 40 | 41 | [self insertSpinnerOfStyle: RTSpinKitViewStyleWanderingCubes 42 | backgroundColor:[UIColor colorWithRed:0.161 green:0.502 blue:0.725 alpha:1.0] 43 | label:@"WanderingCubes"]; 44 | 45 | [self insertSpinnerOfStyle: RTSpinKitViewStylePulse 46 | backgroundColor:[UIColor colorWithRed:0.498 green:0.549 blue:0.553 alpha:1.0] 47 | label:@"Pulse"]; 48 | 49 | [self insertSpinnerOfStyle: RTSpinKitViewStyleCircleFlip 50 | backgroundColor:[UIColor colorWithWhite:0.200 alpha:1.000] 51 | label:@"CircleFlip"]; 52 | 53 | [self insertSpinnerOfStyle: RTSpinKitViewStyleChasingDots 54 | backgroundColor:[UIColor colorWithRed:0.95 green:0.77 blue:0.06 alpha:1.0] 55 | label:@"ChasingDots"]; 56 | 57 | [self insertSpinnerOfStyle: RTSpinKitViewStyleThreeBounce 58 | backgroundColor:[UIColor colorWithRed:0.83 green:0.33 blue:0.0 alpha:1.0] 59 | label:@"ThreeBounce"]; 60 | 61 | [self insertSpinnerOfStyle: RTSpinKitViewStyleCircle 62 | backgroundColor:[UIColor colorWithRed:0.15 green:0.68 blue:0.38 alpha:1.0] 63 | label:@"Circle"]; 64 | 65 | [self insertSpinnerOfStyle: RTSpinKitViewStyle9CubeGrid 66 | backgroundColor:[UIColor colorWithRed:0.68 green:0.15 blue:0.47 alpha:1.0] 67 | label:@"9CubeGrid"]; 68 | 69 | [self insertSpinnerOfStyle: RTSpinKitViewStyleWordPress 70 | backgroundColor:[UIColor colorWithRed:0.08 green:0.57 blue:0.86 alpha:1.0] 71 | label:@"WordPress"]; 72 | 73 | [self insertSpinnerOfStyle: RTSpinKitViewStyleFadingCircle 74 | backgroundColor:[UIColor colorWithRed:0.0 green:0.60 blue:0.24 alpha:1.0] 75 | label:@"FadingCircle"]; 76 | 77 | [self insertSpinnerOfStyle: RTSpinKitViewStyleFadingCircleAlt 78 | backgroundColor:[UIColor colorWithRed:0.60 green:0.0 blue:0.0 alpha:1.0] 79 | label:@"FadingCircleAlt"]; 80 | 81 | [self insertSpinnerOfStyle: RTSpinKitViewStyleArc 82 | backgroundColor:[UIColor colorWithRed:0.56 green:0.27 blue:0.68 alpha:1.0] 83 | label:@"Arc"]; 84 | 85 | [self insertSpinnerOfStyle: RTSpinKitViewStyleArcAlt 86 | backgroundColor:[UIColor colorWithRed:0.91 green:0.3 blue:0.24 alpha:1.0] 87 | label:@"ArcAlt"]; 88 | 89 | CGRect screenBounds = [[UIScreen mainScreen] bounds]; 90 | scrollView.contentSize = CGSizeMake(self.numberOfSpinners * CGRectGetWidth(screenBounds), CGRectGetHeight(screenBounds)); 91 | } 92 | 93 | -(UIStatusBarStyle)preferredStatusBarStyle { 94 | return UIStatusBarStyleLightContent; 95 | } 96 | 97 | -(void)viewDidLoad { 98 | [super viewDidLoad]; 99 | // Do any additional setup after loading the view. 100 | } 101 | 102 | -(void)didReceiveMemoryWarning { 103 | [super didReceiveMemoryWarning]; 104 | // Dispose of any resources that can be recreated. 105 | } 106 | 107 | -(void)insertSpinnerOfStyle:(RTSpinKitViewStyle)style 108 | backgroundColor:(UIColor*)backgroundColor 109 | label:(NSString *)labelString 110 | { 111 | CGRect screenBounds = [[UIScreen mainScreen] bounds]; 112 | CGFloat screenWidth = CGRectGetWidth(screenBounds); 113 | 114 | RTSpinKitView *spinner = [[RTSpinKitView alloc] initWithStyle:style color:[UIColor whiteColor]]; 115 | 116 | spinner.center = CGPointMake(CGRectGetMidX(screenBounds), CGRectGetMidY(screenBounds)); 117 | [spinner startAnimating]; 118 | 119 | UIView *panel = [[UIView alloc] initWithFrame:CGRectOffset(screenBounds, screenWidth * self.numberOfSpinners, 0.0)]; 120 | panel.backgroundColor = backgroundColor; 121 | [panel addSubview:spinner]; 122 | 123 | UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 50.0, screenWidth, 30.0)]; 124 | label.text = labelString; 125 | label.font = [UIFont systemFontOfSize:25.0]; 126 | label.textColor = [UIColor whiteColor]; 127 | 128 | if ([label respondsToSelector:@selector(tintColor)]) { 129 | label.textAlignment = NSTextAlignmentCenter; 130 | } else { 131 | #pragma GCC diagnostic push 132 | #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 133 | label.textAlignment = UITextAlignmentCenter; 134 | #pragma GCC diagnostic pop 135 | label.backgroundColor = [UIColor clearColor]; 136 | } 137 | 138 | [panel addSubview:label]; 139 | 140 | UIScrollView *scrollView = (UIScrollView*)self.view; 141 | [scrollView addSubview:panel]; 142 | 143 | self.numberOfSpinners += 1; 144 | } 145 | 146 | @end 147 | -------------------------------------------------------------------------------- /SpinKit/RTSpinKitView.m: -------------------------------------------------------------------------------- 1 | // 2 | // RTSpinKitView.m 3 | // SpinKit 4 | // 5 | // Copyright (c) 2014 Ramon Torres 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | // this software and associated documentation files (the "Software"), to deal in 9 | // the Software without restriction, including without limitation the rights to 10 | // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | // the Software, and to permit persons to whom the Software is furnished to do so, 12 | // subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in all 15 | // copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | // 24 | 25 | #import "RTSpinKitView.h" 26 | #import "RTSpinKitUtils.h" 27 | 28 | #include 29 | 30 | static const CGFloat kRTSpinKitViewDefaultSpinnerSize = 37.0; 31 | 32 | @interface RTSpinKitView () 33 | @property (nonatomic, strong) id animator; 34 | @end 35 | 36 | @implementation RTSpinKitView 37 | 38 | -(id)initWithCoder:(NSCoder *)aDecoder { 39 | self = [super initWithCoder:aDecoder]; 40 | if (self) { 41 | [self applyAnimation]; 42 | } 43 | 44 | return self; 45 | } 46 | 47 | -(id)initWithFrame:(CGRect)frame { 48 | self = [self initWithStyle:RTSpinKitViewStylePlane]; 49 | if (self) { 50 | self.frame = frame; 51 | } 52 | return self; 53 | } 54 | 55 | -(instancetype)initWithStyle:(RTSpinKitViewStyle)style { 56 | return [self initWithStyle:style color:[UIColor grayColor]]; 57 | } 58 | 59 | -(instancetype)initWithStyle:(RTSpinKitViewStyle)style color:(UIColor *)color { 60 | return [self initWithStyle:style color:color spinnerSize:kRTSpinKitViewDefaultSpinnerSize]; 61 | } 62 | 63 | -(instancetype)initWithStyle:(RTSpinKitViewStyle)style color:(UIColor*)color spinnerSize:(CGFloat)spinnerSize { 64 | self = [super initWithFrame:CGRectMake(0.0, 0.0, spinnerSize, spinnerSize)]; 65 | if (self) { 66 | _style = style; 67 | _color = color; 68 | _spinnerSize = spinnerSize; 69 | _hidesWhenStopped = YES; 70 | [self applyAnimation]; 71 | [self sizeToFit]; 72 | } 73 | return self; 74 | } 75 | 76 | -(instancetype)initWithAnimator:(id)animator 77 | color:(UIColor*)color 78 | spinnerSize:(CGFloat)spinnerSize { 79 | self = [self initWithFrame:CGRectMake(0.0, 0.0, spinnerSize, spinnerSize)]; 80 | if (self) { 81 | _style = RTSpinKitViewStyleCustom; 82 | _animator = animator; 83 | _color = color; 84 | _spinnerSize = spinnerSize; 85 | _hidesWhenStopped = YES; 86 | [self applyAnimation]; 87 | [self sizeToFit]; 88 | } 89 | return self; 90 | } 91 | 92 | -(void)setStyle:(RTSpinKitViewStyle)style { 93 | _style = style; 94 | [self applyAnimation]; 95 | } 96 | 97 | -(void)setSpinnerSize:(CGFloat)spinnerSize { 98 | _spinnerSize = spinnerSize; 99 | [self applyAnimation]; 100 | [self invalidateIntrinsicContentSize]; 101 | } 102 | 103 | #pragma mark - Animation 104 | 105 | -(void)applyAnimation { 106 | // Remove any sublayer. 107 | self.layer.sublayers = nil; 108 | 109 | CGSize size = CGSizeMake(self.spinnerSize, self.spinnerSize); 110 | NSObject *animation = self.animator; 111 | if (animation == nil) { 112 | animation = RTSpinKitAnimationFromStyle(self.style); 113 | } 114 | [animation setupSpinKitAnimationInLayer:self.layer withSize:size color:self.color]; 115 | } 116 | 117 | #pragma mark - Hooks 118 | 119 | -(void)applicationWillEnterForeground { 120 | if (self.stopped) { 121 | [self pauseLayers]; 122 | } else { 123 | [self resumeLayers]; 124 | } 125 | } 126 | 127 | -(void)applicationDidEnterBackground { 128 | [self pauseLayers]; 129 | } 130 | 131 | -(BOOL)isAnimating { 132 | return !self.isStopped; 133 | } 134 | 135 | -(void)startAnimating { 136 | if (self.isStopped) { 137 | self.hidden = NO; 138 | self.stopped = NO; 139 | [self resumeLayers]; 140 | } 141 | } 142 | 143 | -(void)stopAnimating { 144 | if ([self isAnimating]) { 145 | if (self.hidesWhenStopped) { 146 | self.hidden = YES; 147 | } 148 | 149 | self.stopped = YES; 150 | [self pauseLayers]; 151 | } 152 | } 153 | 154 | -(void)pauseLayers { 155 | CFTimeInterval pausedTime = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil]; 156 | self.layer.speed = 0.0; 157 | self.layer.timeOffset = pausedTime; 158 | } 159 | 160 | -(void)resumeLayers { 161 | CFTimeInterval pausedTime = [self.layer timeOffset]; 162 | self.layer.speed = 1.0; 163 | self.layer.timeOffset = 0.0; 164 | self.layer.beginTime = 0.0; 165 | CFTimeInterval timeSincePause = [self.layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; 166 | self.layer.beginTime = timeSincePause; 167 | } 168 | 169 | -(CGSize)sizeThatFits:(CGSize)size { 170 | return CGSizeMake(self.spinnerSize, self.spinnerSize); 171 | } 172 | 173 | -(CGSize)intrinsicContentSize { 174 | return CGSizeMake(self.spinnerSize, self.spinnerSize); 175 | } 176 | 177 | -(void)setColor:(UIColor *)color { 178 | [self setColor:color animated:NO]; 179 | } 180 | 181 | -(void)setColor:(UIColor *)color animated:(BOOL)animated { 182 | UIColor *previousColor = _color; 183 | 184 | _color = color; 185 | 186 | if (animated) { 187 | CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; 188 | animation.fromValue = (id)previousColor.CGColor; 189 | animation.toValue = (id)color.CGColor; 190 | animation.duration = 0.5; 191 | animation.removedOnCompletion = YES; 192 | 193 | for (CALayer *l in self.layer.sublayers) { 194 | l.backgroundColor = color.CGColor; 195 | [l addAnimation:animation forKey:@"change-color"]; 196 | } 197 | } else { 198 | for (CALayer *l in self.layer.sublayers) { 199 | l.backgroundColor = color.CGColor; 200 | } 201 | } 202 | } 203 | 204 | -(void)dealloc { 205 | [[NSNotificationCenter defaultCenter] removeObserver:self]; 206 | } 207 | 208 | @end 209 | -------------------------------------------------------------------------------- /Demo/SpinKit.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 028F586B19C75CBE0070546A /* RTSpinKitArcAltAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 028F586A19C75CBD0070546A /* RTSpinKitArcAltAnimation.m */; }; 11 | 02EE552619C22DA600D58D49 /* RTSpinKitArcAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 02EE552519C22DA600D58D49 /* RTSpinKitArcAnimation.m */; }; 12 | F646194B1874E9FB00ED6B1B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F646194A1874E9FB00ED6B1B /* Foundation.framework */; }; 13 | F646194D1874E9FB00ED6B1B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F646194C1874E9FB00ED6B1B /* CoreGraphics.framework */; }; 14 | F646194F1874E9FB00ED6B1B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F646194E1874E9FB00ED6B1B /* UIKit.framework */; }; 15 | F64619571874E9FB00ED6B1B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F64619561874E9FB00ED6B1B /* main.m */; }; 16 | F646195B1874E9FB00ED6B1B /* RTAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F646195A1874E9FB00ED6B1B /* RTAppDelegate.m */; }; 17 | F64619641874E9FC00ED6B1B /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F64619631874E9FC00ED6B1B /* XCTest.framework */; }; 18 | F64619651874E9FC00ED6B1B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F646194A1874E9FB00ED6B1B /* Foundation.framework */; }; 19 | F64619661874E9FC00ED6B1B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F646194E1874E9FB00ED6B1B /* UIKit.framework */; }; 20 | F646196E1874E9FC00ED6B1B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F646196C1874E9FC00ED6B1B /* InfoPlist.strings */; }; 21 | F64619701874E9FC00ED6B1B /* SpinKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F646196F1874E9FC00ED6B1B /* SpinKitTests.m */; }; 22 | F646197E1874EC8D00ED6B1B /* RTTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F646197D1874EC8D00ED6B1B /* RTTestViewController.m */; }; 23 | F646198218753E5200ED6B1B /* RTSpinKitView.m in Sources */ = {isa = PBXBuildFile; fileRef = F646198118753E5200ED6B1B /* RTSpinKitView.m */; }; 24 | F646198418753F2400ED6B1B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F646198318753F2400ED6B1B /* Images.xcassets */; }; 25 | F66970181BD2285000450708 /* LanchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = F66970171BD2285000450708 /* LanchScreen.xib */; settings = {ASSET_TAGS = (); }; }; 26 | F6BC23C219B972340055D239 /* RTSpinKit9CubeGridAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23A919B972340055D239 /* RTSpinKit9CubeGridAnimation.m */; }; 27 | F6BC23C319B972340055D239 /* RTSpinKitBounceAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23AB19B972340055D239 /* RTSpinKitBounceAnimation.m */; }; 28 | F6BC23C419B972340055D239 /* RTSpinKitChasingDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23AD19B972340055D239 /* RTSpinKitChasingDotsAnimation.m */; }; 29 | F6BC23C519B972340055D239 /* RTSpinKitCircleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23AF19B972340055D239 /* RTSpinKitCircleAnimation.m */; }; 30 | F6BC23C619B972340055D239 /* RTSpinKitCircleFlipAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23B119B972340055D239 /* RTSpinKitCircleFlipAnimation.m */; }; 31 | F6BC23C719B972340055D239 /* RTSpinKitFadingCircleAltAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23B319B972340055D239 /* RTSpinKitFadingCircleAltAnimation.m */; }; 32 | F6BC23C819B972340055D239 /* RTSpinKitFadingCircleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23B519B972340055D239 /* RTSpinKitFadingCircleAnimation.m */; }; 33 | F6BC23C919B972340055D239 /* RTSpinKitPlaneAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23B719B972340055D239 /* RTSpinKitPlaneAnimation.m */; }; 34 | F6BC23CA19B972340055D239 /* RTSpinKitPulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23B919B972340055D239 /* RTSpinKitPulseAnimation.m */; }; 35 | F6BC23CB19B972340055D239 /* RTSpinKitThreeBounceAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23BB19B972340055D239 /* RTSpinKitThreeBounceAnimation.m */; }; 36 | F6BC23CC19B972340055D239 /* RTSpinKitWanderingCubesAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23BD19B972340055D239 /* RTSpinKitWanderingCubesAnimation.m */; }; 37 | F6BC23CD19B972340055D239 /* RTSpinKitWaveAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23BF19B972340055D239 /* RTSpinKitWaveAnimation.m */; }; 38 | F6BC23CE19B972340055D239 /* RTSpinKitWordPressAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23C119B972340055D239 /* RTSpinKitWordPressAnimation.m */; }; 39 | F6BC23D219B97E820055D239 /* RTSpinKitUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BC23D119B97E820055D239 /* RTSpinKitUtils.m */; }; 40 | /* End PBXBuildFile section */ 41 | 42 | /* Begin PBXContainerItemProxy section */ 43 | F64619671874E9FC00ED6B1B /* PBXContainerItemProxy */ = { 44 | isa = PBXContainerItemProxy; 45 | containerPortal = F646193F1874E9FB00ED6B1B /* Project object */; 46 | proxyType = 1; 47 | remoteGlobalIDString = F64619461874E9FB00ED6B1B; 48 | remoteInfo = SpinKit; 49 | }; 50 | /* End PBXContainerItemProxy section */ 51 | 52 | /* Begin PBXFileReference section */ 53 | 028F586919C75CBD0070546A /* RTSpinKitArcAltAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitArcAltAnimation.h; sourceTree = ""; }; 54 | 028F586A19C75CBD0070546A /* RTSpinKitArcAltAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitArcAltAnimation.m; sourceTree = ""; usesTabs = 0; }; 55 | 02EE552419C22DA600D58D49 /* RTSpinKitArcAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitArcAnimation.h; sourceTree = ""; }; 56 | 02EE552519C22DA600D58D49 /* RTSpinKitArcAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitArcAnimation.m; sourceTree = ""; }; 57 | F64619471874E9FB00ED6B1B /* SpinKit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpinKit.app; sourceTree = BUILT_PRODUCTS_DIR; }; 58 | F646194A1874E9FB00ED6B1B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 59 | F646194C1874E9FB00ED6B1B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 60 | F646194E1874E9FB00ED6B1B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 61 | F64619521874E9FB00ED6B1B /* SpinKit-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SpinKit-Info.plist"; sourceTree = ""; }; 62 | F64619561874E9FB00ED6B1B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 63 | F64619581874E9FB00ED6B1B /* SpinKit-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SpinKit-Prefix.pch"; sourceTree = ""; }; 64 | F64619591874E9FB00ED6B1B /* RTAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RTAppDelegate.h; sourceTree = ""; }; 65 | F646195A1874E9FB00ED6B1B /* RTAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RTAppDelegate.m; sourceTree = ""; }; 66 | F64619621874E9FC00ED6B1B /* SpinKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SpinKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | F64619631874E9FC00ED6B1B /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 68 | F646196B1874E9FC00ED6B1B /* SpinKitTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "SpinKitTests-Info.plist"; sourceTree = ""; }; 69 | F646196D1874E9FC00ED6B1B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 70 | F646196F1874E9FC00ED6B1B /* SpinKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SpinKitTests.m; sourceTree = ""; }; 71 | F646197C1874EC8D00ED6B1B /* RTTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTTestViewController.h; sourceTree = ""; }; 72 | F646197D1874EC8D00ED6B1B /* RTTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTTestViewController.m; sourceTree = ""; usesTabs = 0; }; 73 | F646198018753E5200ED6B1B /* RTSpinKitView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RTSpinKitView.h; path = ../../SpinKit/RTSpinKitView.h; sourceTree = ""; usesTabs = 0; }; 74 | F646198118753E5200ED6B1B /* RTSpinKitView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RTSpinKitView.m; path = ../../SpinKit/RTSpinKitView.m; sourceTree = ""; usesTabs = 0; }; 75 | F646198318753F2400ED6B1B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 76 | F66970171BD2285000450708 /* LanchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LanchScreen.xib; sourceTree = ""; }; 77 | F6BC23A819B972340055D239 /* RTSpinKit9CubeGridAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKit9CubeGridAnimation.h; sourceTree = ""; }; 78 | F6BC23A919B972340055D239 /* RTSpinKit9CubeGridAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKit9CubeGridAnimation.m; sourceTree = ""; }; 79 | F6BC23AA19B972340055D239 /* RTSpinKitBounceAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitBounceAnimation.h; sourceTree = ""; }; 80 | F6BC23AB19B972340055D239 /* RTSpinKitBounceAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitBounceAnimation.m; sourceTree = ""; }; 81 | F6BC23AC19B972340055D239 /* RTSpinKitChasingDotsAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitChasingDotsAnimation.h; sourceTree = ""; }; 82 | F6BC23AD19B972340055D239 /* RTSpinKitChasingDotsAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitChasingDotsAnimation.m; sourceTree = ""; }; 83 | F6BC23AE19B972340055D239 /* RTSpinKitCircleAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitCircleAnimation.h; sourceTree = ""; }; 84 | F6BC23AF19B972340055D239 /* RTSpinKitCircleAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitCircleAnimation.m; sourceTree = ""; }; 85 | F6BC23B019B972340055D239 /* RTSpinKitCircleFlipAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitCircleFlipAnimation.h; sourceTree = ""; }; 86 | F6BC23B119B972340055D239 /* RTSpinKitCircleFlipAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitCircleFlipAnimation.m; sourceTree = ""; }; 87 | F6BC23B219B972340055D239 /* RTSpinKitFadingCircleAltAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitFadingCircleAltAnimation.h; sourceTree = ""; }; 88 | F6BC23B319B972340055D239 /* RTSpinKitFadingCircleAltAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitFadingCircleAltAnimation.m; sourceTree = ""; }; 89 | F6BC23B419B972340055D239 /* RTSpinKitFadingCircleAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitFadingCircleAnimation.h; sourceTree = ""; }; 90 | F6BC23B519B972340055D239 /* RTSpinKitFadingCircleAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitFadingCircleAnimation.m; sourceTree = ""; }; 91 | F6BC23B619B972340055D239 /* RTSpinKitPlaneAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitPlaneAnimation.h; sourceTree = ""; }; 92 | F6BC23B719B972340055D239 /* RTSpinKitPlaneAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitPlaneAnimation.m; sourceTree = ""; }; 93 | F6BC23B819B972340055D239 /* RTSpinKitPulseAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitPulseAnimation.h; sourceTree = ""; }; 94 | F6BC23B919B972340055D239 /* RTSpinKitPulseAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitPulseAnimation.m; sourceTree = ""; }; 95 | F6BC23BA19B972340055D239 /* RTSpinKitThreeBounceAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitThreeBounceAnimation.h; sourceTree = ""; }; 96 | F6BC23BB19B972340055D239 /* RTSpinKitThreeBounceAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitThreeBounceAnimation.m; sourceTree = ""; }; 97 | F6BC23BC19B972340055D239 /* RTSpinKitWanderingCubesAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitWanderingCubesAnimation.h; sourceTree = ""; }; 98 | F6BC23BD19B972340055D239 /* RTSpinKitWanderingCubesAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitWanderingCubesAnimation.m; sourceTree = ""; }; 99 | F6BC23BE19B972340055D239 /* RTSpinKitWaveAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitWaveAnimation.h; sourceTree = ""; }; 100 | F6BC23BF19B972340055D239 /* RTSpinKitWaveAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitWaveAnimation.m; sourceTree = ""; }; 101 | F6BC23C019B972340055D239 /* RTSpinKitWordPressAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTSpinKitWordPressAnimation.h; sourceTree = ""; }; 102 | F6BC23C119B972340055D239 /* RTSpinKitWordPressAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RTSpinKitWordPressAnimation.m; sourceTree = ""; }; 103 | F6BC23CF19B9724E0055D239 /* RTSpinKitAnimating.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RTSpinKitAnimating.h; path = ../../SpinKit/RTSpinKitAnimating.h; sourceTree = ""; }; 104 | F6BC23D019B97E820055D239 /* RTSpinKitUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RTSpinKitUtils.h; path = ../../SpinKit/RTSpinKitUtils.h; sourceTree = ""; }; 105 | F6BC23D119B97E820055D239 /* RTSpinKitUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RTSpinKitUtils.m; path = ../../SpinKit/RTSpinKitUtils.m; sourceTree = ""; }; 106 | /* End PBXFileReference section */ 107 | 108 | /* Begin PBXFrameworksBuildPhase section */ 109 | F64619441874E9FB00ED6B1B /* Frameworks */ = { 110 | isa = PBXFrameworksBuildPhase; 111 | buildActionMask = 2147483647; 112 | files = ( 113 | F646194D1874E9FB00ED6B1B /* CoreGraphics.framework in Frameworks */, 114 | F646194F1874E9FB00ED6B1B /* UIKit.framework in Frameworks */, 115 | F646194B1874E9FB00ED6B1B /* Foundation.framework in Frameworks */, 116 | ); 117 | runOnlyForDeploymentPostprocessing = 0; 118 | }; 119 | F646195F1874E9FC00ED6B1B /* Frameworks */ = { 120 | isa = PBXFrameworksBuildPhase; 121 | buildActionMask = 2147483647; 122 | files = ( 123 | F64619641874E9FC00ED6B1B /* XCTest.framework in Frameworks */, 124 | F64619661874E9FC00ED6B1B /* UIKit.framework in Frameworks */, 125 | F64619651874E9FC00ED6B1B /* Foundation.framework in Frameworks */, 126 | ); 127 | runOnlyForDeploymentPostprocessing = 0; 128 | }; 129 | /* End PBXFrameworksBuildPhase section */ 130 | 131 | /* Begin PBXGroup section */ 132 | F646193E1874E9FB00ED6B1B = { 133 | isa = PBXGroup; 134 | children = ( 135 | F64619501874E9FB00ED6B1B /* SpinKit */, 136 | F64619691874E9FC00ED6B1B /* SpinKitTests */, 137 | F64619491874E9FB00ED6B1B /* Frameworks */, 138 | F64619481874E9FB00ED6B1B /* Products */, 139 | ); 140 | sourceTree = ""; 141 | }; 142 | F64619481874E9FB00ED6B1B /* Products */ = { 143 | isa = PBXGroup; 144 | children = ( 145 | F64619471874E9FB00ED6B1B /* SpinKit.app */, 146 | F64619621874E9FC00ED6B1B /* SpinKitTests.xctest */, 147 | ); 148 | name = Products; 149 | sourceTree = ""; 150 | }; 151 | F64619491874E9FB00ED6B1B /* Frameworks */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | F646194A1874E9FB00ED6B1B /* Foundation.framework */, 155 | F646194C1874E9FB00ED6B1B /* CoreGraphics.framework */, 156 | F646194E1874E9FB00ED6B1B /* UIKit.framework */, 157 | F64619631874E9FC00ED6B1B /* XCTest.framework */, 158 | ); 159 | name = Frameworks; 160 | sourceTree = ""; 161 | }; 162 | F64619501874E9FB00ED6B1B /* SpinKit */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | F646197F18753E3800ED6B1B /* Src */, 166 | F64619511874E9FB00ED6B1B /* Supporting Files */, 167 | F64619591874E9FB00ED6B1B /* RTAppDelegate.h */, 168 | F646195A1874E9FB00ED6B1B /* RTAppDelegate.m */, 169 | F646197C1874EC8D00ED6B1B /* RTTestViewController.h */, 170 | F646197D1874EC8D00ED6B1B /* RTTestViewController.m */, 171 | F646198318753F2400ED6B1B /* Images.xcassets */, 172 | ); 173 | path = SpinKit; 174 | sourceTree = ""; 175 | }; 176 | F64619511874E9FB00ED6B1B /* Supporting Files */ = { 177 | isa = PBXGroup; 178 | children = ( 179 | F64619521874E9FB00ED6B1B /* SpinKit-Info.plist */, 180 | F64619561874E9FB00ED6B1B /* main.m */, 181 | F64619581874E9FB00ED6B1B /* SpinKit-Prefix.pch */, 182 | F66970171BD2285000450708 /* LanchScreen.xib */, 183 | ); 184 | name = "Supporting Files"; 185 | sourceTree = ""; 186 | }; 187 | F64619691874E9FC00ED6B1B /* SpinKitTests */ = { 188 | isa = PBXGroup; 189 | children = ( 190 | F646196F1874E9FC00ED6B1B /* SpinKitTests.m */, 191 | F646196A1874E9FC00ED6B1B /* Supporting Files */, 192 | ); 193 | path = SpinKitTests; 194 | sourceTree = ""; 195 | }; 196 | F646196A1874E9FC00ED6B1B /* Supporting Files */ = { 197 | isa = PBXGroup; 198 | children = ( 199 | F646196B1874E9FC00ED6B1B /* SpinKitTests-Info.plist */, 200 | F646196C1874E9FC00ED6B1B /* InfoPlist.strings */, 201 | ); 202 | name = "Supporting Files"; 203 | sourceTree = ""; 204 | }; 205 | F646197F18753E3800ED6B1B /* Src */ = { 206 | isa = PBXGroup; 207 | children = ( 208 | F6BC23A719B972340055D239 /* Animations */, 209 | F6BC23CF19B9724E0055D239 /* RTSpinKitAnimating.h */, 210 | F646198018753E5200ED6B1B /* RTSpinKitView.h */, 211 | F646198118753E5200ED6B1B /* RTSpinKitView.m */, 212 | F6BC23D019B97E820055D239 /* RTSpinKitUtils.h */, 213 | F6BC23D119B97E820055D239 /* RTSpinKitUtils.m */, 214 | ); 215 | name = Src; 216 | sourceTree = ""; 217 | }; 218 | F6BC23A719B972340055D239 /* Animations */ = { 219 | isa = PBXGroup; 220 | children = ( 221 | F6BC23A819B972340055D239 /* RTSpinKit9CubeGridAnimation.h */, 222 | F6BC23A919B972340055D239 /* RTSpinKit9CubeGridAnimation.m */, 223 | F6BC23AA19B972340055D239 /* RTSpinKitBounceAnimation.h */, 224 | F6BC23AB19B972340055D239 /* RTSpinKitBounceAnimation.m */, 225 | F6BC23AC19B972340055D239 /* RTSpinKitChasingDotsAnimation.h */, 226 | F6BC23AD19B972340055D239 /* RTSpinKitChasingDotsAnimation.m */, 227 | F6BC23AE19B972340055D239 /* RTSpinKitCircleAnimation.h */, 228 | F6BC23AF19B972340055D239 /* RTSpinKitCircleAnimation.m */, 229 | F6BC23B019B972340055D239 /* RTSpinKitCircleFlipAnimation.h */, 230 | F6BC23B119B972340055D239 /* RTSpinKitCircleFlipAnimation.m */, 231 | F6BC23B219B972340055D239 /* RTSpinKitFadingCircleAltAnimation.h */, 232 | F6BC23B319B972340055D239 /* RTSpinKitFadingCircleAltAnimation.m */, 233 | F6BC23B419B972340055D239 /* RTSpinKitFadingCircleAnimation.h */, 234 | F6BC23B519B972340055D239 /* RTSpinKitFadingCircleAnimation.m */, 235 | F6BC23B619B972340055D239 /* RTSpinKitPlaneAnimation.h */, 236 | F6BC23B719B972340055D239 /* RTSpinKitPlaneAnimation.m */, 237 | F6BC23B819B972340055D239 /* RTSpinKitPulseAnimation.h */, 238 | F6BC23B919B972340055D239 /* RTSpinKitPulseAnimation.m */, 239 | F6BC23BA19B972340055D239 /* RTSpinKitThreeBounceAnimation.h */, 240 | F6BC23BB19B972340055D239 /* RTSpinKitThreeBounceAnimation.m */, 241 | F6BC23BC19B972340055D239 /* RTSpinKitWanderingCubesAnimation.h */, 242 | F6BC23BD19B972340055D239 /* RTSpinKitWanderingCubesAnimation.m */, 243 | F6BC23BE19B972340055D239 /* RTSpinKitWaveAnimation.h */, 244 | F6BC23BF19B972340055D239 /* RTSpinKitWaveAnimation.m */, 245 | F6BC23C019B972340055D239 /* RTSpinKitWordPressAnimation.h */, 246 | F6BC23C119B972340055D239 /* RTSpinKitWordPressAnimation.m */, 247 | 02EE552419C22DA600D58D49 /* RTSpinKitArcAnimation.h */, 248 | 02EE552519C22DA600D58D49 /* RTSpinKitArcAnimation.m */, 249 | 028F586919C75CBD0070546A /* RTSpinKitArcAltAnimation.h */, 250 | 028F586A19C75CBD0070546A /* RTSpinKitArcAltAnimation.m */, 251 | ); 252 | name = Animations; 253 | path = ../../SpinKit/Animations; 254 | sourceTree = ""; 255 | }; 256 | /* End PBXGroup section */ 257 | 258 | /* Begin PBXNativeTarget section */ 259 | F64619461874E9FB00ED6B1B /* SpinKit */ = { 260 | isa = PBXNativeTarget; 261 | buildConfigurationList = F64619731874E9FC00ED6B1B /* Build configuration list for PBXNativeTarget "SpinKit" */; 262 | buildPhases = ( 263 | F64619431874E9FB00ED6B1B /* Sources */, 264 | F64619441874E9FB00ED6B1B /* Frameworks */, 265 | F64619451874E9FB00ED6B1B /* Resources */, 266 | ); 267 | buildRules = ( 268 | ); 269 | dependencies = ( 270 | ); 271 | name = SpinKit; 272 | productName = SpinKit; 273 | productReference = F64619471874E9FB00ED6B1B /* SpinKit.app */; 274 | productType = "com.apple.product-type.application"; 275 | }; 276 | F64619611874E9FC00ED6B1B /* SpinKitTests */ = { 277 | isa = PBXNativeTarget; 278 | buildConfigurationList = F64619761874E9FC00ED6B1B /* Build configuration list for PBXNativeTarget "SpinKitTests" */; 279 | buildPhases = ( 280 | F646195E1874E9FC00ED6B1B /* Sources */, 281 | F646195F1874E9FC00ED6B1B /* Frameworks */, 282 | F64619601874E9FC00ED6B1B /* Resources */, 283 | ); 284 | buildRules = ( 285 | ); 286 | dependencies = ( 287 | F64619681874E9FC00ED6B1B /* PBXTargetDependency */, 288 | ); 289 | name = SpinKitTests; 290 | productName = SpinKitTests; 291 | productReference = F64619621874E9FC00ED6B1B /* SpinKitTests.xctest */; 292 | productType = "com.apple.product-type.bundle.unit-test"; 293 | }; 294 | /* End PBXNativeTarget section */ 295 | 296 | /* Begin PBXProject section */ 297 | F646193F1874E9FB00ED6B1B /* Project object */ = { 298 | isa = PBXProject; 299 | attributes = { 300 | CLASSPREFIX = RT; 301 | LastUpgradeCheck = 0600; 302 | ORGANIZATIONNAME = "Ramon Torres"; 303 | TargetAttributes = { 304 | F64619461874E9FB00ED6B1B = { 305 | DevelopmentTeam = S47GJ5WB9Z; 306 | }; 307 | F64619611874E9FC00ED6B1B = { 308 | TestTargetID = F64619461874E9FB00ED6B1B; 309 | }; 310 | }; 311 | }; 312 | buildConfigurationList = F64619421874E9FB00ED6B1B /* Build configuration list for PBXProject "SpinKit" */; 313 | compatibilityVersion = "Xcode 3.2"; 314 | developmentRegion = English; 315 | hasScannedForEncodings = 0; 316 | knownRegions = ( 317 | en, 318 | ); 319 | mainGroup = F646193E1874E9FB00ED6B1B; 320 | productRefGroup = F64619481874E9FB00ED6B1B /* Products */; 321 | projectDirPath = ""; 322 | projectRoot = ""; 323 | targets = ( 324 | F64619461874E9FB00ED6B1B /* SpinKit */, 325 | F64619611874E9FC00ED6B1B /* SpinKitTests */, 326 | ); 327 | }; 328 | /* End PBXProject section */ 329 | 330 | /* Begin PBXResourcesBuildPhase section */ 331 | F64619451874E9FB00ED6B1B /* Resources */ = { 332 | isa = PBXResourcesBuildPhase; 333 | buildActionMask = 2147483647; 334 | files = ( 335 | F66970181BD2285000450708 /* LanchScreen.xib in Resources */, 336 | F646198418753F2400ED6B1B /* Images.xcassets in Resources */, 337 | ); 338 | runOnlyForDeploymentPostprocessing = 0; 339 | }; 340 | F64619601874E9FC00ED6B1B /* Resources */ = { 341 | isa = PBXResourcesBuildPhase; 342 | buildActionMask = 2147483647; 343 | files = ( 344 | F646196E1874E9FC00ED6B1B /* InfoPlist.strings in Resources */, 345 | ); 346 | runOnlyForDeploymentPostprocessing = 0; 347 | }; 348 | /* End PBXResourcesBuildPhase section */ 349 | 350 | /* Begin PBXSourcesBuildPhase section */ 351 | F64619431874E9FB00ED6B1B /* Sources */ = { 352 | isa = PBXSourcesBuildPhase; 353 | buildActionMask = 2147483647; 354 | files = ( 355 | 028F586B19C75CBE0070546A /* RTSpinKitArcAltAnimation.m in Sources */, 356 | F6BC23CB19B972340055D239 /* RTSpinKitThreeBounceAnimation.m in Sources */, 357 | F6BC23CA19B972340055D239 /* RTSpinKitPulseAnimation.m in Sources */, 358 | F646195B1874E9FB00ED6B1B /* RTAppDelegate.m in Sources */, 359 | F646198218753E5200ED6B1B /* RTSpinKitView.m in Sources */, 360 | F6BC23C619B972340055D239 /* RTSpinKitCircleFlipAnimation.m in Sources */, 361 | F6BC23C419B972340055D239 /* RTSpinKitChasingDotsAnimation.m in Sources */, 362 | F646197E1874EC8D00ED6B1B /* RTTestViewController.m in Sources */, 363 | F6BC23C319B972340055D239 /* RTSpinKitBounceAnimation.m in Sources */, 364 | F6BC23C719B972340055D239 /* RTSpinKitFadingCircleAltAnimation.m in Sources */, 365 | F6BC23CE19B972340055D239 /* RTSpinKitWordPressAnimation.m in Sources */, 366 | F64619571874E9FB00ED6B1B /* main.m in Sources */, 367 | F6BC23C919B972340055D239 /* RTSpinKitPlaneAnimation.m in Sources */, 368 | F6BC23D219B97E820055D239 /* RTSpinKitUtils.m in Sources */, 369 | F6BC23CC19B972340055D239 /* RTSpinKitWanderingCubesAnimation.m in Sources */, 370 | F6BC23C219B972340055D239 /* RTSpinKit9CubeGridAnimation.m in Sources */, 371 | F6BC23C519B972340055D239 /* RTSpinKitCircleAnimation.m in Sources */, 372 | 02EE552619C22DA600D58D49 /* RTSpinKitArcAnimation.m in Sources */, 373 | F6BC23CD19B972340055D239 /* RTSpinKitWaveAnimation.m in Sources */, 374 | F6BC23C819B972340055D239 /* RTSpinKitFadingCircleAnimation.m in Sources */, 375 | ); 376 | runOnlyForDeploymentPostprocessing = 0; 377 | }; 378 | F646195E1874E9FC00ED6B1B /* Sources */ = { 379 | isa = PBXSourcesBuildPhase; 380 | buildActionMask = 2147483647; 381 | files = ( 382 | F64619701874E9FC00ED6B1B /* SpinKitTests.m in Sources */, 383 | ); 384 | runOnlyForDeploymentPostprocessing = 0; 385 | }; 386 | /* End PBXSourcesBuildPhase section */ 387 | 388 | /* Begin PBXTargetDependency section */ 389 | F64619681874E9FC00ED6B1B /* PBXTargetDependency */ = { 390 | isa = PBXTargetDependency; 391 | target = F64619461874E9FB00ED6B1B /* SpinKit */; 392 | targetProxy = F64619671874E9FC00ED6B1B /* PBXContainerItemProxy */; 393 | }; 394 | /* End PBXTargetDependency section */ 395 | 396 | /* Begin PBXVariantGroup section */ 397 | F646196C1874E9FC00ED6B1B /* InfoPlist.strings */ = { 398 | isa = PBXVariantGroup; 399 | children = ( 400 | F646196D1874E9FC00ED6B1B /* en */, 401 | ); 402 | name = InfoPlist.strings; 403 | sourceTree = ""; 404 | }; 405 | /* End PBXVariantGroup section */ 406 | 407 | /* Begin XCBuildConfiguration section */ 408 | F64619711874E9FC00ED6B1B /* Debug */ = { 409 | isa = XCBuildConfiguration; 410 | buildSettings = { 411 | ALWAYS_SEARCH_USER_PATHS = NO; 412 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 413 | CLANG_CXX_LIBRARY = "libc++"; 414 | CLANG_ENABLE_MODULES = YES; 415 | CLANG_ENABLE_OBJC_ARC = YES; 416 | CLANG_WARN_BOOL_CONVERSION = YES; 417 | CLANG_WARN_CONSTANT_CONVERSION = YES; 418 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 419 | CLANG_WARN_EMPTY_BODY = YES; 420 | CLANG_WARN_ENUM_CONVERSION = YES; 421 | CLANG_WARN_INT_CONVERSION = YES; 422 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 423 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 424 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 425 | COPY_PHASE_STRIP = NO; 426 | GCC_C_LANGUAGE_STANDARD = gnu99; 427 | GCC_DYNAMIC_NO_PIC = NO; 428 | GCC_OPTIMIZATION_LEVEL = 0; 429 | GCC_PREPROCESSOR_DEFINITIONS = ( 430 | "DEBUG=1", 431 | "$(inherited)", 432 | ); 433 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 434 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 435 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 436 | GCC_WARN_UNDECLARED_SELECTOR = YES; 437 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 438 | GCC_WARN_UNUSED_FUNCTION = YES; 439 | GCC_WARN_UNUSED_VARIABLE = YES; 440 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 441 | ONLY_ACTIVE_ARCH = YES; 442 | SDKROOT = iphoneos; 443 | }; 444 | name = Debug; 445 | }; 446 | F64619721874E9FC00ED6B1B /* Release */ = { 447 | isa = XCBuildConfiguration; 448 | buildSettings = { 449 | ALWAYS_SEARCH_USER_PATHS = NO; 450 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 451 | CLANG_CXX_LIBRARY = "libc++"; 452 | CLANG_ENABLE_MODULES = YES; 453 | CLANG_ENABLE_OBJC_ARC = YES; 454 | CLANG_WARN_BOOL_CONVERSION = YES; 455 | CLANG_WARN_CONSTANT_CONVERSION = YES; 456 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 457 | CLANG_WARN_EMPTY_BODY = YES; 458 | CLANG_WARN_ENUM_CONVERSION = YES; 459 | CLANG_WARN_INT_CONVERSION = YES; 460 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 461 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 462 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 463 | COPY_PHASE_STRIP = YES; 464 | ENABLE_NS_ASSERTIONS = NO; 465 | GCC_C_LANGUAGE_STANDARD = gnu99; 466 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 467 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 468 | GCC_WARN_UNDECLARED_SELECTOR = YES; 469 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 470 | GCC_WARN_UNUSED_FUNCTION = YES; 471 | GCC_WARN_UNUSED_VARIABLE = YES; 472 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 473 | SDKROOT = iphoneos; 474 | VALIDATE_PRODUCT = YES; 475 | }; 476 | name = Release; 477 | }; 478 | F64619741874E9FC00ED6B1B /* Debug */ = { 479 | isa = XCBuildConfiguration; 480 | buildSettings = { 481 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 482 | CODE_SIGN_IDENTITY = "iPhone Developer"; 483 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 484 | GCC_PREFIX_HEADER = "SpinKit/SpinKit-Prefix.pch"; 485 | INFOPLIST_FILE = "SpinKit/SpinKit-Info.plist"; 486 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 487 | PRODUCT_NAME = "$(TARGET_NAME)"; 488 | TARGETED_DEVICE_FAMILY = "1,2"; 489 | WRAPPER_EXTENSION = app; 490 | }; 491 | name = Debug; 492 | }; 493 | F64619751874E9FC00ED6B1B /* Release */ = { 494 | isa = XCBuildConfiguration; 495 | buildSettings = { 496 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 497 | CODE_SIGN_IDENTITY = "iPhone Developer"; 498 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 499 | GCC_PREFIX_HEADER = "SpinKit/SpinKit-Prefix.pch"; 500 | INFOPLIST_FILE = "SpinKit/SpinKit-Info.plist"; 501 | IPHONEOS_DEPLOYMENT_TARGET = 6.0; 502 | PRODUCT_NAME = "$(TARGET_NAME)"; 503 | TARGETED_DEVICE_FAMILY = "1,2"; 504 | WRAPPER_EXTENSION = app; 505 | }; 506 | name = Release; 507 | }; 508 | F64619771874E9FC00ED6B1B /* Debug */ = { 509 | isa = XCBuildConfiguration; 510 | buildSettings = { 511 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/SpinKit.app/SpinKit"; 512 | FRAMEWORK_SEARCH_PATHS = ( 513 | "$(SDKROOT)/Developer/Library/Frameworks", 514 | "$(inherited)", 515 | "$(DEVELOPER_FRAMEWORKS_DIR)", 516 | ); 517 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 518 | GCC_PREFIX_HEADER = "SpinKit/SpinKit-Prefix.pch"; 519 | GCC_PREPROCESSOR_DEFINITIONS = ( 520 | "DEBUG=1", 521 | "$(inherited)", 522 | ); 523 | INFOPLIST_FILE = "SpinKitTests/SpinKitTests-Info.plist"; 524 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 525 | PRODUCT_NAME = "$(TARGET_NAME)"; 526 | TEST_HOST = "$(BUNDLE_LOADER)"; 527 | WRAPPER_EXTENSION = xctest; 528 | }; 529 | name = Debug; 530 | }; 531 | F64619781874E9FC00ED6B1B /* Release */ = { 532 | isa = XCBuildConfiguration; 533 | buildSettings = { 534 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/SpinKit.app/SpinKit"; 535 | FRAMEWORK_SEARCH_PATHS = ( 536 | "$(SDKROOT)/Developer/Library/Frameworks", 537 | "$(inherited)", 538 | "$(DEVELOPER_FRAMEWORKS_DIR)", 539 | ); 540 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 541 | GCC_PREFIX_HEADER = "SpinKit/SpinKit-Prefix.pch"; 542 | INFOPLIST_FILE = "SpinKitTests/SpinKitTests-Info.plist"; 543 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 544 | PRODUCT_NAME = "$(TARGET_NAME)"; 545 | TEST_HOST = "$(BUNDLE_LOADER)"; 546 | WRAPPER_EXTENSION = xctest; 547 | }; 548 | name = Release; 549 | }; 550 | /* End XCBuildConfiguration section */ 551 | 552 | /* Begin XCConfigurationList section */ 553 | F64619421874E9FB00ED6B1B /* Build configuration list for PBXProject "SpinKit" */ = { 554 | isa = XCConfigurationList; 555 | buildConfigurations = ( 556 | F64619711874E9FC00ED6B1B /* Debug */, 557 | F64619721874E9FC00ED6B1B /* Release */, 558 | ); 559 | defaultConfigurationIsVisible = 0; 560 | defaultConfigurationName = Release; 561 | }; 562 | F64619731874E9FC00ED6B1B /* Build configuration list for PBXNativeTarget "SpinKit" */ = { 563 | isa = XCConfigurationList; 564 | buildConfigurations = ( 565 | F64619741874E9FC00ED6B1B /* Debug */, 566 | F64619751874E9FC00ED6B1B /* Release */, 567 | ); 568 | defaultConfigurationIsVisible = 0; 569 | defaultConfigurationName = Release; 570 | }; 571 | F64619761874E9FC00ED6B1B /* Build configuration list for PBXNativeTarget "SpinKitTests" */ = { 572 | isa = XCConfigurationList; 573 | buildConfigurations = ( 574 | F64619771874E9FC00ED6B1B /* Debug */, 575 | F64619781874E9FC00ED6B1B /* Release */, 576 | ); 577 | defaultConfigurationIsVisible = 0; 578 | defaultConfigurationName = Release; 579 | }; 580 | /* End XCConfigurationList section */ 581 | }; 582 | rootObject = F646193F1874E9FB00ED6B1B /* Project object */; 583 | } 584 | --------------------------------------------------------------------------------