├── .gitignore ├── Dazzle.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── Dazzle ├── DazAppDelegate.h ├── DazAppDelegate.m ├── DazFire.png ├── DazFireController.h ├── DazFireController.m ├── DazFireworksController.h ├── DazFireworksController.m ├── DazFlake.png ├── DazFlakeIcon.png ├── DazFlakeIcon@2x.png ├── DazFlameIcon.png ├── DazFlameIcon@2x.png ├── DazHeart.png ├── DazHeartIcon.png ├── DazHeartIcon@2x.png ├── DazInfoController.h ├── DazInfoController.m ├── DazRing.png ├── DazSmoke.png ├── DazStarIcon.png ├── DazStarIcon@2x.png ├── DazStarOutline.png ├── DazTouchController.h ├── DazTouchController.m ├── DazTriangle.png ├── DazViewController.h ├── DazViewController.m ├── Dazzle-Info.plist ├── Dazzle-Prefix.pch ├── Icon-76.png ├── Icon-76@2x.png ├── Icon-Small-50.png ├── Icon-Small-50@2x.png ├── Icon-Small.png ├── Icon-Small@2x.png ├── Icon.png ├── Icon@2x.png ├── en.lproj │ ├── InfoPlist.strings │ └── iPhone.storyboard ├── first.png ├── first@2x.png ├── iTunesArtwork.png ├── iTunesArtwork@2x.png └── main.m ├── Helper FIles ├── Source for the shapes.graffle ├── icon iOS6.psd └── icon iOS7.psd └── readme.markdown /.gitignore: -------------------------------------------------------------------------------- 1 | *.xccheckout -------------------------------------------------------------------------------- /Dazzle.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 3F0FBAD214E41839005ECFA1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F0FBAD114E41839005ECFA1 /* UIKit.framework */; }; 11 | 3F0FBAD414E41839005ECFA1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F0FBAD314E41839005ECFA1 /* Foundation.framework */; }; 12 | 3F0FBAD614E41839005ECFA1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F0FBAD514E41839005ECFA1 /* CoreGraphics.framework */; }; 13 | 3F0FBADC14E41839005ECFA1 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3F0FBADA14E41839005ECFA1 /* InfoPlist.strings */; }; 14 | 3F0FBADE14E41839005ECFA1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F0FBADD14E41839005ECFA1 /* main.m */; }; 15 | 3F0FBAE214E41839005ECFA1 /* DazAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F0FBAE114E41839005ECFA1 /* DazAppDelegate.m */; }; 16 | 3F0FBAE514E41839005ECFA1 /* iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3F0FBAE314E41839005ECFA1 /* iPhone.storyboard */; }; 17 | 3F0FBAEB14E41839005ECFA1 /* DazViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F0FBAEA14E41839005ECFA1 /* DazViewController.m */; }; 18 | 3F0FBAED14E41839005ECFA1 /* first.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F0FBAEC14E41839005ECFA1 /* first.png */; }; 19 | 3F0FBAEF14E41839005ECFA1 /* first@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F0FBAEE14E41839005ECFA1 /* first@2x.png */; }; 20 | 3F0FBAF214E41839005ECFA1 /* DazInfoController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F0FBAF114E41839005ECFA1 /* DazInfoController.m */; }; 21 | 3F0FBAFF14E41CD6005ECFA1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F0FBAFE14E41CD6005ECFA1 /* QuartzCore.framework */; }; 22 | 3F0FBB1314E43DBF005ECFA1 /* DazFireController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F0FBB1214E43DBF005ECFA1 /* DazFireController.m */; }; 23 | 3F0FBB1614E444FD005ECFA1 /* DazHeart.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F0FBB1414E444FD005ECFA1 /* DazHeart.png */; }; 24 | 3F0FBB1714E444FD005ECFA1 /* DazStarOutline.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F0FBB1514E444FD005ECFA1 /* DazStarOutline.png */; }; 25 | 3F0FBB1E14E45E15005ECFA1 /* DazHeartIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F0FBB1C14E45E15005ECFA1 /* DazHeartIcon.png */; }; 26 | 3F0FBB1F14E45E15005ECFA1 /* DazHeartIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F0FBB1D14E45E15005ECFA1 /* DazHeartIcon@2x.png */; }; 27 | 3F1A4CE614E584A200B948CF /* DazFire.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F1A4CE414E584A200B948CF /* DazFire.png */; }; 28 | 3F1A4CE714E584A200B948CF /* DazSmoke.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F1A4CE514E584A200B948CF /* DazSmoke.png */; }; 29 | 3F4AC03E14E7082F00A91334 /* Icon-Small-50.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F4AC03714E7082F00A91334 /* Icon-Small-50.png */; }; 30 | 3F4AC03F14E7082F00A91334 /* Icon-Small.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F4AC03814E7082F00A91334 /* Icon-Small.png */; }; 31 | 3F4AC04014E7082F00A91334 /* Icon-Small@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F4AC03914E7082F00A91334 /* Icon-Small@2x.png */; }; 32 | 3F4AC04114E7082F00A91334 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F4AC03A14E7082F00A91334 /* Icon.png */; }; 33 | 3F4AC04214E7082F00A91334 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F4AC03B14E7082F00A91334 /* Icon@2x.png */; }; 34 | 3F4AC04314E7082F00A91334 /* iTunesArtwork.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F4AC03C14E7082F00A91334 /* iTunesArtwork.png */; }; 35 | 3F4AC05114E7259500A91334 /* DazTouchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4AC05014E7259400A91334 /* DazTouchController.m */; }; 36 | 3F4AC05414E7374200A91334 /* DazTriangle.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F4AC05214E7374200A91334 /* DazTriangle.png */; }; 37 | 3F4AC05514E7374200A91334 /* DazRing.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F4AC05314E7374200A91334 /* DazRing.png */; }; 38 | 3F687BC314E47426007F7BBF /* DazFlameIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F687BC114E47426007F7BBF /* DazFlameIcon.png */; }; 39 | 3F687BC414E47426007F7BBF /* DazFlameIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F687BC214E47426007F7BBF /* DazFlameIcon@2x.png */; }; 40 | 3F687BC914E478EE007F7BBF /* DazFlake.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F687BC614E478EE007F7BBF /* DazFlake.png */; }; 41 | 3F687BCA14E478EE007F7BBF /* DazFlakeIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F687BC714E478EE007F7BBF /* DazFlakeIcon.png */; }; 42 | 3F687BCB14E478EE007F7BBF /* DazFlakeIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3F687BC814E478EE007F7BBF /* DazFlakeIcon@2x.png */; }; 43 | 3FB92A1317A06C4500917A6E /* Icon-76.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A0817A06C4500917A6E /* Icon-76.png */; }; 44 | 3FB92A1417A06C4500917A6E /* Icon-76@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A0917A06C4500917A6E /* Icon-76@2x.png */; }; 45 | 3FB92A1617A06C4500917A6E /* Icon-Small-50@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A0B17A06C4500917A6E /* Icon-Small-50@2x.png */; }; 46 | 3FB92A1717A06C4500917A6E /* Icon-Small.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A0C17A06C4500917A6E /* Icon-Small.png */; }; 47 | 3FB92A1817A06C4500917A6E /* Icon-Small@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A0D17A06C4500917A6E /* Icon-Small@2x.png */; }; 48 | 3FB92A1917A06C4500917A6E /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A0E17A06C4500917A6E /* Icon.png */; }; 49 | 3FB92A1A17A06C4500917A6E /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A0F17A06C4500917A6E /* Icon@2x.png */; }; 50 | 3FB92A1B17A06C4500917A6E /* iTunesArtwork.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A1017A06C4500917A6E /* iTunesArtwork.png */; }; 51 | 3FB92A1C17A06C4500917A6E /* iTunesArtwork@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FB92A1117A06C4500917A6E /* iTunesArtwork@2x.png */; }; 52 | 3FBCC57614EAC1ED007A5BFF /* DazFireworksController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FBCC57514EAC1ED007A5BFF /* DazFireworksController.m */; }; 53 | 3FBCC57A14EAF3E8007A5BFF /* DazStarIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FBCC57814EAF3E8007A5BFF /* DazStarIcon@2x.png */; }; 54 | 3FBCC57B14EAF3E8007A5BFF /* DazStarIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 3FBCC57914EAF3E8007A5BFF /* DazStarIcon.png */; }; 55 | 3FCB552014EBE07E000164B1 /* readme.markdown in Resources */ = {isa = PBXBuildFile; fileRef = 3FCB551F14EBE07E000164B1 /* readme.markdown */; }; 56 | /* End PBXBuildFile section */ 57 | 58 | /* Begin PBXFileReference section */ 59 | 3F0FBACD14E41839005ECFA1 /* Dazzle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Dazzle.app; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 3F0FBAD114E41839005ECFA1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 61 | 3F0FBAD314E41839005ECFA1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 62 | 3F0FBAD514E41839005ECFA1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 63 | 3F0FBAD914E41839005ECFA1 /* Dazzle-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Dazzle-Info.plist"; sourceTree = ""; }; 64 | 3F0FBADB14E41839005ECFA1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 65 | 3F0FBADD14E41839005ECFA1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 66 | 3F0FBADF14E41839005ECFA1 /* Dazzle-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Dazzle-Prefix.pch"; sourceTree = ""; }; 67 | 3F0FBAE014E41839005ECFA1 /* DazAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DazAppDelegate.h; sourceTree = ""; }; 68 | 3F0FBAE114E41839005ECFA1 /* DazAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DazAppDelegate.m; sourceTree = ""; }; 69 | 3F0FBAE414E41839005ECFA1 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/iPhone.storyboard; sourceTree = ""; }; 70 | 3F0FBAE914E41839005ECFA1 /* DazViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DazViewController.h; sourceTree = ""; }; 71 | 3F0FBAEA14E41839005ECFA1 /* DazViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DazViewController.m; sourceTree = ""; }; 72 | 3F0FBAEC14E41839005ECFA1 /* first.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = first.png; sourceTree = ""; }; 73 | 3F0FBAEE14E41839005ECFA1 /* first@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "first@2x.png"; sourceTree = ""; }; 74 | 3F0FBAF014E41839005ECFA1 /* DazInfoController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DazInfoController.h; sourceTree = ""; }; 75 | 3F0FBAF114E41839005ECFA1 /* DazInfoController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DazInfoController.m; sourceTree = ""; }; 76 | 3F0FBAFE14E41CD6005ECFA1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 77 | 3F0FBB1114E43DBF005ECFA1 /* DazFireController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DazFireController.h; sourceTree = ""; }; 78 | 3F0FBB1214E43DBF005ECFA1 /* DazFireController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DazFireController.m; sourceTree = ""; }; 79 | 3F0FBB1414E444FD005ECFA1 /* DazHeart.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazHeart.png; sourceTree = ""; }; 80 | 3F0FBB1514E444FD005ECFA1 /* DazStarOutline.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazStarOutline.png; sourceTree = ""; }; 81 | 3F0FBB1C14E45E15005ECFA1 /* DazHeartIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazHeartIcon.png; sourceTree = ""; }; 82 | 3F0FBB1D14E45E15005ECFA1 /* DazHeartIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "DazHeartIcon@2x.png"; sourceTree = ""; }; 83 | 3F1A4CE414E584A200B948CF /* DazFire.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazFire.png; sourceTree = ""; }; 84 | 3F1A4CE514E584A200B948CF /* DazSmoke.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazSmoke.png; sourceTree = ""; }; 85 | 3F4AC03714E7082F00A91334 /* Icon-Small-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-50.png"; sourceTree = ""; }; 86 | 3F4AC03814E7082F00A91334 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small.png"; sourceTree = ""; }; 87 | 3F4AC03914E7082F00A91334 /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small@2x.png"; sourceTree = ""; }; 88 | 3F4AC03A14E7082F00A91334 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; }; 89 | 3F4AC03B14E7082F00A91334 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = ""; }; 90 | 3F4AC03C14E7082F00A91334 /* iTunesArtwork.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iTunesArtwork.png; sourceTree = ""; }; 91 | 3F4AC04F14E7259400A91334 /* DazTouchController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DazTouchController.h; sourceTree = ""; }; 92 | 3F4AC05014E7259400A91334 /* DazTouchController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DazTouchController.m; sourceTree = ""; }; 93 | 3F4AC05214E7374200A91334 /* DazTriangle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazTriangle.png; sourceTree = ""; }; 94 | 3F4AC05314E7374200A91334 /* DazRing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazRing.png; sourceTree = ""; }; 95 | 3F687BC114E47426007F7BBF /* DazFlameIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazFlameIcon.png; sourceTree = ""; }; 96 | 3F687BC214E47426007F7BBF /* DazFlameIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "DazFlameIcon@2x.png"; sourceTree = ""; }; 97 | 3F687BC614E478EE007F7BBF /* DazFlake.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazFlake.png; sourceTree = ""; }; 98 | 3F687BC714E478EE007F7BBF /* DazFlakeIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazFlakeIcon.png; sourceTree = ""; }; 99 | 3F687BC814E478EE007F7BBF /* DazFlakeIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "DazFlakeIcon@2x.png"; sourceTree = ""; }; 100 | 3FB92A0817A06C4500917A6E /* Icon-76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-76.png"; sourceTree = ""; }; 101 | 3FB92A0917A06C4500917A6E /* Icon-76@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-76@2x.png"; sourceTree = ""; }; 102 | 3FB92A0B17A06C4500917A6E /* Icon-Small-50@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small-50@2x.png"; sourceTree = ""; }; 103 | 3FB92A0C17A06C4500917A6E /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small.png"; sourceTree = ""; }; 104 | 3FB92A0D17A06C4500917A6E /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-Small@2x.png"; sourceTree = ""; }; 105 | 3FB92A0E17A06C4500917A6E /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; }; 106 | 3FB92A0F17A06C4500917A6E /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x.png"; sourceTree = ""; }; 107 | 3FB92A1017A06C4500917A6E /* iTunesArtwork.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iTunesArtwork.png; sourceTree = ""; }; 108 | 3FB92A1117A06C4500917A6E /* iTunesArtwork@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iTunesArtwork@2x.png"; sourceTree = ""; }; 109 | 3FBCC57414EAC1ED007A5BFF /* DazFireworksController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DazFireworksController.h; sourceTree = ""; }; 110 | 3FBCC57514EAC1ED007A5BFF /* DazFireworksController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DazFireworksController.m; sourceTree = ""; }; 111 | 3FBCC57814EAF3E8007A5BFF /* DazStarIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "DazStarIcon@2x.png"; sourceTree = ""; }; 112 | 3FBCC57914EAF3E8007A5BFF /* DazStarIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DazStarIcon.png; sourceTree = ""; }; 113 | 3FCB551F14EBE07E000164B1 /* readme.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.markdown; sourceTree = ""; }; 114 | /* End PBXFileReference section */ 115 | 116 | /* Begin PBXFrameworksBuildPhase section */ 117 | 3F0FBACA14E41839005ECFA1 /* Frameworks */ = { 118 | isa = PBXFrameworksBuildPhase; 119 | buildActionMask = 2147483647; 120 | files = ( 121 | 3F0FBAFF14E41CD6005ECFA1 /* QuartzCore.framework in Frameworks */, 122 | 3F0FBAD214E41839005ECFA1 /* UIKit.framework in Frameworks */, 123 | 3F0FBAD414E41839005ECFA1 /* Foundation.framework in Frameworks */, 124 | 3F0FBAD614E41839005ECFA1 /* CoreGraphics.framework in Frameworks */, 125 | ); 126 | runOnlyForDeploymentPostprocessing = 0; 127 | }; 128 | /* End PBXFrameworksBuildPhase section */ 129 | 130 | /* Begin PBXGroup section */ 131 | 3F0FBAC214E41839005ECFA1 = { 132 | isa = PBXGroup; 133 | children = ( 134 | 3FCB551F14EBE07E000164B1 /* readme.markdown */, 135 | 3F0FBAD714E41839005ECFA1 /* Dazzle */, 136 | 3F0FBAD014E41839005ECFA1 /* Frameworks */, 137 | 3F0FBACE14E41839005ECFA1 /* Products */, 138 | ); 139 | sourceTree = ""; 140 | }; 141 | 3F0FBACE14E41839005ECFA1 /* Products */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 3F0FBACD14E41839005ECFA1 /* Dazzle.app */, 145 | ); 146 | name = Products; 147 | sourceTree = ""; 148 | }; 149 | 3F0FBAD014E41839005ECFA1 /* Frameworks */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | 3F0FBAFE14E41CD6005ECFA1 /* QuartzCore.framework */, 153 | 3F0FBAD114E41839005ECFA1 /* UIKit.framework */, 154 | 3F0FBAD314E41839005ECFA1 /* Foundation.framework */, 155 | 3F0FBAD514E41839005ECFA1 /* CoreGraphics.framework */, 156 | ); 157 | name = Frameworks; 158 | sourceTree = ""; 159 | }; 160 | 3F0FBAD714E41839005ECFA1 /* Dazzle */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | 3F0FBAFC14E41BF7005ECFA1 /* App Core */, 164 | 3F0FBAF014E41839005ECFA1 /* DazInfoController.h */, 165 | 3F0FBAF114E41839005ECFA1 /* DazInfoController.m */, 166 | 3F0FBAE914E41839005ECFA1 /* DazViewController.h */, 167 | 3F0FBAEA14E41839005ECFA1 /* DazViewController.m */, 168 | 3F0FBB1114E43DBF005ECFA1 /* DazFireController.h */, 169 | 3F0FBB1214E43DBF005ECFA1 /* DazFireController.m */, 170 | 3F4AC04F14E7259400A91334 /* DazTouchController.h */, 171 | 3F4AC05014E7259400A91334 /* DazTouchController.m */, 172 | 3FBCC57414EAC1ED007A5BFF /* DazFireworksController.h */, 173 | 3FBCC57514EAC1ED007A5BFF /* DazFireworksController.m */, 174 | 3F0FBAFD14E41C98005ECFA1 /* Ressources */, 175 | 3F0FBAD814E41839005ECFA1 /* Supporting Files */, 176 | ); 177 | path = Dazzle; 178 | sourceTree = ""; 179 | }; 180 | 3F0FBAD814E41839005ECFA1 /* Supporting Files */ = { 181 | isa = PBXGroup; 182 | children = ( 183 | 3F0FBADD14E41839005ECFA1 /* main.m */, 184 | 3F0FBADF14E41839005ECFA1 /* Dazzle-Prefix.pch */, 185 | ); 186 | name = "Supporting Files"; 187 | sourceTree = ""; 188 | }; 189 | 3F0FBAFC14E41BF7005ECFA1 /* App Core */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | 3F0FBAE314E41839005ECFA1 /* iPhone.storyboard */, 193 | 3F0FBAD914E41839005ECFA1 /* Dazzle-Info.plist */, 194 | 3F0FBAE014E41839005ECFA1 /* DazAppDelegate.h */, 195 | 3F0FBAE114E41839005ECFA1 /* DazAppDelegate.m */, 196 | ); 197 | name = "App Core"; 198 | sourceTree = ""; 199 | }; 200 | 3F0FBAFD14E41C98005ECFA1 /* Ressources */ = { 201 | isa = PBXGroup; 202 | children = ( 203 | 3F4AC03514E7081A00A91334 /* App Icons */, 204 | 3F4AC03314E707EA00A91334 /* Sprites */, 205 | 3F4AC03414E707EF00A91334 /* Tab Icons */, 206 | 3F0FBADA14E41839005ECFA1 /* InfoPlist.strings */, 207 | ); 208 | name = Ressources; 209 | sourceTree = ""; 210 | }; 211 | 3F4AC03314E707EA00A91334 /* Sprites */ = { 212 | isa = PBXGroup; 213 | children = ( 214 | 3F1A4CE414E584A200B948CF /* DazFire.png */, 215 | 3F1A4CE514E584A200B948CF /* DazSmoke.png */, 216 | 3F0FBB1414E444FD005ECFA1 /* DazHeart.png */, 217 | 3F687BC614E478EE007F7BBF /* DazFlake.png */, 218 | 3F0FBB1514E444FD005ECFA1 /* DazStarOutline.png */, 219 | 3F4AC05214E7374200A91334 /* DazTriangle.png */, 220 | 3F4AC05314E7374200A91334 /* DazRing.png */, 221 | ); 222 | name = Sprites; 223 | sourceTree = ""; 224 | }; 225 | 3F4AC03414E707EF00A91334 /* Tab Icons */ = { 226 | isa = PBXGroup; 227 | children = ( 228 | 3F0FBB1C14E45E15005ECFA1 /* DazHeartIcon.png */, 229 | 3F0FBB1D14E45E15005ECFA1 /* DazHeartIcon@2x.png */, 230 | 3F687BC114E47426007F7BBF /* DazFlameIcon.png */, 231 | 3F687BC214E47426007F7BBF /* DazFlameIcon@2x.png */, 232 | 3F687BC714E478EE007F7BBF /* DazFlakeIcon.png */, 233 | 3F687BC814E478EE007F7BBF /* DazFlakeIcon@2x.png */, 234 | 3FBCC57914EAF3E8007A5BFF /* DazStarIcon.png */, 235 | 3FBCC57814EAF3E8007A5BFF /* DazStarIcon@2x.png */, 236 | 3F0FBAEC14E41839005ECFA1 /* first.png */, 237 | 3F0FBAEE14E41839005ECFA1 /* first@2x.png */, 238 | ); 239 | name = "Tab Icons"; 240 | sourceTree = ""; 241 | }; 242 | 3F4AC03514E7081A00A91334 /* App Icons */ = { 243 | isa = PBXGroup; 244 | children = ( 245 | 3FB92A0817A06C4500917A6E /* Icon-76.png */, 246 | 3FB92A0917A06C4500917A6E /* Icon-76@2x.png */, 247 | 3FB92A0B17A06C4500917A6E /* Icon-Small-50@2x.png */, 248 | 3FB92A0C17A06C4500917A6E /* Icon-Small.png */, 249 | 3FB92A0D17A06C4500917A6E /* Icon-Small@2x.png */, 250 | 3FB92A0E17A06C4500917A6E /* Icon.png */, 251 | 3FB92A0F17A06C4500917A6E /* Icon@2x.png */, 252 | 3FB92A1017A06C4500917A6E /* iTunesArtwork.png */, 253 | 3FB92A1117A06C4500917A6E /* iTunesArtwork@2x.png */, 254 | 3F4AC03714E7082F00A91334 /* Icon-Small-50.png */, 255 | 3F4AC03814E7082F00A91334 /* Icon-Small.png */, 256 | 3F4AC03914E7082F00A91334 /* Icon-Small@2x.png */, 257 | 3F4AC03A14E7082F00A91334 /* Icon.png */, 258 | 3F4AC03B14E7082F00A91334 /* Icon@2x.png */, 259 | 3F4AC03C14E7082F00A91334 /* iTunesArtwork.png */, 260 | ); 261 | name = "App Icons"; 262 | sourceTree = ""; 263 | }; 264 | /* End PBXGroup section */ 265 | 266 | /* Begin PBXNativeTarget section */ 267 | 3F0FBACC14E41839005ECFA1 /* Dazzle */ = { 268 | isa = PBXNativeTarget; 269 | buildConfigurationList = 3F0FBAF914E41839005ECFA1 /* Build configuration list for PBXNativeTarget "Dazzle" */; 270 | buildPhases = ( 271 | 3F0FBAC914E41839005ECFA1 /* Sources */, 272 | 3F0FBACA14E41839005ECFA1 /* Frameworks */, 273 | 3F0FBACB14E41839005ECFA1 /* Resources */, 274 | ); 275 | buildRules = ( 276 | ); 277 | dependencies = ( 278 | ); 279 | name = Dazzle; 280 | productName = Dazzle; 281 | productReference = 3F0FBACD14E41839005ECFA1 /* Dazzle.app */; 282 | productType = "com.apple.product-type.application"; 283 | }; 284 | /* End PBXNativeTarget section */ 285 | 286 | /* Begin PBXProject section */ 287 | 3F0FBAC414E41839005ECFA1 /* Project object */ = { 288 | isa = PBXProject; 289 | attributes = { 290 | LastUpgradeCheck = 0420; 291 | ORGANIZATIONNAME = "Leonhard Lichtschlag"; 292 | }; 293 | buildConfigurationList = 3F0FBAC714E41839005ECFA1 /* Build configuration list for PBXProject "Dazzle" */; 294 | compatibilityVersion = "Xcode 3.2"; 295 | developmentRegion = English; 296 | hasScannedForEncodings = 0; 297 | knownRegions = ( 298 | en, 299 | ); 300 | mainGroup = 3F0FBAC214E41839005ECFA1; 301 | productRefGroup = 3F0FBACE14E41839005ECFA1 /* Products */; 302 | projectDirPath = ""; 303 | projectRoot = ""; 304 | targets = ( 305 | 3F0FBACC14E41839005ECFA1 /* Dazzle */, 306 | ); 307 | }; 308 | /* End PBXProject section */ 309 | 310 | /* Begin PBXResourcesBuildPhase section */ 311 | 3F0FBACB14E41839005ECFA1 /* Resources */ = { 312 | isa = PBXResourcesBuildPhase; 313 | buildActionMask = 2147483647; 314 | files = ( 315 | 3F0FBADC14E41839005ECFA1 /* InfoPlist.strings in Resources */, 316 | 3FB92A1A17A06C4500917A6E /* Icon@2x.png in Resources */, 317 | 3F0FBAE514E41839005ECFA1 /* iPhone.storyboard in Resources */, 318 | 3F0FBAED14E41839005ECFA1 /* first.png in Resources */, 319 | 3F0FBAEF14E41839005ECFA1 /* first@2x.png in Resources */, 320 | 3F0FBB1614E444FD005ECFA1 /* DazHeart.png in Resources */, 321 | 3F0FBB1714E444FD005ECFA1 /* DazStarOutline.png in Resources */, 322 | 3F0FBB1E14E45E15005ECFA1 /* DazHeartIcon.png in Resources */, 323 | 3F0FBB1F14E45E15005ECFA1 /* DazHeartIcon@2x.png in Resources */, 324 | 3F687BC314E47426007F7BBF /* DazFlameIcon.png in Resources */, 325 | 3F687BC414E47426007F7BBF /* DazFlameIcon@2x.png in Resources */, 326 | 3F687BC914E478EE007F7BBF /* DazFlake.png in Resources */, 327 | 3FB92A1C17A06C4500917A6E /* iTunesArtwork@2x.png in Resources */, 328 | 3FB92A1917A06C4500917A6E /* Icon.png in Resources */, 329 | 3F687BCA14E478EE007F7BBF /* DazFlakeIcon.png in Resources */, 330 | 3FB92A1317A06C4500917A6E /* Icon-76.png in Resources */, 331 | 3F687BCB14E478EE007F7BBF /* DazFlakeIcon@2x.png in Resources */, 332 | 3F1A4CE614E584A200B948CF /* DazFire.png in Resources */, 333 | 3F1A4CE714E584A200B948CF /* DazSmoke.png in Resources */, 334 | 3FB92A1617A06C4500917A6E /* Icon-Small-50@2x.png in Resources */, 335 | 3F4AC03E14E7082F00A91334 /* Icon-Small-50.png in Resources */, 336 | 3FB92A1B17A06C4500917A6E /* iTunesArtwork.png in Resources */, 337 | 3F4AC03F14E7082F00A91334 /* Icon-Small.png in Resources */, 338 | 3FB92A1817A06C4500917A6E /* Icon-Small@2x.png in Resources */, 339 | 3F4AC04014E7082F00A91334 /* Icon-Small@2x.png in Resources */, 340 | 3F4AC04114E7082F00A91334 /* Icon.png in Resources */, 341 | 3FB92A1717A06C4500917A6E /* Icon-Small.png in Resources */, 342 | 3F4AC04214E7082F00A91334 /* Icon@2x.png in Resources */, 343 | 3F4AC04314E7082F00A91334 /* iTunesArtwork.png in Resources */, 344 | 3F4AC05414E7374200A91334 /* DazTriangle.png in Resources */, 345 | 3F4AC05514E7374200A91334 /* DazRing.png in Resources */, 346 | 3FBCC57A14EAF3E8007A5BFF /* DazStarIcon@2x.png in Resources */, 347 | 3FBCC57B14EAF3E8007A5BFF /* DazStarIcon.png in Resources */, 348 | 3FB92A1417A06C4500917A6E /* Icon-76@2x.png in Resources */, 349 | 3FCB552014EBE07E000164B1 /* readme.markdown in Resources */, 350 | ); 351 | runOnlyForDeploymentPostprocessing = 0; 352 | }; 353 | /* End PBXResourcesBuildPhase section */ 354 | 355 | /* Begin PBXSourcesBuildPhase section */ 356 | 3F0FBAC914E41839005ECFA1 /* Sources */ = { 357 | isa = PBXSourcesBuildPhase; 358 | buildActionMask = 2147483647; 359 | files = ( 360 | 3F0FBADE14E41839005ECFA1 /* main.m in Sources */, 361 | 3F0FBAE214E41839005ECFA1 /* DazAppDelegate.m in Sources */, 362 | 3F0FBAEB14E41839005ECFA1 /* DazViewController.m in Sources */, 363 | 3F0FBAF214E41839005ECFA1 /* DazInfoController.m in Sources */, 364 | 3F0FBB1314E43DBF005ECFA1 /* DazFireController.m in Sources */, 365 | 3F4AC05114E7259500A91334 /* DazTouchController.m in Sources */, 366 | 3FBCC57614EAC1ED007A5BFF /* DazFireworksController.m in Sources */, 367 | ); 368 | runOnlyForDeploymentPostprocessing = 0; 369 | }; 370 | /* End PBXSourcesBuildPhase section */ 371 | 372 | /* Begin PBXVariantGroup section */ 373 | 3F0FBADA14E41839005ECFA1 /* InfoPlist.strings */ = { 374 | isa = PBXVariantGroup; 375 | children = ( 376 | 3F0FBADB14E41839005ECFA1 /* en */, 377 | ); 378 | name = InfoPlist.strings; 379 | sourceTree = ""; 380 | }; 381 | 3F0FBAE314E41839005ECFA1 /* iPhone.storyboard */ = { 382 | isa = PBXVariantGroup; 383 | children = ( 384 | 3F0FBAE414E41839005ECFA1 /* en */, 385 | ); 386 | name = iPhone.storyboard; 387 | sourceTree = ""; 388 | }; 389 | /* End PBXVariantGroup section */ 390 | 391 | /* Begin XCBuildConfiguration section */ 392 | 3F0FBAF714E41839005ECFA1 /* Debug */ = { 393 | isa = XCBuildConfiguration; 394 | buildSettings = { 395 | ALWAYS_SEARCH_USER_PATHS = NO; 396 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 397 | CLANG_ENABLE_OBJC_ARC = YES; 398 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 399 | COPY_PHASE_STRIP = NO; 400 | GCC_C_LANGUAGE_STANDARD = gnu99; 401 | GCC_DYNAMIC_NO_PIC = NO; 402 | GCC_OPTIMIZATION_LEVEL = 0; 403 | GCC_PREPROCESSOR_DEFINITIONS = ( 404 | "DEBUG=1", 405 | "$(inherited)", 406 | ); 407 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 408 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 409 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 410 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 411 | GCC_WARN_UNUSED_VARIABLE = YES; 412 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 413 | "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; 414 | SDKROOT = iphoneos; 415 | TARGETED_DEVICE_FAMILY = "1,2"; 416 | }; 417 | name = Debug; 418 | }; 419 | 3F0FBAF814E41839005ECFA1 /* Release */ = { 420 | isa = XCBuildConfiguration; 421 | buildSettings = { 422 | ALWAYS_SEARCH_USER_PATHS = NO; 423 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 424 | CLANG_ENABLE_OBJC_ARC = YES; 425 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 426 | COPY_PHASE_STRIP = YES; 427 | GCC_C_LANGUAGE_STANDARD = gnu99; 428 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 429 | GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; 430 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 431 | GCC_WARN_UNUSED_VARIABLE = YES; 432 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 433 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 434 | "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; 435 | SDKROOT = iphoneos; 436 | TARGETED_DEVICE_FAMILY = "1,2"; 437 | VALIDATE_PRODUCT = YES; 438 | }; 439 | name = Release; 440 | }; 441 | 3F0FBAFA14E41839005ECFA1 /* Debug */ = { 442 | isa = XCBuildConfiguration; 443 | buildSettings = { 444 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 445 | GCC_PREFIX_HEADER = "Dazzle/Dazzle-Prefix.pch"; 446 | INFOPLIST_FILE = "Dazzle/Dazzle-Info.plist"; 447 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 448 | PRODUCT_NAME = "$(TARGET_NAME)"; 449 | TARGETED_DEVICE_FAMILY = 1; 450 | WRAPPER_EXTENSION = app; 451 | }; 452 | name = Debug; 453 | }; 454 | 3F0FBAFB14E41839005ECFA1 /* Release */ = { 455 | isa = XCBuildConfiguration; 456 | buildSettings = { 457 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 458 | GCC_PREFIX_HEADER = "Dazzle/Dazzle-Prefix.pch"; 459 | INFOPLIST_FILE = "Dazzle/Dazzle-Info.plist"; 460 | IPHONEOS_DEPLOYMENT_TARGET = 5.0; 461 | PRODUCT_NAME = "$(TARGET_NAME)"; 462 | TARGETED_DEVICE_FAMILY = 1; 463 | WRAPPER_EXTENSION = app; 464 | }; 465 | name = Release; 466 | }; 467 | /* End XCBuildConfiguration section */ 468 | 469 | /* Begin XCConfigurationList section */ 470 | 3F0FBAC714E41839005ECFA1 /* Build configuration list for PBXProject "Dazzle" */ = { 471 | isa = XCConfigurationList; 472 | buildConfigurations = ( 473 | 3F0FBAF714E41839005ECFA1 /* Debug */, 474 | 3F0FBAF814E41839005ECFA1 /* Release */, 475 | ); 476 | defaultConfigurationIsVisible = 0; 477 | defaultConfigurationName = Release; 478 | }; 479 | 3F0FBAF914E41839005ECFA1 /* Build configuration list for PBXNativeTarget "Dazzle" */ = { 480 | isa = XCConfigurationList; 481 | buildConfigurations = ( 482 | 3F0FBAFA14E41839005ECFA1 /* Debug */, 483 | 3F0FBAFB14E41839005ECFA1 /* Release */, 484 | ); 485 | defaultConfigurationIsVisible = 0; 486 | defaultConfigurationName = Release; 487 | }; 488 | /* End XCConfigurationList section */ 489 | }; 490 | rootObject = 3F0FBAC414E41839005ECFA1 /* Project object */; 491 | } 492 | -------------------------------------------------------------------------------- /Dazzle.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Dazzle/DazAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // DazAppDelegate.h 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | // =============================================================================================================== 12 | @interface DazAppDelegate : UIResponder 13 | // =============================================================================================================== 14 | 15 | @property (strong, nonatomic) UIWindow *window; 16 | 17 | 18 | @end 19 | 20 | -------------------------------------------------------------------------------- /Dazzle/DazAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // DazAppDelegate.m 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import "DazAppDelegate.h" 10 | 11 | // =============================================================================================================== 12 | @implementation DazAppDelegate 13 | // =============================================================================================================== 14 | 15 | @synthesize window = _window; 16 | 17 | - (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 18 | { 19 | // Override point for customization after application launch. 20 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 21 | 22 | return YES; 23 | } 24 | 25 | 26 | - (void) applicationWillResignActive:(UIApplication *)application 27 | { 28 | /* 29 | 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. 30 | 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. 31 | */ 32 | } 33 | 34 | 35 | - (void) applicationDidEnterBackground:(UIApplication *)application 36 | { 37 | /* 38 | 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. 39 | If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 40 | */ 41 | } 42 | 43 | 44 | - (void) applicationWillEnterForeground:(UIApplication *)application 45 | { 46 | /* 47 | 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. 48 | */ 49 | } 50 | 51 | 52 | - (void) applicationDidBecomeActive:(UIApplication *)application 53 | { 54 | /* 55 | 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. 56 | */ 57 | } 58 | 59 | 60 | - (void) applicationWillTerminate:(UIApplication *)application 61 | { 62 | /* 63 | Called when the application is about to terminate. 64 | Save data if appropriate. 65 | See also applicationDidEnterBackground:. 66 | */ 67 | } 68 | 69 | 70 | @end 71 | 72 | -------------------------------------------------------------------------------- /Dazzle/DazFire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazFire.png -------------------------------------------------------------------------------- /Dazzle/DazFireController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DazFireController.h 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class CAEmitterLayer; 12 | 13 | // =============================================================================================================== 14 | @interface DazFireController : UIViewController 15 | // =============================================================================================================== 16 | 17 | @property (strong) CAEmitterLayer *fireEmitter; 18 | @property (strong) CAEmitterLayer *smokeEmitter; 19 | 20 | - (void) controlFireHeight:(id)sender; 21 | - (void) setFireAmount:(float)zeroToOne; 22 | 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Dazzle/DazFireController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DazFireController.m 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import "DazFireController.h" 10 | #import 11 | 12 | // =============================================================================================================== 13 | @implementation DazFireController 14 | // =============================================================================================================== 15 | 16 | @synthesize fireEmitter; 17 | @synthesize smokeEmitter; 18 | 19 | 20 | // --------------------------------------------------------------------------------------------------------------- 21 | #pragma mark - 22 | #pragma mark View Lifecycle 23 | // --------------------------------------------------------------------------------------------------------------- 24 | 25 | - (void) viewDidLoad 26 | { 27 | [super viewDidLoad]; 28 | 29 | CGRect viewBounds = self.view.layer.bounds; 30 | 31 | // Create the emitter layers 32 | self.fireEmitter = [CAEmitterLayer layer]; 33 | self.smokeEmitter = [CAEmitterLayer layer]; 34 | 35 | // Place layers just above the tab bar 36 | self.fireEmitter.emitterPosition = CGPointMake(viewBounds.size.width/2.0, viewBounds.size.height - 60); 37 | self.fireEmitter.emitterSize = CGSizeMake(viewBounds.size.width/2.0, 0); 38 | self.fireEmitter.emitterMode = kCAEmitterLayerOutline; 39 | self.fireEmitter.emitterShape = kCAEmitterLayerLine; 40 | // with additive rendering the dense cell distribution will create "hot" areas 41 | self.fireEmitter.renderMode = kCAEmitterLayerAdditive; 42 | 43 | self.smokeEmitter.emitterPosition = CGPointMake(viewBounds.size.width/2.0, viewBounds.size.height - 60); 44 | self.smokeEmitter.emitterMode = kCAEmitterLayerPoints; 45 | 46 | // Create the fire emitter cell 47 | CAEmitterCell* fire = [CAEmitterCell emitterCell]; 48 | [fire setName:@"fire"]; 49 | 50 | fire.birthRate = 100; 51 | fire.emissionLongitude = M_PI; 52 | fire.velocity = -80; 53 | fire.velocityRange = 30; 54 | fire.emissionRange = 1.1; 55 | fire.yAcceleration = -200; 56 | fire.scaleSpeed = 0.3; 57 | fire.lifetime = 50; 58 | fire.lifetimeRange = (50.0 * 0.35); 59 | 60 | fire.color = [[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.1] CGColor]; 61 | fire.contents = (id) [[UIImage imageNamed:@"DazFire"] CGImage]; 62 | 63 | 64 | // Create the smoke emitter cell 65 | CAEmitterCell* smoke = [CAEmitterCell emitterCell]; 66 | [smoke setName:@"smoke"]; 67 | 68 | smoke.birthRate = 11; 69 | smoke.emissionLongitude = -M_PI / 2; 70 | smoke.lifetime = 10; 71 | smoke.velocity = -40; 72 | smoke.velocityRange = 20; 73 | smoke.emissionRange = M_PI / 4; 74 | smoke.spin = 1; 75 | smoke.spinRange = 6; 76 | smoke.yAcceleration = -160; 77 | smoke.contents = (id) [[UIImage imageNamed:@"DazSmoke"] CGImage]; 78 | smoke.scale = 0.1; 79 | smoke.alphaSpeed = -0.12; 80 | smoke.scaleSpeed = 0.7; 81 | 82 | 83 | // Add the smoke emitter cell to the smoke emitter layer 84 | self.smokeEmitter.emitterCells = [NSArray arrayWithObject:smoke]; 85 | self.fireEmitter.emitterCells = [NSArray arrayWithObject:fire]; 86 | [self.view.layer addSublayer:self.smokeEmitter]; 87 | [self.view.layer addSublayer:self.fireEmitter]; 88 | 89 | [self setFireAmount:0.9]; 90 | } 91 | 92 | 93 | - (void) viewWillUnload 94 | { 95 | [super viewWillUnload]; 96 | [self.fireEmitter removeFromSuperlayer]; 97 | self.fireEmitter = nil; 98 | [self.smokeEmitter removeFromSuperlayer]; 99 | self.smokeEmitter = nil; 100 | } 101 | 102 | 103 | - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 104 | { 105 | return (interfaceOrientation == UIDeviceOrientationPortrait); 106 | } 107 | 108 | 109 | // --------------------------------------------------------------------------------------------------------------- 110 | #pragma mark - 111 | #pragma mark Interaction 112 | // --------------------------------------------------------------------------------------------------------------- 113 | 114 | - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 115 | { 116 | [self controlFireHeight:event]; 117 | } 118 | 119 | 120 | - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 121 | { 122 | [self controlFireHeight:event]; 123 | } 124 | 125 | 126 | - (void) controlFireHeight:(UIEvent *)event 127 | { 128 | UITouch *touch = [[event allTouches] anyObject]; 129 | CGPoint touchPoint = [touch locationInView:self.view]; 130 | float distanceToBottom = self.view.bounds.size.height - touchPoint.y; 131 | float percentage = distanceToBottom / self.view.bounds.size.height; 132 | percentage = MAX(MIN(percentage, 1.0), 0.1); 133 | [self setFireAmount:2 *percentage]; 134 | } 135 | 136 | 137 | - (void) setFireAmount:(float)zeroToOne 138 | { 139 | // Update the fire properties 140 | [self.fireEmitter setValue:[NSNumber numberWithInt:(zeroToOne * 500)] 141 | forKeyPath:@"emitterCells.fire.birthRate"]; 142 | [self.fireEmitter setValue:[NSNumber numberWithFloat:zeroToOne] 143 | forKeyPath:@"emitterCells.fire.lifetime"]; 144 | [self.fireEmitter setValue:[NSNumber numberWithFloat:(zeroToOne * 0.35)] 145 | forKeyPath:@"emitterCells.fire.lifetimeRange"]; 146 | self.fireEmitter.emitterSize = CGSizeMake(50 * zeroToOne, 0); 147 | 148 | [self.smokeEmitter setValue:[NSNumber numberWithInt:zeroToOne * 4] 149 | forKeyPath:@"emitterCells.smoke.lifetime"]; 150 | [self.smokeEmitter setValue:(id)[[UIColor colorWithRed:1 green:1 blue:1 alpha:zeroToOne * 0.3] CGColor] 151 | forKeyPath:@"emitterCells.smoke.color"]; 152 | } 153 | 154 | 155 | @end 156 | 157 | 158 | -------------------------------------------------------------------------------- /Dazzle/DazFireworksController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DazFireworksController.h 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 14/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | // =============================================================================================================== 12 | @interface DazFireworksController : UIViewController 13 | // =============================================================================================================== 14 | 15 | 16 | @end 17 | 18 | 19 | -------------------------------------------------------------------------------- /Dazzle/DazFireworksController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DazFireworksController.m 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 14/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import "DazFireworksController.h" 10 | #import 11 | 12 | // =============================================================================================================== 13 | @implementation DazFireworksController 14 | // =============================================================================================================== 15 | 16 | // --------------------------------------------------------------------------------------------------------------- 17 | #pragma mark - 18 | #pragma mark View Lifecycle 19 | // --------------------------------------------------------------------------------------------------------------- 20 | 21 | - (void) viewDidLoad 22 | { 23 | [super viewDidLoad]; 24 | 25 | // Cells spawn in the bottom, moving up 26 | CAEmitterLayer *fireworksEmitter = [CAEmitterLayer layer]; 27 | CGRect viewBounds = self.view.layer.bounds; 28 | fireworksEmitter.emitterPosition = CGPointMake(viewBounds.size.width/2.0, viewBounds.size.height); 29 | fireworksEmitter.emitterSize = CGSizeMake(viewBounds.size.width/2.0, 0.0); 30 | fireworksEmitter.emitterMode = kCAEmitterLayerOutline; 31 | fireworksEmitter.emitterShape = kCAEmitterLayerLine; 32 | fireworksEmitter.renderMode = kCAEmitterLayerAdditive; 33 | fireworksEmitter.seed = (arc4random()%100)+1; 34 | 35 | // Create the rocket 36 | CAEmitterCell* rocket = [CAEmitterCell emitterCell]; 37 | 38 | rocket.birthRate = 1.0; 39 | rocket.emissionRange = 0.25 * M_PI; // some variation in angle 40 | rocket.velocity = 380; 41 | rocket.velocityRange = 100; 42 | rocket.yAcceleration = 75; 43 | rocket.lifetime = 1.02; // we cannot set the birthrate < 1.0 for the burst 44 | 45 | rocket.contents = (id) [[UIImage imageNamed:@"DazRing"] CGImage]; 46 | rocket.scale = 0.2; 47 | rocket.color = [[UIColor redColor] CGColor]; 48 | rocket.greenRange = 1.0; // different colors 49 | rocket.redRange = 1.0; 50 | rocket.blueRange = 1.0; 51 | rocket.spinRange = M_PI; // slow spin 52 | 53 | 54 | 55 | // the burst object cannot be seen, but will spawn the sparks 56 | // we change the color here, since the sparks inherit its value 57 | CAEmitterCell* burst = [CAEmitterCell emitterCell]; 58 | 59 | burst.birthRate = 1.0; // at the end of travel 60 | burst.velocity = 0; 61 | burst.scale = 2.5; 62 | burst.redSpeed =-1.5; // shifting 63 | burst.blueSpeed =+1.5; // shifting 64 | burst.greenSpeed =+1.0; // shifting 65 | burst.lifetime = 0.35; 66 | 67 | // and finally, the sparks 68 | CAEmitterCell* spark = [CAEmitterCell emitterCell]; 69 | 70 | spark.birthRate = 400; 71 | spark.velocity = 125; 72 | spark.emissionRange = 2* M_PI; // 360 deg 73 | spark.yAcceleration = 75; // gravity 74 | spark.lifetime = 3; 75 | 76 | spark.contents = (id) [[UIImage imageNamed:@"DazStarOutline"] CGImage]; 77 | spark.scaleSpeed =-0.2; 78 | spark.greenSpeed =-0.1; 79 | spark.redSpeed = 0.4; 80 | spark.blueSpeed =-0.1; 81 | spark.alphaSpeed =-0.25; 82 | spark.spin = 2* M_PI; 83 | spark.spinRange = 2* M_PI; 84 | 85 | // putting it together 86 | fireworksEmitter.emitterCells = [NSArray arrayWithObject:rocket]; 87 | rocket.emitterCells = [NSArray arrayWithObject:burst]; 88 | burst.emitterCells = [NSArray arrayWithObject:spark]; 89 | [self.view.layer addSublayer:fireworksEmitter]; 90 | } 91 | 92 | 93 | - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 94 | { 95 | return (interfaceOrientation == UIInterfaceOrientationPortrait); 96 | } 97 | 98 | 99 | @end 100 | 101 | -------------------------------------------------------------------------------- /Dazzle/DazFlake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazFlake.png -------------------------------------------------------------------------------- /Dazzle/DazFlakeIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazFlakeIcon.png -------------------------------------------------------------------------------- /Dazzle/DazFlakeIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazFlakeIcon@2x.png -------------------------------------------------------------------------------- /Dazzle/DazFlameIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazFlameIcon.png -------------------------------------------------------------------------------- /Dazzle/DazFlameIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazFlameIcon@2x.png -------------------------------------------------------------------------------- /Dazzle/DazHeart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazHeart.png -------------------------------------------------------------------------------- /Dazzle/DazHeartIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazHeartIcon.png -------------------------------------------------------------------------------- /Dazzle/DazHeartIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazHeartIcon@2x.png -------------------------------------------------------------------------------- /Dazzle/DazInfoController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DazInfoController.h 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | // =============================================================================================================== 12 | @interface DazInfoController : UIViewController 13 | // =============================================================================================================== 14 | 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Dazzle/DazInfoController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DazInfoController.m 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import "DazInfoController.h" 10 | #import 11 | 12 | // =============================================================================================================== 13 | @implementation DazInfoController 14 | // =============================================================================================================== 15 | 16 | 17 | // --------------------------------------------------------------------------------------------------------------- 18 | #pragma mark - 19 | #pragma mark View Lifecycle 20 | // --------------------------------------------------------------------------------------------------------------- 21 | 22 | - (void) viewDidLoad 23 | { 24 | [super viewDidLoad]; 25 | 26 | // Configure the particle emitter to the top edge of the screen 27 | CAEmitterLayer *snowEmitter = [CAEmitterLayer layer]; 28 | snowEmitter.emitterPosition = CGPointMake(self.view.bounds.size.width / 2.0, -30); 29 | snowEmitter.emitterSize = CGSizeMake(self.view.bounds.size.width * 2.0, 0.0);; 30 | 31 | // Spawn points for the flakes are within on the outline of the line 32 | snowEmitter.emitterMode = kCAEmitterLayerOutline; 33 | snowEmitter.emitterShape = kCAEmitterLayerLine; 34 | 35 | // Configure the snowflake emitter cell 36 | CAEmitterCell *snowflake = [CAEmitterCell emitterCell]; 37 | 38 | snowflake.birthRate = 1.0; 39 | snowflake.lifetime = 120.0; 40 | 41 | snowflake.velocity = -10; // falling down slowly 42 | snowflake.velocityRange = 10; 43 | snowflake.yAcceleration = 2; 44 | snowflake.emissionRange = 0.5 * M_PI; // some variation in angle 45 | snowflake.spinRange = 0.25 * M_PI; // slow spin 46 | 47 | snowflake.contents = (id) [[UIImage imageNamed:@"DazFlake"] CGImage]; 48 | snowflake.color = [[UIColor colorWithRed:0.600 green:0.658 blue:0.743 alpha:1.000] CGColor]; 49 | 50 | // Make the flakes seem inset in the background 51 | snowEmitter.shadowOpacity = 1.0; 52 | snowEmitter.shadowRadius = 0.0; 53 | snowEmitter.shadowOffset = CGSizeMake(0.0, 1.0); 54 | snowEmitter.shadowColor = [[UIColor whiteColor] CGColor]; 55 | 56 | // Add everything to our backing layer below the UIContol defined in the storyboard 57 | snowEmitter.emitterCells = [NSArray arrayWithObject:snowflake]; 58 | [self.view.layer insertSublayer:snowEmitter atIndex:0]; 59 | } 60 | 61 | 62 | - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 63 | { 64 | return (interfaceOrientation == UIDeviceOrientationPortrait); 65 | } 66 | 67 | 68 | @end 69 | 70 | -------------------------------------------------------------------------------- /Dazzle/DazRing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazRing.png -------------------------------------------------------------------------------- /Dazzle/DazSmoke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazSmoke.png -------------------------------------------------------------------------------- /Dazzle/DazStarIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazStarIcon.png -------------------------------------------------------------------------------- /Dazzle/DazStarIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazStarIcon@2x.png -------------------------------------------------------------------------------- /Dazzle/DazStarOutline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazStarOutline.png -------------------------------------------------------------------------------- /Dazzle/DazTouchController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DazFireController.h 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 11/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class CAEmitterLayer; 12 | 13 | // =============================================================================================================== 14 | @interface DazTouchController : UIViewController 15 | // =============================================================================================================== 16 | 17 | @property (strong) CAEmitterLayer *ringEmitter; 18 | 19 | - (void) touchAtPosition:(CGPoint)position; 20 | 21 | @end -------------------------------------------------------------------------------- /Dazzle/DazTouchController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DazTouchController.m 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 11/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import "DazTouchController.h" 10 | #import 11 | 12 | // =============================================================================================================== 13 | @implementation DazTouchController 14 | // =============================================================================================================== 15 | 16 | @synthesize ringEmitter; 17 | 18 | 19 | // --------------------------------------------------------------------------------------------------------------- 20 | #pragma mark - 21 | #pragma mark View Lifecycle 22 | // --------------------------------------------------------------------------------------------------------------- 23 | 24 | - (void) viewDidLoad 25 | { 26 | [super viewDidLoad]; 27 | 28 | CGRect viewBounds = self.view.layer.bounds; 29 | 30 | // Create the emitter layer 31 | self.ringEmitter = [CAEmitterLayer layer]; 32 | 33 | // Cells spawn in a 50pt circle around the position 34 | self.ringEmitter.emitterPosition = CGPointMake(viewBounds.size.width/2.0, viewBounds.size.height/2.0); 35 | self.ringEmitter.emitterSize = CGSizeMake(50, 0); 36 | self.ringEmitter.emitterMode = kCAEmitterLayerOutline; 37 | self.ringEmitter.emitterShape = kCAEmitterLayerCircle; 38 | self.ringEmitter.renderMode = kCAEmitterLayerBackToFront; 39 | 40 | // Create the fire emitter cell 41 | CAEmitterCell* ring = [CAEmitterCell emitterCell]; 42 | [ring setName:@"ring"]; 43 | 44 | ring.birthRate = 0; 45 | ring.velocity = 250; 46 | ring.scale = 0.5; 47 | ring.scaleSpeed =-0.2; 48 | ring.greenSpeed =-0.2; // shifting to green 49 | ring.redSpeed =-0.5; 50 | ring.blueSpeed =-0.5; 51 | ring.lifetime = 2; 52 | 53 | ring.color = [[UIColor whiteColor] CGColor]; 54 | ring.contents = (id) [[UIImage imageNamed:@"DazTriangle"] CGImage]; 55 | 56 | 57 | CAEmitterCell* circle = [CAEmitterCell emitterCell]; 58 | [circle setName:@"circle"]; 59 | 60 | circle.birthRate = 10; // every triangle creates 20 61 | circle.emissionLongitude = M_PI * 0.5; // sideways to triangle vector 62 | circle.velocity = 50; 63 | circle.scale = 0.5; 64 | circle.scaleSpeed =-0.2; 65 | circle.greenSpeed =-0.1; // shifting to blue 66 | circle.redSpeed =-0.2; 67 | circle.blueSpeed = 0.1; 68 | circle.alphaSpeed =-0.2; 69 | circle.lifetime = 4; 70 | 71 | circle.color = [[UIColor whiteColor] CGColor]; 72 | circle.contents = (id) [[UIImage imageNamed:@"DazRing"] CGImage]; 73 | 74 | 75 | CAEmitterCell* star = [CAEmitterCell emitterCell]; 76 | [star setName:@"star"]; 77 | 78 | star.birthRate = 10; // every triangle creates 20 79 | star.velocity = 100; 80 | star.zAcceleration = -1; 81 | star.emissionLongitude = -M_PI; // back from triangle vector 82 | star.scale = 0.5; 83 | star.scaleSpeed =-0.2; 84 | star.greenSpeed =-0.1; 85 | star.redSpeed = 0.4; // shifting to red 86 | star.blueSpeed =-0.1; 87 | star.alphaSpeed =-0.2; 88 | star.lifetime = 2; 89 | 90 | star.color = [[UIColor whiteColor] CGColor]; 91 | star.contents = (id) [[UIImage imageNamed:@"DazStarOutline"] CGImage]; 92 | 93 | // First traigles are emitted, which then spawn circles and star along their path 94 | self.ringEmitter.emitterCells = [NSArray arrayWithObject:ring]; 95 | ring.emitterCells = [NSArray arrayWithObjects:circle, star, nil]; 96 | // circle.emitterCells = [NSArray arrayWithObject:star]; // this is SLOW! 97 | [self.view.layer addSublayer:self.ringEmitter]; 98 | } 99 | 100 | 101 | - (void) viewWillUnload 102 | { 103 | [super viewWillUnload]; 104 | [self.ringEmitter removeFromSuperlayer]; 105 | self.ringEmitter = nil; 106 | } 107 | 108 | 109 | - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 110 | { 111 | return (interfaceOrientation == UIInterfaceOrientationPortrait); 112 | } 113 | 114 | 115 | // --------------------------------------------------------------------------------------------------------------- 116 | #pragma mark - 117 | #pragma mark Interaction 118 | // --------------------------------------------------------------------------------------------------------------- 119 | 120 | - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 121 | { 122 | UITouch *touch = [[event allTouches] anyObject]; 123 | CGPoint touchPoint = [touch locationInView:self.view]; 124 | [self touchAtPosition:touchPoint]; 125 | } 126 | 127 | 128 | - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 129 | { 130 | UITouch *touch = [[event allTouches] anyObject]; 131 | CGPoint touchPoint = [touch locationInView:self.view]; 132 | [self touchAtPosition:touchPoint]; 133 | } 134 | 135 | 136 | - (void) touchAtPosition:(CGPoint)position 137 | { 138 | // Bling bling.. 139 | CABasicAnimation *burst = [CABasicAnimation animationWithKeyPath:@"emitterCells.ring.birthRate"]; 140 | burst.fromValue = [NSNumber numberWithFloat: 125.0]; // short but intense burst 141 | burst.toValue = [NSNumber numberWithFloat: 0.0]; // each birth creates 20 aditional cells! 142 | burst.duration = 0.5; 143 | burst.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 144 | 145 | [self.ringEmitter addAnimation:burst forKey:@"burst"]; 146 | 147 | // Move to touch point 148 | [CATransaction begin]; 149 | [CATransaction setDisableActions: YES]; 150 | self.ringEmitter.emitterPosition = position; 151 | [CATransaction commit]; 152 | } 153 | 154 | 155 | @end 156 | 157 | -------------------------------------------------------------------------------- /Dazzle/DazTriangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/DazTriangle.png -------------------------------------------------------------------------------- /Dazzle/DazViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // DazViewController.h 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class CAEmitterLayer; 12 | 13 | // =============================================================================================================== 14 | @interface DazViewController : UIViewController 15 | // =============================================================================================================== 16 | 17 | @property (weak, nonatomic) IBOutlet UIButton *likeButton; 18 | @property (strong) CAEmitterLayer *heartsEmitter; 19 | 20 | - (IBAction) likeButtonPressed:(id)sender; 21 | 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Dazzle/DazViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // DazViewController.m 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import "DazViewController.h" 10 | #import 11 | 12 | // =============================================================================================================== 13 | @implementation DazViewController 14 | // =============================================================================================================== 15 | 16 | @synthesize likeButton; 17 | @synthesize heartsEmitter; 18 | 19 | 20 | // --------------------------------------------------------------------------------------------------------------- 21 | #pragma mark - 22 | #pragma mark View Lifecycle 23 | // --------------------------------------------------------------------------------------------------------------- 24 | 25 | - (void) viewDidLoad 26 | { 27 | [super viewDidLoad]; 28 | 29 | // Configure the particle emitter 30 | self.heartsEmitter = [CAEmitterLayer layer]; 31 | self.heartsEmitter.emitterPosition = CGPointMake(likeButton.frame.origin.x + likeButton.frame.size.width/2.0, 32 | likeButton.frame.origin.y + likeButton.frame.size.height/2.0); 33 | self.heartsEmitter.emitterSize = likeButton.bounds.size; 34 | 35 | // Spawn points for the hearts are within the area defined by the button frame 36 | self.heartsEmitter.emitterMode = kCAEmitterLayerVolume; 37 | self.heartsEmitter.emitterShape = kCAEmitterLayerRectangle; 38 | self.heartsEmitter.renderMode = kCAEmitterLayerAdditive; 39 | 40 | // Configure the emitter cell 41 | CAEmitterCell *heart = [CAEmitterCell emitterCell]; 42 | heart.name = @"heart"; 43 | 44 | heart.emissionLongitude = M_PI/2.0; // up 45 | heart.emissionRange = 0.55 * M_PI; // in a wide spread 46 | heart.birthRate = 0.0; // emitter is deactivated for now 47 | heart.lifetime = 10.0; // hearts vanish after 10 seconds 48 | 49 | heart.velocity = -120; // particles get fired up fast 50 | heart.velocityRange = 60; // with some variation 51 | heart.yAcceleration = 20; // but fall eventually 52 | 53 | heart.contents = (id) [[UIImage imageNamed:@"DazHeart"] CGImage]; 54 | heart.color = [[UIColor colorWithRed:0.5 green:0.0 blue:0.5 alpha:0.5] CGColor]; 55 | heart.redRange = 0.3; // some variation in the color 56 | heart.blueRange = 0.3; 57 | heart.alphaSpeed = -0.5 / heart.lifetime; // fade over the lifetime 58 | 59 | heart.scale = 0.15; // let them start small 60 | heart.scaleSpeed = 0.5; // but then 'explode' in size 61 | heart.spinRange = 2.0 * M_PI; // and send them spinning from -180 to +180 deg/s 62 | 63 | // Add everything to our backing layer 64 | self.heartsEmitter.emitterCells = [NSArray arrayWithObject:heart]; 65 | [self.view.layer addSublayer:heartsEmitter]; 66 | } 67 | 68 | 69 | - (void) viewWillUnload 70 | { 71 | [super viewWillUnload]; 72 | [self.heartsEmitter removeFromSuperlayer]; 73 | self.heartsEmitter = nil; 74 | } 75 | 76 | 77 | - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 78 | { 79 | return (interfaceOrientation == UIDeviceOrientationPortrait); 80 | } 81 | 82 | 83 | // --------------------------------------------------------------------------------------------------------------- 84 | #pragma mark - 85 | #pragma mark Interaction 86 | // --------------------------------------------------------------------------------------------------------------- 87 | 88 | - (IBAction) likeButtonPressed:(id)sender 89 | { 90 | // Fires up some hearts to rain on the view 91 | CABasicAnimation *heartsBurst = [CABasicAnimation animationWithKeyPath:@"emitterCells.heart.birthRate"]; 92 | heartsBurst.fromValue = [NSNumber numberWithFloat:150.0]; 93 | heartsBurst.toValue = [NSNumber numberWithFloat: 0.0]; 94 | heartsBurst.duration = 5.0; 95 | heartsBurst.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; 96 | 97 | [self.heartsEmitter addAnimation:heartsBurst forKey:@"heartsBurst"]; 98 | } 99 | 100 | 101 | @end 102 | 103 | -------------------------------------------------------------------------------- /Dazzle/Dazzle-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFiles 12 | 13 | Icon.png 14 | Icon@2x.png 15 | 16 | CFBundleIcons 17 | 18 | CFBundlePrimaryIcon 19 | 20 | CFBundleIconFiles 21 | 22 | Icon.png 23 | Icon@2x.png 24 | 25 | UIPrerenderedIcon 26 | 27 | 28 | 29 | CFBundleIdentifier 30 | de.rwth.hci.${PRODUCT_NAME:rfc1034identifier} 31 | CFBundleInfoDictionaryVersion 32 | 6.0 33 | CFBundleName 34 | ${PRODUCT_NAME} 35 | CFBundlePackageType 36 | APPL 37 | CFBundleShortVersionString 38 | 1.0 39 | CFBundleSignature 40 | ???? 41 | CFBundleVersion 42 | 1.0 43 | LSRequiresIPhoneOS 44 | 45 | UIMainStoryboardFile 46 | iPhone 47 | UIRequiredDeviceCapabilities 48 | 49 | armv7 50 | 51 | UISupportedInterfaceOrientations 52 | 53 | UIInterfaceOrientationPortrait 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Dazzle/Dazzle-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'Dazzle' target in the 'Dazzle' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_5_0 8 | #warning "This project uses features only available in iOS SDK 5.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /Dazzle/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/Icon-76.png -------------------------------------------------------------------------------- /Dazzle/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/Icon-76@2x.png -------------------------------------------------------------------------------- /Dazzle/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/Icon-Small-50.png -------------------------------------------------------------------------------- /Dazzle/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /Dazzle/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/Icon-Small.png -------------------------------------------------------------------------------- /Dazzle/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/Icon-Small@2x.png -------------------------------------------------------------------------------- /Dazzle/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/Icon.png -------------------------------------------------------------------------------- /Dazzle/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/Icon@2x.png -------------------------------------------------------------------------------- /Dazzle/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Dazzle/en.lproj/iPhone.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 91 | 100 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | -------------------------------------------------------------------------------- /Dazzle/first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/first.png -------------------------------------------------------------------------------- /Dazzle/first@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/first@2x.png -------------------------------------------------------------------------------- /Dazzle/iTunesArtwork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/iTunesArtwork.png -------------------------------------------------------------------------------- /Dazzle/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Dazzle/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /Dazzle/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Dazzle 4 | // 5 | // Created by Leonhard Lichtschlag on 9/Feb/12. 6 | // Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "DazAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool 16 | { 17 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([DazAppDelegate class])); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Helper FIles/Source for the shapes.graffle: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ApplicationVersion 6 | 7 | com.omnigroup.OmniGrafflePro 8 | 139.18.0.187838 9 | 10 | CreationDate 11 | 2012-02-09 16:23:52 +0000 12 | Creator 13 | Leonhard Lichtschlag 14 | GraphDocumentVersion 15 | 8 16 | GuidesLocked 17 | NO 18 | GuidesVisible 19 | YES 20 | ImageCounter 21 | 2 22 | LinksVisible 23 | NO 24 | MagnetsVisible 25 | NO 26 | MasterSheets 27 | 28 | ModificationDate 29 | 2013-07-24 19:37:59 +0000 30 | Modifier 31 | Leonhard Lichtschlag 32 | NotesVisible 33 | NO 34 | OriginVisible 35 | NO 36 | PageBreaks 37 | YES 38 | PrintInfo 39 | 40 | NSBottomMargin 41 | 42 | float 43 | 41 44 | 45 | NSHorizonalPagination 46 | 47 | int 48 | 0 49 | 50 | NSLeftMargin 51 | 52 | float 53 | 18 54 | 55 | NSPaperSize 56 | 57 | size 58 | {595, 842} 59 | 60 | NSPrintReverseOrientation 61 | 62 | int 63 | 0 64 | 65 | NSRightMargin 66 | 67 | float 68 | 18 69 | 70 | NSTopMargin 71 | 72 | float 73 | 18 74 | 75 | 76 | ReadOnly 77 | NO 78 | Sheets 79 | 80 | 81 | ActiveLayerIndex 82 | 0 83 | AutoAdjust 84 | 85 | BackgroundGraphic 86 | 87 | Bounds 88 | {{0, 0}, {559, 783}} 89 | Class 90 | SolidGraphic 91 | ID 92 | 2 93 | Style 94 | 95 | shadow 96 | 97 | Draws 98 | NO 99 | 100 | stroke 101 | 102 | Draws 103 | NO 104 | 105 | 106 | 107 | BaseZoom 108 | 0 109 | CanvasOrigin 110 | {0, 0} 111 | ColumnAlign 112 | 1 113 | ColumnSpacing 114 | 36 115 | DisplayScale 116 | 1.000 cm = 1.000 cm 117 | GraphicsList 118 | 119 | 120 | Bounds 121 | {{98, 100}, {166, 163}} 122 | Class 123 | ShapedGraphic 124 | ID 125 | 3 126 | Shape 127 | AdjustableStar 128 | ShapeData 129 | 130 | Style 131 | 132 | fill 133 | 134 | Draws 135 | NO 136 | 137 | shadow 138 | 139 | Draws 140 | NO 141 | 142 | stroke 143 | 144 | Color 145 | 146 | b 147 | 1 148 | g 149 | 1 150 | r 151 | 1 152 | 153 | Width 154 | 8 155 | 156 | 157 | Text 158 | 159 | VerticalPad 160 | 0 161 | 162 | 163 | 164 | Bounds 165 | {{22, 22}, {475, 566}} 166 | Class 167 | ShapedGraphic 168 | ID 169 | 6 170 | Shape 171 | Rectangle 172 | Style 173 | 174 | fill 175 | 176 | Color 177 | 178 | b 179 | 0.609524 180 | g 181 | 1 182 | r 183 | 0.804762 184 | 185 | 186 | shadow 187 | 188 | Draws 189 | NO 190 | 191 | 192 | 193 | 194 | GridInfo 195 | 196 | HPages 197 | 1 198 | KeepToScale 199 | 200 | Layers 201 | 202 | 203 | Lock 204 | NO 205 | Name 206 | Layer 1 207 | Print 208 | YES 209 | View 210 | YES 211 | 212 | 213 | LayoutInfo 214 | 215 | Animate 216 | NO 217 | circoMinDist 218 | 18 219 | circoSeparation 220 | 0.0 221 | layoutEngine 222 | dot 223 | neatoSeparation 224 | 0.0 225 | twopiSeparation 226 | 0.0 227 | 228 | Orientation 229 | 2 230 | PrintOnePage 231 | 232 | RowAlign 233 | 1 234 | RowSpacing 235 | 36 236 | SheetTitle 237 | Canvas 1 238 | UniqueID 239 | 1 240 | VPages 241 | 1 242 | 243 | 244 | ActiveLayerIndex 245 | 0 246 | AutoAdjust 247 | 248 | BackgroundGraphic 249 | 250 | Bounds 251 | {{0, 0}, {559, 783}} 252 | Class 253 | SolidGraphic 254 | ID 255 | 2 256 | Style 257 | 258 | shadow 259 | 260 | Draws 261 | NO 262 | 263 | stroke 264 | 265 | Draws 266 | NO 267 | 268 | 269 | 270 | BaseZoom 271 | 0 272 | CanvasOrigin 273 | {0, 0} 274 | ColumnAlign 275 | 1 276 | ColumnSpacing 277 | 36 278 | DisplayScale 279 | 1.000 cm = 1.000 cm 280 | GraphicsList 281 | 282 | 283 | Bounds 284 | {{58, 49}, {255, 317}} 285 | Class 286 | ShapedGraphic 287 | FitText 288 | YES 289 | Flow 290 | Resize 291 | FontInfo 292 | 293 | Color 294 | 295 | b 296 | 0 297 | g 298 | 0 299 | r 300 | 0 301 | 302 | Font 303 | HiraKakuProN-W3 304 | Size 305 | 198 306 | 307 | ID 308 | 7 309 | Shape 310 | Rectangle 311 | Style 312 | 313 | fill 314 | 315 | Draws 316 | NO 317 | 318 | shadow 319 | 320 | Draws 321 | NO 322 | 323 | stroke 324 | 325 | Draws 326 | NO 327 | 328 | 329 | Text 330 | 331 | Pad 332 | 0 333 | Text 334 | {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf390 335 | \cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;\f1\fswiss\fcharset0 Helvetica;} 336 | {\colortbl;\red255\green255\blue255;} 337 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 338 | 339 | \f0\fs398 \cf0 \uc0\u9829 340 | \f1 } 341 | VerticalPad 342 | 0 343 | 344 | Wrap 345 | NO 346 | 347 | 348 | Bounds 349 | {{22, 22}, {475, 566}} 350 | Class 351 | ShapedGraphic 352 | ID 353 | 6 354 | Shape 355 | Rectangle 356 | Style 357 | 358 | fill 359 | 360 | Color 361 | 362 | b 363 | 0.609524 364 | g 365 | 1 366 | r 367 | 0.804762 368 | 369 | 370 | shadow 371 | 372 | Draws 373 | NO 374 | 375 | 376 | 377 | 378 | GridInfo 379 | 380 | HPages 381 | 1 382 | KeepToScale 383 | 384 | Layers 385 | 386 | 387 | Lock 388 | NO 389 | Name 390 | Layer 1 391 | Print 392 | YES 393 | View 394 | YES 395 | 396 | 397 | LayoutInfo 398 | 399 | Animate 400 | NO 401 | circoMinDist 402 | 18 403 | circoSeparation 404 | 0.0 405 | layoutEngine 406 | dot 407 | neatoSeparation 408 | 0.0 409 | twopiSeparation 410 | 0.0 411 | 412 | Orientation 413 | 2 414 | PrintOnePage 415 | 416 | RowAlign 417 | 1 418 | RowSpacing 419 | 36 420 | SheetTitle 421 | Canvas 2 422 | UniqueID 423 | 2 424 | VPages 425 | 1 426 | 427 | 428 | ActiveLayerIndex 429 | 0 430 | AutoAdjust 431 | 432 | BackgroundGraphic 433 | 434 | Bounds 435 | {{0, 0}, {559, 783}} 436 | Class 437 | SolidGraphic 438 | ID 439 | 2 440 | Style 441 | 442 | shadow 443 | 444 | Draws 445 | NO 446 | 447 | stroke 448 | 449 | Draws 450 | NO 451 | 452 | 453 | 454 | BaseZoom 455 | 0 456 | CanvasOrigin 457 | {0, 0} 458 | ColumnAlign 459 | 1 460 | ColumnSpacing 461 | 36 462 | DisplayScale 463 | 1.000 cm = 1.000 cm 464 | GraphicsList 465 | 466 | 467 | Bounds 468 | {{58, 49}, {255, 317}} 469 | Class 470 | ShapedGraphic 471 | FitText 472 | YES 473 | Flow 474 | Resize 475 | FontInfo 476 | 477 | Color 478 | 479 | b 480 | 0 481 | g 482 | 0 483 | r 484 | 0 485 | 486 | Font 487 | HiraKakuProN-W3 488 | Size 489 | 198 490 | 491 | ID 492 | 7 493 | Shape 494 | Rectangle 495 | Style 496 | 497 | fill 498 | 499 | Draws 500 | NO 501 | 502 | shadow 503 | 504 | Draws 505 | NO 506 | 507 | stroke 508 | 509 | Draws 510 | NO 511 | 512 | 513 | Text 514 | 515 | Pad 516 | 0 517 | Text 518 | {\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf390 519 | \cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;\f1\fswiss\fcharset0 Helvetica;} 520 | {\colortbl;\red255\green255\blue255;} 521 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc 522 | 523 | \f0\fs398 \cf0 \uc0\u9829 524 | \f1 } 525 | VerticalPad 526 | 0 527 | 528 | Wrap 529 | NO 530 | 531 | 532 | Bounds 533 | {{22, 22}, {475, 566}} 534 | Class 535 | ShapedGraphic 536 | ID 537 | 6 538 | Shape 539 | Rectangle 540 | Style 541 | 542 | fill 543 | 544 | Color 545 | 546 | b 547 | 0.609524 548 | g 549 | 1 550 | r 551 | 0.804762 552 | 553 | 554 | shadow 555 | 556 | Draws 557 | NO 558 | 559 | 560 | 561 | 562 | GridInfo 563 | 564 | HPages 565 | 1 566 | KeepToScale 567 | 568 | Layers 569 | 570 | 571 | Lock 572 | NO 573 | Name 574 | Layer 1 575 | Print 576 | YES 577 | View 578 | YES 579 | 580 | 581 | LayoutInfo 582 | 583 | Animate 584 | NO 585 | circoMinDist 586 | 18 587 | circoSeparation 588 | 0.0 589 | layoutEngine 590 | dot 591 | neatoSeparation 592 | 0.0 593 | twopiSeparation 594 | 0.0 595 | 596 | Orientation 597 | 2 598 | PrintOnePage 599 | 600 | RowAlign 601 | 1 602 | RowSpacing 603 | 36 604 | SheetTitle 605 | Canvas 4 606 | UniqueID 607 | 4 608 | VPages 609 | 1 610 | 611 | 612 | ActiveLayerIndex 613 | 0 614 | AutoAdjust 615 | 616 | BackgroundGraphic 617 | 618 | Bounds 619 | {{0, 0}, {559, 783}} 620 | Class 621 | SolidGraphic 622 | ID 623 | 2 624 | Style 625 | 626 | shadow 627 | 628 | Draws 629 | NO 630 | 631 | stroke 632 | 633 | Draws 634 | NO 635 | 636 | 637 | 638 | BaseZoom 639 | 0 640 | CanvasOrigin 641 | {0, 0} 642 | ColumnAlign 643 | 1 644 | ColumnSpacing 645 | 36 646 | DisplayScale 647 | 1.000 cm = 1.000 cm 648 | GraphicsList 649 | 650 | 651 | Class 652 | Group 653 | Graphics 654 | 655 | 656 | Class 657 | Group 658 | Graphics 659 | 660 | 661 | Class 662 | Group 663 | Graphics 664 | 665 | 666 | Class 667 | LineGraphic 668 | ID 669 | 57 670 | Points 671 | 672 | {115.22076, 153.47049999999999} 673 | {122.15921, 193.47461999999999} 674 | 675 | Style 676 | 677 | stroke 678 | 679 | Cap 680 | 0 681 | Color 682 | 683 | b 684 | 1 685 | g 686 | 1 687 | r 688 | 1 689 | 690 | HeadArrow 691 | 0 692 | Join 693 | 0 694 | Legacy 695 | 696 | TailArrow 697 | 0 698 | Width 699 | 11 700 | 701 | 702 | 703 | 704 | Class 705 | LineGraphic 706 | ID 707 | 58 708 | Points 709 | 710 | {84.045394999999999, 207.46779000000001} 711 | {122.15921, 193.47461999999999} 712 | 713 | Style 714 | 715 | stroke 716 | 717 | Cap 718 | 0 719 | Color 720 | 721 | b 722 | 1 723 | g 724 | 1 725 | r 726 | 1 727 | 728 | HeadArrow 729 | 0 730 | Join 731 | 0 732 | Legacy 733 | 734 | TailArrow 735 | 0 736 | Width 737 | 11 738 | 739 | 740 | 741 | 742 | Class 743 | LineGraphic 744 | ID 745 | 59 746 | Points 747 | 748 | {81.632767000000001, 170.69029} 749 | {257.63278000000003, 271.69033999999999} 750 | 751 | Rotation 752 | 120 753 | Style 754 | 755 | stroke 756 | 757 | Cap 758 | 0 759 | Color 760 | 761 | b 762 | 1 763 | g 764 | 1 765 | r 766 | 1 767 | 768 | HeadArrow 769 | 0 770 | Join 771 | 0 772 | Legacy 773 | 774 | TailArrow 775 | 0 776 | Width 777 | 11 778 | 779 | 780 | 781 | 782 | ID 783 | 56 784 | Rotation 785 | 120 786 | VFlip 787 | YES 788 | 789 | 790 | Class 791 | Group 792 | Graphics 793 | 794 | 795 | Class 796 | LineGraphic 797 | ID 798 | 61 799 | Points 800 | 801 | {255.48589999999999, 234.45260999999999} 802 | {217.37206, 248.44577000000001} 803 | 804 | Style 805 | 806 | stroke 807 | 808 | Cap 809 | 0 810 | Color 811 | 812 | b 813 | 1 814 | g 815 | 1 816 | r 817 | 1 818 | 819 | HeadArrow 820 | 0 821 | Join 822 | 0 823 | Legacy 824 | 825 | TailArrow 826 | 0 827 | Width 828 | 11 829 | 830 | 831 | 832 | 833 | Class 834 | LineGraphic 835 | ID 836 | 62 837 | Points 838 | 839 | {224.31049999999999, 288.44988999999998} 840 | {217.37206, 248.44577000000001} 841 | 842 | Style 843 | 844 | stroke 845 | 846 | Cap 847 | 0 848 | Color 849 | 850 | b 851 | 1 852 | g 853 | 1 854 | r 855 | 1 856 | 857 | HeadArrow 858 | 0 859 | Join 860 | 0 861 | Legacy 862 | 863 | TailArrow 864 | 0 865 | Width 866 | 11 867 | 868 | 869 | 870 | 871 | Class 872 | LineGraphic 873 | ID 874 | 63 875 | Points 876 | 877 | {257.36712999999997, 272.15062999999998} 878 | {81.898499000000001, 170.23007000000001} 879 | 880 | Rotation 881 | 120 882 | Style 883 | 884 | stroke 885 | 886 | Cap 887 | 0 888 | Color 889 | 890 | b 891 | 1 892 | g 893 | 1 894 | r 895 | 1 896 | 897 | HeadArrow 898 | 0 899 | Join 900 | 0 901 | Legacy 902 | 903 | TailArrow 904 | 0 905 | Width 906 | 11 907 | 908 | 909 | 910 | 911 | ID 912 | 60 913 | Rotation 914 | 120 915 | 916 | 917 | ID 918 | 55 919 | Rotation 920 | 120 921 | 922 | 923 | Class 924 | Group 925 | Graphics 926 | 927 | 928 | Class 929 | Group 930 | Graphics 931 | 932 | 933 | Class 934 | LineGraphic 935 | ID 936 | 66 937 | Points 938 | 939 | {84.045501999999999, 234.45264} 940 | {122.1593, 248.44579999999999} 941 | 942 | Style 943 | 944 | stroke 945 | 946 | Cap 947 | 0 948 | Color 949 | 950 | b 951 | 1 952 | g 953 | 1 954 | r 955 | 1 956 | 957 | HeadArrow 958 | 0 959 | Join 960 | 0 961 | Legacy 962 | 963 | TailArrow 964 | 0 965 | Width 966 | 11 967 | 968 | 969 | 970 | 971 | Class 972 | LineGraphic 973 | ID 974 | 67 975 | Points 976 | 977 | {115.22084, 288.44992000000002} 978 | {122.15931999999999, 248.44579999999999} 979 | 980 | Style 981 | 982 | stroke 983 | 984 | Cap 985 | 0 986 | Color 987 | 988 | b 989 | 1 990 | g 991 | 1 992 | r 993 | 1 994 | 995 | HeadArrow 996 | 0 997 | Join 998 | 0 999 | Legacy 1000 | 1001 | TailArrow 1002 | 0 1003 | Width 1004 | 11 1005 | 1006 | 1007 | 1008 | 1009 | Class 1010 | LineGraphic 1011 | ID 1012 | 68 1013 | Points 1014 | 1015 | {82.164291000000006, 272.15057000000002} 1016 | {257.63287000000003, 170.23012} 1017 | 1018 | Rotation 1019 | 120 1020 | Style 1021 | 1022 | stroke 1023 | 1024 | Cap 1025 | 0 1026 | Color 1027 | 1028 | b 1029 | 1 1030 | g 1031 | 1 1032 | r 1033 | 1 1034 | 1035 | HeadArrow 1036 | 0 1037 | Join 1038 | 0 1039 | Legacy 1040 | 1041 | TailArrow 1042 | 0 1043 | Width 1044 | 11 1045 | 1046 | 1047 | 1048 | 1049 | ID 1050 | 65 1051 | Rotation 1052 | 60 1053 | VFlip 1054 | YES 1055 | 1056 | 1057 | Class 1058 | Group 1059 | Graphics 1060 | 1061 | 1062 | Class 1063 | LineGraphic 1064 | ID 1065 | 70 1066 | Points 1067 | 1068 | {224.31058999999999, 153.47055} 1069 | {217.37212, 193.47466} 1070 | 1071 | Style 1072 | 1073 | stroke 1074 | 1075 | Cap 1076 | 0 1077 | Color 1078 | 1079 | b 1080 | 1 1081 | g 1082 | 1 1083 | r 1084 | 1 1085 | 1086 | HeadArrow 1087 | 0 1088 | Join 1089 | 0 1090 | Legacy 1091 | 1092 | TailArrow 1093 | 0 1094 | Width 1095 | 11 1096 | 1097 | 1098 | 1099 | 1100 | Class 1101 | LineGraphic 1102 | ID 1103 | 71 1104 | Points 1105 | 1106 | {255.48595, 207.46782999999999} 1107 | {217.37212, 193.47466} 1108 | 1109 | Style 1110 | 1111 | stroke 1112 | 1113 | Cap 1114 | 0 1115 | Color 1116 | 1117 | b 1118 | 1 1119 | g 1120 | 1 1121 | r 1122 | 1 1123 | 1124 | HeadArrow 1125 | 0 1126 | Join 1127 | 0 1128 | Legacy 1129 | 1130 | TailArrow 1131 | 0 1132 | Width 1133 | 11 1134 | 1135 | 1136 | 1137 | 1138 | Class 1139 | LineGraphic 1140 | ID 1141 | 72 1142 | Points 1143 | 1144 | {257.89861999999999, 170.69035} 1145 | {81.898574999999994, 271.69033999999999} 1146 | 1147 | Rotation 1148 | 120 1149 | Style 1150 | 1151 | stroke 1152 | 1153 | Cap 1154 | 0 1155 | Color 1156 | 1157 | b 1158 | 1 1159 | g 1160 | 1 1161 | r 1162 | 1 1163 | 1164 | HeadArrow 1165 | 0 1166 | Join 1167 | 0 1168 | Legacy 1169 | 1170 | TailArrow 1171 | 0 1172 | Width 1173 | 11 1174 | 1175 | 1176 | 1177 | 1178 | ID 1179 | 69 1180 | Rotation 1181 | 60 1182 | 1183 | 1184 | ID 1185 | 64 1186 | Rotation 1187 | 60 1188 | 1189 | 1190 | Class 1191 | Group 1192 | Graphics 1193 | 1194 | 1195 | Class 1196 | Group 1197 | Graphics 1198 | 1199 | 1200 | Class 1201 | LineGraphic 1202 | ID 1203 | 75 1204 | Points 1205 | 1206 | {138.59038000000001, 301.94232} 1207 | {169.76571999999999, 275.9314} 1208 | 1209 | Style 1210 | 1211 | stroke 1212 | 1213 | Cap 1214 | 0 1215 | Color 1216 | 1217 | b 1218 | 1 1219 | g 1220 | 1 1221 | r 1222 | 1 1223 | 1224 | HeadArrow 1225 | 0 1226 | Join 1227 | 0 1228 | Legacy 1229 | 1230 | TailArrow 1231 | 0 1232 | Width 1233 | 11 1234 | 1235 | 1236 | 1237 | 1238 | Class 1239 | LineGraphic 1240 | ID 1241 | 76 1242 | Points 1243 | 1244 | {200.94105999999999, 301.94232} 1245 | {169.76571999999999, 275.9314} 1246 | 1247 | Style 1248 | 1249 | stroke 1250 | 1251 | Cap 1252 | 0 1253 | Color 1254 | 1255 | b 1256 | 1 1257 | g 1258 | 1 1259 | r 1260 | 1 1261 | 1262 | HeadArrow 1263 | 0 1264 | Join 1265 | 0 1266 | Legacy 1267 | 1268 | TailArrow 1269 | 0 1270 | Width 1271 | 11 1272 | 1273 | 1274 | 1275 | 1276 | Class 1277 | LineGraphic 1278 | ID 1279 | 77 1280 | Points 1281 | 1282 | {170.29714999999999, 322.42047000000002} 1283 | {169.76571999999999, 119.5} 1284 | 1285 | Rotation 1286 | 120 1287 | Style 1288 | 1289 | stroke 1290 | 1291 | Cap 1292 | 0 1293 | Color 1294 | 1295 | b 1296 | 1 1297 | g 1298 | 1 1299 | r 1300 | 1 1301 | 1302 | HeadArrow 1303 | 0 1304 | Join 1305 | 0 1306 | Legacy 1307 | 1308 | TailArrow 1309 | 0 1310 | Width 1311 | 11 1312 | 1313 | 1314 | 1315 | 1316 | ID 1317 | 74 1318 | VFlip 1319 | YES 1320 | 1321 | 1322 | Class 1323 | Group 1324 | Graphics 1325 | 1326 | 1327 | Class 1328 | LineGraphic 1329 | ID 1330 | 79 1331 | Points 1332 | 1333 | {138.59038000000001, 139.97815} 1334 | {169.76571999999999, 165.98907} 1335 | 1336 | Style 1337 | 1338 | stroke 1339 | 1340 | Cap 1341 | 0 1342 | Color 1343 | 1344 | b 1345 | 1 1346 | g 1347 | 1 1348 | r 1349 | 1 1350 | 1351 | HeadArrow 1352 | 0 1353 | Join 1354 | 0 1355 | Legacy 1356 | 1357 | TailArrow 1358 | 0 1359 | Width 1360 | 11 1361 | 1362 | 1363 | 1364 | 1365 | Class 1366 | LineGraphic 1367 | ID 1368 | 80 1369 | Points 1370 | 1371 | {200.94105999999999, 139.97815} 1372 | {169.76571999999999, 165.98907} 1373 | 1374 | Style 1375 | 1376 | stroke 1377 | 1378 | Cap 1379 | 0 1380 | Color 1381 | 1382 | b 1383 | 1 1384 | g 1385 | 1 1386 | r 1387 | 1 1388 | 1389 | HeadArrow 1390 | 0 1391 | Join 1392 | 0 1393 | Legacy 1394 | 1395 | TailArrow 1396 | 0 1397 | Width 1398 | 11 1399 | 1400 | 1401 | 1402 | 1403 | Class 1404 | LineGraphic 1405 | ID 1406 | 81 1407 | Points 1408 | 1409 | {170.29714999999999, 119.5} 1410 | {169.76571999999999, 322.42047000000002} 1411 | 1412 | Rotation 1413 | 120 1414 | Style 1415 | 1416 | stroke 1417 | 1418 | Cap 1419 | 0 1420 | Color 1421 | 1422 | b 1423 | 1 1424 | g 1425 | 1 1426 | r 1427 | 1 1428 | 1429 | HeadArrow 1430 | 0 1431 | Join 1432 | 0 1433 | Legacy 1434 | 1435 | TailArrow 1436 | 0 1437 | Width 1438 | 11 1439 | 1440 | 1441 | 1442 | 1443 | ID 1444 | 78 1445 | 1446 | 1447 | ID 1448 | 73 1449 | 1450 | 1451 | ID 1452 | 54 1453 | 1454 | 1455 | Bounds 1456 | {{22, 22}, {475, 566}} 1457 | Class 1458 | ShapedGraphic 1459 | ID 1460 | 6 1461 | IsLocked 1462 | YES 1463 | Shape 1464 | Rectangle 1465 | Style 1466 | 1467 | fill 1468 | 1469 | Color 1470 | 1471 | b 1472 | 0.609524 1473 | g 1474 | 1 1475 | r 1476 | 0.804762 1477 | 1478 | 1479 | shadow 1480 | 1481 | Draws 1482 | NO 1483 | 1484 | 1485 | 1486 | 1487 | GridInfo 1488 | 1489 | HPages 1490 | 1 1491 | KeepToScale 1492 | 1493 | Layers 1494 | 1495 | 1496 | Lock 1497 | NO 1498 | Name 1499 | Layer 1 1500 | Print 1501 | YES 1502 | View 1503 | YES 1504 | 1505 | 1506 | LayoutInfo 1507 | 1508 | Animate 1509 | NO 1510 | circoMinDist 1511 | 18 1512 | circoSeparation 1513 | 0.0 1514 | layoutEngine 1515 | dot 1516 | neatoSeparation 1517 | 0.0 1518 | twopiSeparation 1519 | 0.0 1520 | 1521 | Orientation 1522 | 2 1523 | PrintOnePage 1524 | 1525 | RowAlign 1526 | 1 1527 | RowSpacing 1528 | 36 1529 | SheetTitle 1530 | Canvas 3 1531 | UniqueID 1532 | 3 1533 | VPages 1534 | 1 1535 | 1536 | 1537 | ActiveLayerIndex 1538 | 0 1539 | AutoAdjust 1540 | 1541 | BackgroundGraphic 1542 | 1543 | Bounds 1544 | {{0, 0}, {559, 783}} 1545 | Class 1546 | SolidGraphic 1547 | ID 1548 | 2 1549 | Style 1550 | 1551 | shadow 1552 | 1553 | Draws 1554 | NO 1555 | 1556 | stroke 1557 | 1558 | Draws 1559 | NO 1560 | 1561 | 1562 | 1563 | BaseZoom 1564 | 0 1565 | CanvasOrigin 1566 | {0, 0} 1567 | ColumnAlign 1568 | 1 1569 | ColumnSpacing 1570 | 36 1571 | DisplayScale 1572 | 1.000 cm = 1.000 cm 1573 | GraphicsList 1574 | 1575 | 1576 | Bounds 1577 | {{73, 218}, {99.000015000000005, 99.000015000000005}} 1578 | Class 1579 | ShapedGraphic 1580 | ID 1581 | 83 1582 | Shape 1583 | Circle 1584 | Style 1585 | 1586 | shadow 1587 | 1588 | Draws 1589 | NO 1590 | 1591 | stroke 1592 | 1593 | Draws 1594 | NO 1595 | 1596 | 1597 | 1598 | 1599 | Bounds 1600 | {{73.439635999999993, 74.560303000000005}, {94.120720000000006, 103.00004}} 1601 | Class 1602 | ShapedGraphic 1603 | ID 1604 | 82 1605 | Rotation 1606 | 270 1607 | Shape 1608 | HorizontalTriangle 1609 | Style 1610 | 1611 | shadow 1612 | 1613 | Draws 1614 | NO 1615 | 1616 | stroke 1617 | 1618 | Draws 1619 | NO 1620 | 1621 | 1622 | Text 1623 | 1624 | VerticalPad 1625 | 0 1626 | 1627 | 1628 | 1629 | Bounds 1630 | {{22, 22}, {475, 566}} 1631 | Class 1632 | ShapedGraphic 1633 | ID 1634 | 6 1635 | IsLocked 1636 | YES 1637 | Shape 1638 | Rectangle 1639 | Style 1640 | 1641 | fill 1642 | 1643 | Color 1644 | 1645 | b 1646 | 0.609524 1647 | g 1648 | 1 1649 | r 1650 | 0.804762 1651 | 1652 | 1653 | shadow 1654 | 1655 | Draws 1656 | NO 1657 | 1658 | 1659 | 1660 | 1661 | GridInfo 1662 | 1663 | HPages 1664 | 1 1665 | KeepToScale 1666 | 1667 | Layers 1668 | 1669 | 1670 | Lock 1671 | NO 1672 | Name 1673 | Layer 1 1674 | Print 1675 | YES 1676 | View 1677 | YES 1678 | 1679 | 1680 | LayoutInfo 1681 | 1682 | Animate 1683 | NO 1684 | circoMinDist 1685 | 18 1686 | circoSeparation 1687 | 0.0 1688 | layoutEngine 1689 | dot 1690 | neatoSeparation 1691 | 0.0 1692 | twopiSeparation 1693 | 0.0 1694 | 1695 | Orientation 1696 | 2 1697 | PrintOnePage 1698 | 1699 | RowAlign 1700 | 1 1701 | RowSpacing 1702 | 36 1703 | SheetTitle 1704 | Canvas 5 1705 | UniqueID 1706 | 5 1707 | VPages 1708 | 1 1709 | 1710 | 1711 | SmartAlignmentGuidesActive 1712 | YES 1713 | SmartDistanceGuidesActive 1714 | YES 1715 | UseEntirePage 1716 | 1717 | WindowInfo 1718 | 1719 | CurrentSheet 1720 | 2 1721 | ExpandedCanvases 1722 | 1723 | Frame 1724 | {{572, 5}, {693, 878}} 1725 | ListView 1726 | 1727 | OutlineWidth 1728 | 142 1729 | RightSidebar 1730 | 1731 | ShowRuler 1732 | 1733 | Sidebar 1734 | 1735 | SidebarWidth 1736 | 120 1737 | VisibleRegion 1738 | {{0, 0}, {544, 724}} 1739 | Zoom 1740 | 1 1741 | ZoomValues 1742 | 1743 | 1744 | Canvas 1 1745 | 1 1746 | 1 1747 | 1748 | 1749 | Canvas 2 1750 | 1 1751 | 1 1752 | 1753 | 1754 | Canvas 3 1755 | 1 1756 | 1 1757 | 1758 | 1759 | Canvas 4 1760 | 1 1761 | 1 1762 | 1763 | 1764 | Canvas 5 1765 | 1 1766 | 1 1767 | 1768 | 1769 | 1770 | 1771 | 1772 | -------------------------------------------------------------------------------- /Helper FIles/icon iOS6.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Helper FIles/icon iOS6.psd -------------------------------------------------------------------------------- /Helper FIles/icon iOS7.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lichtschlag/Dazzle/ad97fc72c1557643b7dcb8834a6bbf15e6867186/Helper FIles/icon iOS7.psd -------------------------------------------------------------------------------- /readme.markdown: -------------------------------------------------------------------------------- 1 | Dazzle 2 | ====== 3 | Created by Leonhard Lichtschlag (leonhard@lichtschlag.net) on 9/Feb/12. 4 | Copyright (c) 2012 Leonhard Lichtschlag. All rights reserved. 5 | 6 | --- 7 | 8 | Dazzle is a demo of some effects one can do with Core Animation in iOS 5 9 | with the CAEmitterCell and CAEmitterLayer classes: 10 | 11 | * The "info" tab shows a linear emitter with a shadow applied to all cells 12 | to create an emboss effect. 13 | * In the "hearts" tab the emitters are triggered by an animation to create 14 | the "burst" animation. 15 | * In the "fire" tab, additive overlaying of cell creates a somewhat realistic 16 | impression of fire. The source code here has been adapted from the 17 | corresponding Apple sample code for Mac. 18 | * In the fourth tab, I show how emitted cells can in turn again emit cells: 19 | the triangles sent away from the touch send two kinds of cells sideways 20 | and back to the touch location. The emitted cells start with their 21 | visual values set to those of their parents. 22 | * Emitters can also be invisible, but there seems to be a bug in 23 | CAEmitterLayer: setting the birthrate lower than 1.0 creates huge spawn rates 24 | even though it should be less. To still create the fireworks with it, the 25 | explosion can therefore only happen at most 1 sec after the rocket launches. 26 | 27 | Performance-wise, setting the flame height to maximum will really stress the 28 | iPhone4's graphics to its max, resulting at about ~30 fps. Likewise a constant 29 | triggering of new touches in the frouth tab will average at about 22 fps. 30 | 31 | 32 | Update: In iOS6 the behaviour of the birthrate property seems to have changed, a 33 | fireworks explosion is triggered at t= 0s. This is no longer the case in iOS7. 34 | 35 | Update: In iOS7 the behaviour of the birthrate property seems to have changed, it 36 | now acts as if the objects would have been spawned in the past... (rdar:14413481) 37 | 38 | --------------------------------------------------------------------------------