├── .gitignore ├── CoreGraphics+AnimationForSuperheroes.pdf ├── README.mdown └── src ├── CoreBirdy ├── CoreBirdy.xcodeproj │ └── project.pbxproj └── CoreBirdy │ ├── AngryBirdBackgroundView.h │ ├── AngryBirdBackgroundView.m │ ├── AngryBirdView.h │ ├── AngryBirdView.m │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── CoreBirdy-Info.plist │ ├── CoreBirdy-Prefix.pch │ ├── LICENSE │ ├── ViewController.h │ ├── ViewController.m │ ├── en.lproj │ ├── InfoPlist.strings │ ├── ViewController.xib │ └── ViewController~iPad.xib │ └── main.m ├── CoreGraphicsSeminar.xcworkspace └── contents.xcworkspacedata └── CoreTechniques ├── CoreTechniques.xcodeproj └── project.pbxproj └── CoreTechniques ├── AppDelegate.h ├── AppDelegate.m ├── CoreTechniques-Info.plist ├── CoreTechniques-Prefix.pch ├── DetailViewController.h ├── DetailViewController.m ├── LICENSE ├── MasterViewController.h ├── MasterViewController.m ├── TopicsDataSource.plist ├── demos ├── BezierCurveView.h ├── BezierCurveView.m ├── ClippingEOView.h ├── ClippingEOView.m ├── ClippingView.h ├── ClippingView.m ├── ColorFillView.h ├── ColorFillView.m ├── CoverFlowView.h ├── CoverFlowView.m ├── CoverFlowViewController.h ├── CoverFlowViewController.m ├── CoverFlowViewController~iPad.xib ├── CoverView.h ├── CoverView.m ├── CustomButton.h ├── CustomButton.m ├── CustomButtonView.h ├── CustomButtonView.m ├── GradientFillLinearView.h ├── GradientFillLinearView.m ├── GradientFillRadialView.h ├── GradientFillRadialView.m ├── ImageView.h ├── ImageView.m ├── PathsView.h ├── PathsView.m ├── TapAndMoveView.h ├── TapAndMoveView.m ├── TapAndMoveViewWithHitTest.h └── TapAndMoveViewWithHitTest.m ├── en.lproj ├── InfoPlist.strings └── MasterViewController.xib ├── main.m └── tombraider.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Mac OS X Finder and whatnot 2 | .DS_Store 3 | *.swp 4 | *~.nib 5 | 6 | # XCode (and ancestors) per-user config (very noisy, and not relevant) 7 | *.mode1 8 | *.mode1v3 9 | *.mode2v3 10 | *.perspective 11 | *.perspectivev3 12 | *.pbxuser 13 | 14 | # XCode 4 15 | xcuserdata 16 | 17 | # build products 18 | build/ 19 | 20 | # Other source repository archive directories (protects when importing) 21 | .hg 22 | .svn 23 | CVS 24 | 25 | # temporary script folders/files 26 | ThirdParty/boost/* 27 | 28 | # Eclipse Workspace 29 | .metadata 30 | 31 | # Maya temporary 32 | .mayaSwatches/ 33 | -------------------------------------------------------------------------------- /CoreGraphics+AnimationForSuperheroes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkluz/PKCoreTechniques/24b7b4da212aa95af7408df4102cb87164282ee1/CoreGraphics+AnimationForSuperheroes.pdf -------------------------------------------------------------------------------- /README.mdown: -------------------------------------------------------------------------------- 1 | # PKCoreTechniques 2 | ======= 3 | **Core Techniques** is the result of a presentation I held at the **Technical University of Munich** during the 'iOS Game Design Seminar 2012'. It serves as a hands-on introduction to the fundamental concepts of **CoreGraphics and CoreAnimation** on the iOS and OS X platforms. 4 | 5 | ## Structure 6 | ======= 7 | The projects structure is fairly straight-forward and there's two possible points of entry. You can either take a look at the *CoreGraphics+AnimationForSuperheroes.pdf* document and check out a brief introduction into the main concepts of CoreGraphics and CoreAnimation or you can jump right into the code by opening the 'CoreGraphicsSeminar.xcworkspace' in the 'src' folder. There's two projects in the workspace, that you're very welcome to both improve and learn from. 8 | 9 | ## CoreTechniques 10 | ======= 11 | 12 | [![](http://dl.dropbox.com/u/8960813/github/reference2app.png)](http://dl.dropbox.com/u/8960813/github/reference2app.png) 13 | **Core Techniques** is a collection of various examples on how the most common techniques are implemented and used. Those include: 14 | 15 | - Color Fill 16 | - Gradient Fill (Linear and Radial) 17 | - Simple Paths 18 | - Bezier Curves 19 | - Clipping (Standard and Even-Odd) 20 | - Creating custom-drawn Buttons 21 | - Simple Translations 22 | - Translations with Hit-Test Triggers 23 | - A very primitive 'CoverFlow' with 3D Transformations in CoreAnimation. 24 | 25 | ## CoreBirdy 26 | ======= 27 | [![](http://dl.dropbox.com/u/8960813/github/reference1app.png)](http://dl.dropbox.com/u/8960813/github/reference1app.png) 28 | CoreBirdy was primarily made to test the performance of slightly more complex drawing on the iOS devices and the results were fairly interesting. While in fact the drawing performance in Quartz _is_ slower than using an image in this case, it's still _very_ good (and resolution independent!). (Note: The Bezier curves are of fairly high degree! >20). 29 | 30 | Please note that **CoreBirdy** is intended as a proof-of-concept and should be regarded as such. 31 | 32 | License 33 | ======= 34 | Copyright (c) 2011, Philip Kluz (Philip.Kluz@zuui.org) 35 | All rights reserved. 36 | 37 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 38 | 39 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 40 | 41 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 42 | 43 | * Neither the name of Philip Kluz, 'zuui.org' nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 44 | 45 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PHILIP KLUZ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 46 | 47 | Contact 48 | ======= 49 | 50 | If for whatever reason you feel the need to get in touch with me, feel free to message me at: Philip.Kluz@zuui.org or follow me on [Twitter](http://twitter.com/pkluz "Twitter"). 51 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5E1C82711520D88A00ABB2BD /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 5E1C82701520D88A00ABB2BD /* LICENSE */; }; 11 | 5EFC3B1B1518C79600F9579F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EFC3B1A1518C79600F9579F /* UIKit.framework */; }; 12 | 5EFC3B1D1518C79600F9579F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EFC3B1C1518C79600F9579F /* Foundation.framework */; }; 13 | 5EFC3B1F1518C79600F9579F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EFC3B1E1518C79600F9579F /* CoreGraphics.framework */; }; 14 | 5EFC3B251518C79600F9579F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5EFC3B231518C79600F9579F /* InfoPlist.strings */; }; 15 | 5EFC3B271518C79600F9579F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC3B261518C79600F9579F /* main.m */; }; 16 | 5EFC3B2B1518C79600F9579F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC3B2A1518C79600F9579F /* AppDelegate.m */; }; 17 | 5EFC3B2E1518C79600F9579F /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC3B2D1518C79600F9579F /* ViewController.m */; }; 18 | 5EFC3B311518C79600F9579F /* ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5EFC3B2F1518C79600F9579F /* ViewController.xib */; }; 19 | 5EFC3B341518C79600F9579F /* ViewController~iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5EFC3B321518C79600F9579F /* ViewController~iPad.xib */; }; 20 | 5EFC3B3C1518C7E500F9579F /* AngryBirdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC3B3B1518C7E500F9579F /* AngryBirdView.m */; }; 21 | 5EFC3B3F1518C9B400F9579F /* AngryBirdBackgroundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC3B3E1518C9B400F9579F /* AngryBirdBackgroundView.m */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXFileReference section */ 25 | 5E1C82701520D88A00ABB2BD /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 26 | 5EFC3B161518C79600F9579F /* CoreBirdy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CoreBirdy.app; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | 5EFC3B1A1518C79600F9579F /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 28 | 5EFC3B1C1518C79600F9579F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 29 | 5EFC3B1E1518C79600F9579F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 30 | 5EFC3B221518C79600F9579F /* CoreBirdy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CoreBirdy-Info.plist"; sourceTree = ""; }; 31 | 5EFC3B241518C79600F9579F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 32 | 5EFC3B261518C79600F9579F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 33 | 5EFC3B281518C79600F9579F /* CoreBirdy-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CoreBirdy-Prefix.pch"; sourceTree = ""; }; 34 | 5EFC3B291518C79600F9579F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 35 | 5EFC3B2A1518C79600F9579F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 36 | 5EFC3B2C1518C79600F9579F /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 37 | 5EFC3B2D1518C79600F9579F /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 38 | 5EFC3B301518C79600F9579F /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/ViewController.xib; sourceTree = ""; }; 39 | 5EFC3B331518C79600F9579F /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = "en.lproj/ViewController~iPad.xib"; sourceTree = ""; }; 40 | 5EFC3B3A1518C7E500F9579F /* AngryBirdView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AngryBirdView.h; sourceTree = ""; }; 41 | 5EFC3B3B1518C7E500F9579F /* AngryBirdView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AngryBirdView.m; sourceTree = ""; }; 42 | 5EFC3B3D1518C9B400F9579F /* AngryBirdBackgroundView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AngryBirdBackgroundView.h; sourceTree = ""; }; 43 | 5EFC3B3E1518C9B400F9579F /* AngryBirdBackgroundView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AngryBirdBackgroundView.m; sourceTree = ""; }; 44 | /* End PBXFileReference section */ 45 | 46 | /* Begin PBXFrameworksBuildPhase section */ 47 | 5EFC3B131518C79600F9579F /* Frameworks */ = { 48 | isa = PBXFrameworksBuildPhase; 49 | buildActionMask = 2147483647; 50 | files = ( 51 | 5EFC3B1B1518C79600F9579F /* UIKit.framework in Frameworks */, 52 | 5EFC3B1D1518C79600F9579F /* Foundation.framework in Frameworks */, 53 | 5EFC3B1F1518C79600F9579F /* CoreGraphics.framework in Frameworks */, 54 | ); 55 | runOnlyForDeploymentPostprocessing = 0; 56 | }; 57 | /* End PBXFrameworksBuildPhase section */ 58 | 59 | /* Begin PBXGroup section */ 60 | 5E1C828015216ABB00ABB2BD /* Angry Bird */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | 5EFC3B3A1518C7E500F9579F /* AngryBirdView.h */, 64 | 5EFC3B3B1518C7E500F9579F /* AngryBirdView.m */, 65 | 5EFC3B3D1518C9B400F9579F /* AngryBirdBackgroundView.h */, 66 | 5EFC3B3E1518C9B400F9579F /* AngryBirdBackgroundView.m */, 67 | ); 68 | name = "Angry Bird"; 69 | sourceTree = ""; 70 | }; 71 | 5E1C829915216D4D00ABB2BD /* Application Logic */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 5EFC3B2C1518C79600F9579F /* ViewController.h */, 75 | 5EFC3B2D1518C79600F9579F /* ViewController.m */, 76 | 5EFC3B2F1518C79600F9579F /* ViewController.xib */, 77 | 5EFC3B321518C79600F9579F /* ViewController~iPad.xib */, 78 | ); 79 | name = "Application Logic"; 80 | sourceTree = ""; 81 | }; 82 | 5EFC3B0B1518C79600F9579F = { 83 | isa = PBXGroup; 84 | children = ( 85 | 5EFC3B201518C79600F9579F /* CoreBirdy */, 86 | 5EFC3B191518C79600F9579F /* Frameworks */, 87 | 5EFC3B171518C79600F9579F /* Products */, 88 | ); 89 | sourceTree = ""; 90 | }; 91 | 5EFC3B171518C79600F9579F /* Products */ = { 92 | isa = PBXGroup; 93 | children = ( 94 | 5EFC3B161518C79600F9579F /* CoreBirdy.app */, 95 | ); 96 | name = Products; 97 | sourceTree = ""; 98 | }; 99 | 5EFC3B191518C79600F9579F /* Frameworks */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | 5EFC3B1A1518C79600F9579F /* UIKit.framework */, 103 | 5EFC3B1C1518C79600F9579F /* Foundation.framework */, 104 | 5EFC3B1E1518C79600F9579F /* CoreGraphics.framework */, 105 | ); 106 | name = Frameworks; 107 | sourceTree = ""; 108 | }; 109 | 5EFC3B201518C79600F9579F /* CoreBirdy */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 5E1C82701520D88A00ABB2BD /* LICENSE */, 113 | 5EFC3B291518C79600F9579F /* AppDelegate.h */, 114 | 5EFC3B2A1518C79600F9579F /* AppDelegate.m */, 115 | 5E1C828015216ABB00ABB2BD /* Angry Bird */, 116 | 5E1C829915216D4D00ABB2BD /* Application Logic */, 117 | 5EFC3B211518C79600F9579F /* Supporting Files */, 118 | ); 119 | path = CoreBirdy; 120 | sourceTree = ""; 121 | }; 122 | 5EFC3B211518C79600F9579F /* Supporting Files */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | 5EFC3B221518C79600F9579F /* CoreBirdy-Info.plist */, 126 | 5EFC3B231518C79600F9579F /* InfoPlist.strings */, 127 | 5EFC3B261518C79600F9579F /* main.m */, 128 | 5EFC3B281518C79600F9579F /* CoreBirdy-Prefix.pch */, 129 | ); 130 | name = "Supporting Files"; 131 | sourceTree = ""; 132 | }; 133 | /* End PBXGroup section */ 134 | 135 | /* Begin PBXNativeTarget section */ 136 | 5EFC3B151518C79600F9579F /* CoreBirdy */ = { 137 | isa = PBXNativeTarget; 138 | buildConfigurationList = 5EFC3B371518C79600F9579F /* Build configuration list for PBXNativeTarget "CoreBirdy" */; 139 | buildPhases = ( 140 | 5EFC3B121518C79600F9579F /* Sources */, 141 | 5EFC3B131518C79600F9579F /* Frameworks */, 142 | 5EFC3B141518C79600F9579F /* Resources */, 143 | ); 144 | buildRules = ( 145 | ); 146 | dependencies = ( 147 | ); 148 | name = CoreBirdy; 149 | productName = CoreBirdy; 150 | productReference = 5EFC3B161518C79600F9579F /* CoreBirdy.app */; 151 | productType = "com.apple.product-type.application"; 152 | }; 153 | /* End PBXNativeTarget section */ 154 | 155 | /* Begin PBXProject section */ 156 | 5EFC3B0D1518C79600F9579F /* Project object */ = { 157 | isa = PBXProject; 158 | attributes = { 159 | LastUpgradeCheck = 0430; 160 | }; 161 | buildConfigurationList = 5EFC3B101518C79600F9579F /* Build configuration list for PBXProject "CoreBirdy" */; 162 | compatibilityVersion = "Xcode 3.2"; 163 | developmentRegion = English; 164 | hasScannedForEncodings = 0; 165 | knownRegions = ( 166 | en, 167 | ); 168 | mainGroup = 5EFC3B0B1518C79600F9579F; 169 | productRefGroup = 5EFC3B171518C79600F9579F /* Products */; 170 | projectDirPath = ""; 171 | projectRoot = ""; 172 | targets = ( 173 | 5EFC3B151518C79600F9579F /* CoreBirdy */, 174 | ); 175 | }; 176 | /* End PBXProject section */ 177 | 178 | /* Begin PBXResourcesBuildPhase section */ 179 | 5EFC3B141518C79600F9579F /* Resources */ = { 180 | isa = PBXResourcesBuildPhase; 181 | buildActionMask = 2147483647; 182 | files = ( 183 | 5EFC3B251518C79600F9579F /* InfoPlist.strings in Resources */, 184 | 5EFC3B311518C79600F9579F /* ViewController.xib in Resources */, 185 | 5EFC3B341518C79600F9579F /* ViewController~iPad.xib in Resources */, 186 | 5E1C82711520D88A00ABB2BD /* LICENSE in Resources */, 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | /* End PBXResourcesBuildPhase section */ 191 | 192 | /* Begin PBXSourcesBuildPhase section */ 193 | 5EFC3B121518C79600F9579F /* Sources */ = { 194 | isa = PBXSourcesBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | 5EFC3B271518C79600F9579F /* main.m in Sources */, 198 | 5EFC3B2B1518C79600F9579F /* AppDelegate.m in Sources */, 199 | 5EFC3B2E1518C79600F9579F /* ViewController.m in Sources */, 200 | 5EFC3B3C1518C7E500F9579F /* AngryBirdView.m in Sources */, 201 | 5EFC3B3F1518C9B400F9579F /* AngryBirdBackgroundView.m in Sources */, 202 | ); 203 | runOnlyForDeploymentPostprocessing = 0; 204 | }; 205 | /* End PBXSourcesBuildPhase section */ 206 | 207 | /* Begin PBXVariantGroup section */ 208 | 5EFC3B231518C79600F9579F /* InfoPlist.strings */ = { 209 | isa = PBXVariantGroup; 210 | children = ( 211 | 5EFC3B241518C79600F9579F /* en */, 212 | ); 213 | name = InfoPlist.strings; 214 | sourceTree = ""; 215 | }; 216 | 5EFC3B2F1518C79600F9579F /* ViewController.xib */ = { 217 | isa = PBXVariantGroup; 218 | children = ( 219 | 5EFC3B301518C79600F9579F /* en */, 220 | ); 221 | name = ViewController.xib; 222 | sourceTree = ""; 223 | }; 224 | 5EFC3B321518C79600F9579F /* ViewController~iPad.xib */ = { 225 | isa = PBXVariantGroup; 226 | children = ( 227 | 5EFC3B331518C79600F9579F /* en */, 228 | ); 229 | name = "ViewController~iPad.xib"; 230 | sourceTree = ""; 231 | }; 232 | /* End PBXVariantGroup section */ 233 | 234 | /* Begin XCBuildConfiguration section */ 235 | 5EFC3B351518C79600F9579F /* Debug */ = { 236 | isa = XCBuildConfiguration; 237 | buildSettings = { 238 | ALWAYS_SEARCH_USER_PATHS = NO; 239 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 240 | CLANG_ENABLE_OBJC_ARC = YES; 241 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 242 | COPY_PHASE_STRIP = NO; 243 | GCC_C_LANGUAGE_STANDARD = gnu99; 244 | GCC_DYNAMIC_NO_PIC = NO; 245 | GCC_OPTIMIZATION_LEVEL = 0; 246 | GCC_PREPROCESSOR_DEFINITIONS = ( 247 | "DEBUG=1", 248 | "$(inherited)", 249 | ); 250 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 251 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 252 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 253 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 254 | GCC_WARN_UNUSED_VARIABLE = YES; 255 | IPHONEOS_DEPLOYMENT_TARGET = 5.1; 256 | SDKROOT = iphoneos; 257 | TARGETED_DEVICE_FAMILY = "1,2"; 258 | }; 259 | name = Debug; 260 | }; 261 | 5EFC3B361518C79600F9579F /* Release */ = { 262 | isa = XCBuildConfiguration; 263 | buildSettings = { 264 | ALWAYS_SEARCH_USER_PATHS = NO; 265 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 266 | CLANG_ENABLE_OBJC_ARC = YES; 267 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 268 | COPY_PHASE_STRIP = YES; 269 | GCC_C_LANGUAGE_STANDARD = gnu99; 270 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 271 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 273 | GCC_WARN_UNUSED_VARIABLE = YES; 274 | IPHONEOS_DEPLOYMENT_TARGET = 5.1; 275 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 276 | SDKROOT = iphoneos; 277 | TARGETED_DEVICE_FAMILY = "1,2"; 278 | VALIDATE_PRODUCT = YES; 279 | }; 280 | name = Release; 281 | }; 282 | 5EFC3B381518C79600F9579F /* Debug */ = { 283 | isa = XCBuildConfiguration; 284 | buildSettings = { 285 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 286 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 287 | GCC_PREFIX_HEADER = "CoreBirdy/CoreBirdy-Prefix.pch"; 288 | INFOPLIST_FILE = "CoreBirdy/CoreBirdy-Info.plist"; 289 | PRODUCT_NAME = "$(TARGET_NAME)"; 290 | "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; 291 | WRAPPER_EXTENSION = app; 292 | }; 293 | name = Debug; 294 | }; 295 | 5EFC3B391518C79600F9579F /* Release */ = { 296 | isa = XCBuildConfiguration; 297 | buildSettings = { 298 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 299 | GCC_PREFIX_HEADER = "CoreBirdy/CoreBirdy-Prefix.pch"; 300 | INFOPLIST_FILE = "CoreBirdy/CoreBirdy-Info.plist"; 301 | PRODUCT_NAME = "$(TARGET_NAME)"; 302 | WRAPPER_EXTENSION = app; 303 | }; 304 | name = Release; 305 | }; 306 | /* End XCBuildConfiguration section */ 307 | 308 | /* Begin XCConfigurationList section */ 309 | 5EFC3B101518C79600F9579F /* Build configuration list for PBXProject "CoreBirdy" */ = { 310 | isa = XCConfigurationList; 311 | buildConfigurations = ( 312 | 5EFC3B351518C79600F9579F /* Debug */, 313 | 5EFC3B361518C79600F9579F /* Release */, 314 | ); 315 | defaultConfigurationIsVisible = 0; 316 | defaultConfigurationName = Release; 317 | }; 318 | 5EFC3B371518C79600F9579F /* Build configuration list for PBXNativeTarget "CoreBirdy" */ = { 319 | isa = XCConfigurationList; 320 | buildConfigurations = ( 321 | 5EFC3B381518C79600F9579F /* Debug */, 322 | 5EFC3B391518C79600F9579F /* Release */, 323 | ); 324 | defaultConfigurationIsVisible = 0; 325 | defaultConfigurationName = Release; 326 | }; 327 | /* End XCConfigurationList section */ 328 | }; 329 | rootObject = 5EFC3B0D1518C79600F9579F /* Project object */; 330 | } 331 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/AngryBirdBackgroundView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface AngryBirdBackgroundView : UIView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/AngryBirdBackgroundView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import "AngryBirdBackgroundView.h" 10 | 11 | @implementation AngryBirdBackgroundView 12 | 13 | #pragma mark - Drawing 14 | 15 | - (void)drawRect:(CGRect)rect 16 | { 17 | CGFloat scalingFactorX = CGRectGetWidth(rect)/1024.0f; 18 | CGFloat scalingFactorY = CGRectGetHeight(rect)/768.0f; 19 | 20 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 21 | CGContextRef context = UIGraphicsGetCurrentContext(); 22 | 23 | // Colors 24 | UIColor *r15g121b159 = [UIColor colorWithRed:0.06f green:0.47f blue:0.62f alpha:1.0f]; 25 | UIColor *r128g236b251 = [UIColor colorWithRed:0.5f green:0.93f blue:0.98f alpha:1.0f]; 26 | UIColor *rgb0alpha10 = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.1f]; 27 | UIColor *rgb255 = [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f]; 28 | UIColor *rgb240 = [UIColor colorWithRed:0.94f green:0.94f blue:0.94f alpha:1.0f]; 29 | 30 | // Gradients 31 | NSArray *skyBackgroundColors = [NSArray arrayWithObjects: 32 | (id)r15g121b159.CGColor, 33 | (id)r128g236b251.CGColor, nil]; 34 | CGFloat skyBackgroundLocations[] = {0, 1}; 35 | CGGradientRef skyBackground = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)skyBackgroundColors, skyBackgroundLocations); 36 | 37 | // Background 38 | UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(scalingFactorX*0, scalingFactorX*0, scalingFactorX*1024, scalingFactorY*768)]; 39 | CGContextSaveGState(context); 40 | [rectanglePath addClip]; 41 | CGContextDrawLinearGradient(context, skyBackground, CGPointMake(scalingFactorX*512, -scalingFactorX*0), CGPointMake(scalingFactorX*512, scalingFactorY*768), scalingFactorX*0); 42 | CGContextRestoreGState(context); 43 | 44 | // Sunbeams Drawing 45 | UIBezierPath *sunbeamsPath = [UIBezierPath bezierPath]; 46 | [sunbeamsPath moveToPoint: CGPointMake(scalingFactorX*836.0f, scalingFactorY*0.0f)]; 47 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*615.0f, scalingFactorY*513.0f)]; 48 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*625.0f, scalingFactorY*517.0f)]; 49 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*1024.0f, scalingFactorY*4.0f)]; 50 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*1024.0f, scalingFactorY*209.0f)]; 51 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*694.0f, scalingFactorY*558.0f)]; 52 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*700.0f, scalingFactorY*564.0f)]; 53 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*702.0f, scalingFactorY*565.0f)]; 54 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*1024.0f, scalingFactorY*359.0f)]; 55 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*1024.0f, scalingFactorY*541.0f)]; 56 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*758.0f, scalingFactorY*639.0f)]; 57 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*765.0f, scalingFactorY*653.0f)]; 58 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*1024.0f, scalingFactorY*627.0f)]; 59 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*1024.0f, scalingFactorY*768.0f)]; 60 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*0.0f, scalingFactorY*768.0f)]; 61 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*0.0f, scalingFactorY*627.0f)]; 62 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*260.0f, scalingFactorY*651.0f)]; 63 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*268.0f, scalingFactorY*634.0f)]; 64 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*0.0f, scalingFactorY*541.0f)]; 65 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*0.0f, scalingFactorY*359.0f)]; 66 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*322.0f, scalingFactorY*565.0f)]; 67 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*322.0f, scalingFactorY*565.0f)]; 68 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*338.0f, scalingFactorY*552.0f)]; 69 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*0.0f, scalingFactorY*157.0f)]; 70 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*0.0f, scalingFactorY*0.0f)]; 71 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*106.0f, scalingFactorY*0.0f)]; 72 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*414.0f, scalingFactorY*512.0f)]; 73 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*430.0f, scalingFactorY*507.0f)]; 74 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*319.0f, scalingFactorY*0.0f)]; 75 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*524.0f, scalingFactorY*0.0f)]; 76 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*524.0f, scalingFactorY*496.0f)]; 77 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*537.0f, scalingFactorY*496.0f)]; 78 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*679.0f, scalingFactorY*0.0f)]; 79 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*836.0f, scalingFactorY*0.0f)]; 80 | [sunbeamsPath addLineToPoint: CGPointMake(scalingFactorX*836.0f, scalingFactorY*0.0f)]; 81 | [sunbeamsPath closePath]; 82 | [rgb0alpha10 setFill]; 83 | [sunbeamsPath fill]; 84 | 85 | // Right Clouds Drawing 86 | UIBezierPath* rightCloudsPath = [UIBezierPath bezierPath]; 87 | [rightCloudsPath moveToPoint: CGPointMake(scalingFactorX*1066.7, scalingFactorY*scalingFactorX*645.58)]; 88 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*1066.7, scalingFactorY*scalingFactorX*689.42) controlPoint1: CGPointMake(scalingFactorX*1083.1, scalingFactorY*scalingFactorX*657.69) controlPoint2: CGPointMake(scalingFactorX*1083.1, scalingFactorY*scalingFactorX*677.31)]; 89 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*1027, scalingFactorY*scalingFactorX*697.61) controlPoint1: CGPointMake(scalingFactorX*1055.93, scalingFactorY*scalingFactorX*697.37) controlPoint2: CGPointMake(scalingFactorX*1040.78, scalingFactorY*scalingFactorX*700.1)]; 90 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*1025.07, scalingFactorY*scalingFactorX*707.02) controlPoint1: CGPointMake(scalingFactorX*1026.98, scalingFactorY*scalingFactorX*700.8) controlPoint2: CGPointMake(scalingFactorX*1026.34, scalingFactorY*scalingFactorX*703.98)]; 91 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*1044.5, scalingFactorY*scalingFactorX*718.19) controlPoint1: CGPointMake(scalingFactorX*1032.1, scalingFactorY*scalingFactorX*709.73) controlPoint2: CGPointMake(scalingFactorX*1038.68, scalingFactorY*scalingFactorX*713.46)]; 92 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*1044.5, scalingFactorY*scalingFactorX*798.81) controlPoint1: CGPointMake(scalingFactorX*1071.83, scalingFactorY*scalingFactorX*740.45) controlPoint2: CGPointMake(scalingFactorX*1071.83, scalingFactorY*scalingFactorX*776.55)]; 93 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*945.5, scalingFactorY*scalingFactorX*798.81) controlPoint1: CGPointMake(scalingFactorX*1017.16, scalingFactorY*scalingFactorX*821.06) controlPoint2: CGPointMake(scalingFactorX*972.84, scalingFactorY*scalingFactorX*821.06)]; 94 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*930.19, scalingFactorY*scalingFactorX*780.08) controlPoint1: CGPointMake(scalingFactorX*938.71, scalingFactorY*scalingFactorX*793.28) controlPoint2: CGPointMake(scalingFactorX*933.61, scalingFactorY*scalingFactorX*786.89)]; 95 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*904.2, scalingFactorY*scalingFactorX*776.8) controlPoint1: CGPointMake(scalingFactorX*921.39, scalingFactorY*scalingFactorX*781.19) controlPoint2: CGPointMake(scalingFactorX*912.14, scalingFactorY*scalingFactorX*780.09)]; 96 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*898.63, scalingFactorY*scalingFactorX*782.88) controlPoint1: CGPointMake(scalingFactorX*902.76, scalingFactorY*scalingFactorX*778.99) controlPoint2: CGPointMake(scalingFactorX*900.9, scalingFactorY*scalingFactorX*781.04)]; 97 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*853.37, scalingFactorY*scalingFactorX*782.88) controlPoint1: CGPointMake(scalingFactorX*886.13, scalingFactorY*scalingFactorX*793.04) controlPoint2: CGPointMake(scalingFactorX*865.87, scalingFactorY*scalingFactorX*793.04)]; 98 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*853.37, scalingFactorY*scalingFactorX*746.12) controlPoint1: CGPointMake(scalingFactorX*840.88, scalingFactorY*scalingFactorX*772.73) controlPoint2: CGPointMake(scalingFactorX*840.88, scalingFactorY*scalingFactorX*756.27)]; 99 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*889.02, scalingFactorY*scalingFactorX*740.74) controlPoint1: CGPointMake(scalingFactorX*863.01, scalingFactorY*scalingFactorX*738.28) controlPoint2: CGPointMake(scalingFactorX*877.27, scalingFactorY*scalingFactorX*736.49)]; 100 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*896.28, scalingFactorY*scalingFactorX*733.55) controlPoint1: CGPointMake(scalingFactorX*890.83, scalingFactorY*scalingFactorX*738.15) controlPoint2: CGPointMake(scalingFactorX*893.25, scalingFactorY*scalingFactorX*735.72)]; 101 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*936.55, scalingFactorY*scalingFactorX*727.12) controlPoint1: CGPointMake(scalingFactorX*907.17, scalingFactorY*scalingFactorX*725.78) controlPoint2: CGPointMake(scalingFactorX*922.95, scalingFactorY*scalingFactorX*723.63)]; 102 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*945.5, scalingFactorY*scalingFactorX*718.19) controlPoint1: CGPointMake(scalingFactorX*939.1, scalingFactorY*scalingFactorX*723.97) controlPoint2: CGPointMake(scalingFactorX*942.09, scalingFactorY*scalingFactorX*720.97)]; 103 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*964.07, scalingFactorY*scalingFactorX*707.35) controlPoint1: CGPointMake(scalingFactorX*951.08, scalingFactorY*scalingFactorX*713.65) controlPoint2: CGPointMake(scalingFactorX*957.37, scalingFactorY*scalingFactorX*710.04)]; 104 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*971.52, scalingFactorY*scalingFactorX*677.7) controlPoint1: CGPointMake(scalingFactorX*959.73, scalingFactorY*scalingFactorX*697.38) controlPoint2: CGPointMake(scalingFactorX*962.21, scalingFactorY*scalingFactorX*685.72)]; 105 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*995.09, scalingFactorY*scalingFactorX*669.5) controlPoint1: CGPointMake(scalingFactorX*978.02, scalingFactorY*scalingFactorX*672.1) controlPoint2: CGPointMake(scalingFactorX*986.58, scalingFactorY*scalingFactorX*669.37)]; 106 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*1007.3, scalingFactorY*scalingFactorX*645.58) controlPoint1: CGPointMake(scalingFactorX*994.34, scalingFactorY*scalingFactorX*660.92) controlPoint2: CGPointMake(scalingFactorX*998.41, scalingFactorY*scalingFactorX*652.14)]; 107 | [rightCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*1066.7, scalingFactorY*scalingFactorX*645.58) controlPoint1: CGPointMake(scalingFactorX*1023.7, scalingFactorY*scalingFactorX*633.47) controlPoint2: CGPointMake(scalingFactorX*1050.3, scalingFactorY*scalingFactorX*633.47)]; 108 | [rightCloudsPath closePath]; 109 | [rgb255 setFill]; 110 | [rightCloudsPath fill]; 111 | 112 | // Left Clouds Drawing 113 | UIBezierPath* leftCloudsPath = [UIBezierPath bezierPath]; 114 | [leftCloudsPath moveToPoint: CGPointMake(scalingFactorX*15.95, scalingFactorY*scalingFactorX*650.05)]; 115 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*22.56, scalingFactorY*scalingFactorX*678.3) controlPoint1: CGPointMake(scalingFactorX*23.59, scalingFactorY*scalingFactorX*657.7) controlPoint2: CGPointMake(scalingFactorX*25.79, scalingFactorY*scalingFactorX*668.71)]; 116 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*36.48, scalingFactorY*scalingFactorX*686.67) controlPoint1: CGPointMake(scalingFactorX*27.65, scalingFactorY*scalingFactorX*679.8) controlPoint2: CGPointMake(scalingFactorX*32.46, scalingFactorY*scalingFactorX*682.59)]; 117 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*45.04, scalingFactorY*scalingFactorX*702.01) controlPoint1: CGPointMake(scalingFactorX*40.81, scalingFactorY*scalingFactorX*691.06) controlPoint2: CGPointMake(scalingFactorX*43.66, scalingFactorY*scalingFactorX*696.39)]; 118 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*80.65, scalingFactorY*scalingFactorX*714.16) controlPoint1: CGPointMake(scalingFactorX*57.9, scalingFactorY*scalingFactorX*701.8) controlPoint2: CGPointMake(scalingFactorX*70.84, scalingFactorY*scalingFactorX*705.84)]; 119 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*90.52, scalingFactorY*scalingFactorX*726.14) controlPoint1: CGPointMake(scalingFactorX*84.87, scalingFactorY*scalingFactorX*717.73) controlPoint2: CGPointMake(scalingFactorX*88.16, scalingFactorY*scalingFactorX*721.8)]; 120 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*186.18, scalingFactorY*scalingFactorX*730.42) controlPoint1: CGPointMake(scalingFactorX*119.6, scalingFactorY*scalingFactorX*715.36) controlPoint2: CGPointMake(scalingFactorX*160.13, scalingFactorY*scalingFactorX*716.79)]; 121 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*204.47, scalingFactorY*scalingFactorX*746.12) controlPoint1: CGPointMake(scalingFactorX*194.88, scalingFactorY*scalingFactorX*734.98) controlPoint2: CGPointMake(scalingFactorX*200.98, scalingFactorY*scalingFactorX*740.38)]; 122 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*241.07, scalingFactorY*scalingFactorX*750.03) controlPoint1: CGPointMake(scalingFactorX*216.1, scalingFactorY*scalingFactorX*740.92) controlPoint2: CGPointMake(scalingFactorX*231.15, scalingFactorY*scalingFactorX*742.23)]; 123 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*241.07, scalingFactorY*scalingFactorX*783.97) controlPoint1: CGPointMake(scalingFactorX*252.98, scalingFactorY*scalingFactorX*759.4) controlPoint2: CGPointMake(scalingFactorX*252.98, scalingFactorY*scalingFactorX*774.6)]; 124 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*197.93, scalingFactorY*scalingFactorX*783.97) controlPoint1: CGPointMake(scalingFactorX*229.16, scalingFactorY*scalingFactorX*793.34) controlPoint2: CGPointMake(scalingFactorX*209.84, scalingFactorY*scalingFactorX*793.34)]; 125 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*194.31, scalingFactorY*scalingFactorX*780.54) controlPoint1: CGPointMake(scalingFactorX*196.57, scalingFactorY*scalingFactorX*782.9) controlPoint2: CGPointMake(scalingFactorX*195.36, scalingFactorY*scalingFactorX*781.75)]; 126 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*186.18, scalingFactorY*scalingFactorX*785.58) controlPoint1: CGPointMake(scalingFactorX*191.92, scalingFactorY*scalingFactorX*782.3) controlPoint2: CGPointMake(scalingFactorX*189.21, scalingFactorY*scalingFactorX*783.99)]; 127 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*80.82, scalingFactorY*scalingFactorX*785.58) controlPoint1: CGPointMake(scalingFactorX*157.09, scalingFactorY*scalingFactorX*800.81) controlPoint2: CGPointMake(scalingFactorX*109.91, scalingFactorY*scalingFactorX*800.81)]; 128 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*70.97, scalingFactorY*scalingFactorX*779.22) controlPoint1: CGPointMake(scalingFactorX*77.05, scalingFactorY*scalingFactorX*783.6) controlPoint2: CGPointMake(scalingFactorX*73.77, scalingFactorY*scalingFactorX*781.47)]; 129 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*11.35, scalingFactorY*scalingFactorX*772.84) controlPoint1: CGPointMake(scalingFactorX*52.17, scalingFactorY*scalingFactorX*788.66) controlPoint2: CGPointMake(scalingFactorX*27.52, scalingFactorY*scalingFactorX*786.54)]; 130 | [leftCloudsPath addCurveToPoint: CGPointMake(-scalingFactorX*2.66, scalingFactorY*scalingFactorX*738.64) controlPoint1: CGPointMake(scalingFactorX*0.32, scalingFactorY*scalingFactorX*763.5) controlPoint2: CGPointMake(-scalingFactorX*4.35, scalingFactorY*scalingFactorX*750.81)]; 131 | [leftCloudsPath addCurveToPoint: CGPointMake(-scalingFactorX*9.48, scalingFactorY*scalingFactorX*733.33) controlPoint1: CGPointMake(-scalingFactorX*5.1, scalingFactorY*scalingFactorX*737.22) controlPoint2: CGPointMake(-scalingFactorX*7.4, scalingFactorY*scalingFactorX*735.45)]; 132 | [leftCloudsPath addCurveToPoint: CGPointMake(-scalingFactorX*15.16, scalingFactorY*scalingFactorX*694.41) controlPoint1: CGPointMake(-scalingFactorX*19.86, scalingFactorY*scalingFactorX*722.8) controlPoint2: CGPointMake(-scalingFactorX*21.75, scalingFactorY*scalingFactorX*706.9)]; 133 | [leftCloudsPath addCurveToPoint: CGPointMake(-scalingFactorX*22.95, scalingFactorY*scalingFactorX*688.95) controlPoint1: CGPointMake(-scalingFactorX*17.97, scalingFactorY*scalingFactorX*693.1) controlPoint2: CGPointMake(-scalingFactorX*20.62, scalingFactorY*scalingFactorX*691.27)]; 134 | [leftCloudsPath addCurveToPoint: CGPointMake(-scalingFactorX*22.95, scalingFactorY*scalingFactorX*650.05) controlPoint1: CGPointMake(-scalingFactorX*33.68, scalingFactorY*scalingFactorX*678.21) controlPoint2: CGPointMake(-scalingFactorX*33.68, scalingFactorY*scalingFactorX*660.79)]; 135 | [leftCloudsPath addCurveToPoint: CGPointMake(scalingFactorX*15.95, scalingFactorY*scalingFactorX*650.05) controlPoint1: CGPointMake(-scalingFactorX*12.21, scalingFactorY*scalingFactorX*639.32) controlPoint2: CGPointMake(scalingFactorX*5.21, scalingFactorY*scalingFactorX*639.32)]; 136 | [leftCloudsPath closePath]; 137 | [rgb255 setFill]; 138 | [leftCloudsPath fill]; 139 | 140 | // Left Clouds 2 Drawing 141 | UIBezierPath* leftClouds2Path = [UIBezierPath bezierPath]; 142 | [leftClouds2Path moveToPoint: CGPointMake(scalingFactorX*6.95, scalingFactorY*scalingFactorX*655.05)]; 143 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*13.56, scalingFactorY*scalingFactorX*683.3) controlPoint1: CGPointMake(scalingFactorX*14.59, scalingFactorY*scalingFactorX*662.7) controlPoint2: CGPointMake(scalingFactorX*16.79, scalingFactorY*scalingFactorX*673.71)]; 144 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*27.48, scalingFactorY*scalingFactorX*691.67) controlPoint1: CGPointMake(scalingFactorX*18.65, scalingFactorY*scalingFactorX*684.8) controlPoint2: CGPointMake(scalingFactorX*23.46, scalingFactorY*scalingFactorX*687.59)]; 145 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*36.04, scalingFactorY*scalingFactorX*707.01) controlPoint1: CGPointMake(scalingFactorX*31.81, scalingFactorY*scalingFactorX*696.06) controlPoint2: CGPointMake(scalingFactorX*34.66, scalingFactorY*scalingFactorX*701.39)]; 146 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*71.65, scalingFactorY*scalingFactorX*719.16) controlPoint1: CGPointMake(scalingFactorX*48.9, scalingFactorY*scalingFactorX*706.8) controlPoint2: CGPointMake(scalingFactorX*61.84, scalingFactorY*scalingFactorX*710.84)]; 147 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*81.52, scalingFactorY*scalingFactorX*731.14) controlPoint1: CGPointMake(scalingFactorX*75.87, scalingFactorY*scalingFactorX*722.73) controlPoint2: CGPointMake(scalingFactorX*79.16, scalingFactorY*scalingFactorX*726.8)]; 148 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*177.18, scalingFactorY*scalingFactorX*735.42) controlPoint1: CGPointMake(scalingFactorX*110.6, scalingFactorY*scalingFactorX*720.36) controlPoint2: CGPointMake(scalingFactorX*151.13, scalingFactorY*scalingFactorX*721.79)]; 149 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*195.47, scalingFactorY*scalingFactorX*751.12) controlPoint1: CGPointMake(scalingFactorX*185.88, scalingFactorY*scalingFactorX*739.98) controlPoint2: CGPointMake(scalingFactorX*191.98, scalingFactorY*scalingFactorX*745.38)]; 150 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*232.07, scalingFactorY*scalingFactorX*755.03) controlPoint1: CGPointMake(scalingFactorX*207.1, scalingFactorY*scalingFactorX*745.92) controlPoint2: CGPointMake(scalingFactorX*222.15, scalingFactorY*scalingFactorX*747.23)]; 151 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*232.07, scalingFactorY*scalingFactorX*788.97) controlPoint1: CGPointMake(scalingFactorX*243.98, scalingFactorY*scalingFactorX*764.4) controlPoint2: CGPointMake(scalingFactorX*243.98, scalingFactorY*scalingFactorX*779.6)]; 152 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*188.93, scalingFactorY*scalingFactorX*788.97) controlPoint1: CGPointMake(scalingFactorX*220.16, scalingFactorY*scalingFactorX*798.34) controlPoint2: CGPointMake(scalingFactorX*200.84, scalingFactorY*scalingFactorX*798.34)]; 153 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*185.31, scalingFactorY*scalingFactorX*785.54) controlPoint1: CGPointMake(scalingFactorX*187.57, scalingFactorY*scalingFactorX*787.9) controlPoint2: CGPointMake(scalingFactorX*186.36, scalingFactorY*scalingFactorX*786.75)]; 154 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*177.18, scalingFactorY*scalingFactorX*790.58) controlPoint1: CGPointMake(scalingFactorX*182.92, scalingFactorY*scalingFactorX*787.3) controlPoint2: CGPointMake(scalingFactorX*180.21, scalingFactorY*scalingFactorX*788.99)]; 155 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*71.82, scalingFactorY*scalingFactorX*790.58) controlPoint1: CGPointMake(scalingFactorX*148.09, scalingFactorY*scalingFactorX*805.81) controlPoint2: CGPointMake(scalingFactorX*100.91, scalingFactorY*scalingFactorX*805.81)]; 156 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*61.97, scalingFactorY*scalingFactorX*784.22) controlPoint1: CGPointMake(scalingFactorX*68.05, scalingFactorY*scalingFactorX*788.6) controlPoint2: CGPointMake(scalingFactorX*64.77, scalingFactorY*scalingFactorX*786.47)]; 157 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*2.35, scalingFactorY*scalingFactorX*777.84) controlPoint1: CGPointMake(scalingFactorX*43.17, scalingFactorY*scalingFactorX*793.66) controlPoint2: CGPointMake(scalingFactorX*18.52, scalingFactorY*scalingFactorX*791.54)]; 158 | [leftClouds2Path addCurveToPoint: CGPointMake(-scalingFactorX*11.66, scalingFactorY*scalingFactorX*743.64) controlPoint1: CGPointMake(-scalingFactorX*8.68, scalingFactorY*scalingFactorX*768.5) controlPoint2: CGPointMake(-scalingFactorX*13.35, scalingFactorY*scalingFactorX*755.81)]; 159 | [leftClouds2Path addCurveToPoint: CGPointMake(-scalingFactorX*18.48, scalingFactorY*scalingFactorX*738.33) controlPoint1: CGPointMake(-scalingFactorX*14.1, scalingFactorY*scalingFactorX*742.22) controlPoint2: CGPointMake(-scalingFactorX*16.4, scalingFactorY*scalingFactorX*740.45)]; 160 | [leftClouds2Path addCurveToPoint: CGPointMake(-scalingFactorX*24.16, scalingFactorY*scalingFactorX*699.41) controlPoint1: CGPointMake(-scalingFactorX*28.86, scalingFactorY*scalingFactorX*727.8) controlPoint2: CGPointMake(-scalingFactorX*30.75, scalingFactorY*scalingFactorX*711.9)]; 161 | [leftClouds2Path addCurveToPoint: CGPointMake(-scalingFactorX*31.95, scalingFactorY*scalingFactorX*693.95) controlPoint1: CGPointMake(-scalingFactorX*26.97, scalingFactorY*scalingFactorX*698.1) controlPoint2: CGPointMake(-scalingFactorX*29.62, scalingFactorY*scalingFactorX*696.27)]; 162 | [leftClouds2Path addCurveToPoint: CGPointMake(-scalingFactorX*31.95, scalingFactorY*scalingFactorX*655.05) controlPoint1: CGPointMake(-scalingFactorX*42.68, scalingFactorY*scalingFactorX*683.21) controlPoint2: CGPointMake(-scalingFactorX*42.68, scalingFactorY*scalingFactorX*665.79)]; 163 | [leftClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*6.95, scalingFactorY*scalingFactorX*655.05) controlPoint1: CGPointMake(-scalingFactorX*21.21, scalingFactorY*scalingFactorX*644.32) controlPoint2: CGPointMake(-scalingFactorX*3.79, scalingFactorY*scalingFactorX*644.32)]; 164 | [leftClouds2Path closePath]; 165 | [rgb240 setFill]; 166 | [leftClouds2Path fill]; 167 | 168 | // Right Clouds 2 Drawing 169 | UIBezierPath* rightClouds2Path = [UIBezierPath bezierPath]; 170 | [rightClouds2Path moveToPoint: CGPointMake(scalingFactorX*1070.7, scalingFactorY*scalingFactorX*659.58)]; 171 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*1070.7, scalingFactorY*scalingFactorX*703.42) controlPoint1: CGPointMake(scalingFactorX*1087.1, scalingFactorY*scalingFactorX*671.69) controlPoint2: CGPointMake(scalingFactorX*1087.1, scalingFactorY*scalingFactorX*691.31)]; 172 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*1031, scalingFactorY*scalingFactorX*711.61) controlPoint1: CGPointMake(scalingFactorX*1059.93, scalingFactorY*scalingFactorX*711.37) controlPoint2: CGPointMake(scalingFactorX*1044.78, scalingFactorY*scalingFactorX*714.1)]; 173 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*1029.07, scalingFactorY*scalingFactorX*721.02) controlPoint1: CGPointMake(scalingFactorX*1030.98, scalingFactorY*scalingFactorX*714.8) controlPoint2: CGPointMake(scalingFactorX*1030.34, scalingFactorY*scalingFactorX*717.98)]; 174 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*1048.5, scalingFactorY*scalingFactorX*732.19) controlPoint1: CGPointMake(scalingFactorX*1036.1, scalingFactorY*scalingFactorX*723.73) controlPoint2: CGPointMake(scalingFactorX*1042.68, scalingFactorY*scalingFactorX*727.46)]; 175 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*1048.5, scalingFactorY*scalingFactorX*812.81) controlPoint1: CGPointMake(scalingFactorX*1075.83, scalingFactorY*scalingFactorX*754.45) controlPoint2: CGPointMake(scalingFactorX*1075.83, scalingFactorY*scalingFactorX*790.55)]; 176 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*949.5, scalingFactorY*scalingFactorX*812.81) controlPoint1: CGPointMake(scalingFactorX*1021.16, scalingFactorY*scalingFactorX*835.06) controlPoint2: CGPointMake(scalingFactorX*976.84, scalingFactorY*scalingFactorX*835.06)]; 177 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*934.19, scalingFactorY*scalingFactorX*794.08) controlPoint1: CGPointMake(scalingFactorX*942.71, scalingFactorY*scalingFactorX*807.28) controlPoint2: CGPointMake(scalingFactorX*937.61, scalingFactorY*scalingFactorX*800.89)]; 178 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*908.2, scalingFactorY*scalingFactorX*790.8) controlPoint1: CGPointMake(scalingFactorX*925.39, scalingFactorY*scalingFactorX*795.19) controlPoint2: CGPointMake(scalingFactorX*916.14, scalingFactorY*scalingFactorX*794.09)]; 179 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*902.63, scalingFactorY*scalingFactorX*796.88) controlPoint1: CGPointMake(scalingFactorX*906.76, scalingFactorY*scalingFactorX*792.99) controlPoint2: CGPointMake(scalingFactorX*904.9, scalingFactorY*scalingFactorX*795.04)]; 180 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*857.37, scalingFactorY*scalingFactorX*796.88) controlPoint1: CGPointMake(scalingFactorX*890.13, scalingFactorY*scalingFactorX*807.04) controlPoint2: CGPointMake(scalingFactorX*869.87, scalingFactorY*scalingFactorX*807.04)]; 181 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*857.37, scalingFactorY*scalingFactorX*760.12) controlPoint1: CGPointMake(scalingFactorX*844.88, scalingFactorY*scalingFactorX*786.73) controlPoint2: CGPointMake(scalingFactorX*844.88, scalingFactorY*scalingFactorX*770.27)]; 182 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*893.02, scalingFactorY*scalingFactorX*754.74) controlPoint1: CGPointMake(scalingFactorX*867.01, scalingFactorY*scalingFactorX*752.28) controlPoint2: CGPointMake(scalingFactorX*881.27, scalingFactorY*scalingFactorX*750.49)]; 183 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*900.28, scalingFactorY*scalingFactorX*747.55) controlPoint1: CGPointMake(scalingFactorX*894.83, scalingFactorY*scalingFactorX*752.15) controlPoint2: CGPointMake(scalingFactorX*897.25, scalingFactorY*scalingFactorX*749.72)]; 184 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*940.55, scalingFactorY*scalingFactorX*741.12) controlPoint1: CGPointMake(scalingFactorX*911.17, scalingFactorY*scalingFactorX*739.78) controlPoint2: CGPointMake(scalingFactorX*926.95, scalingFactorY*scalingFactorX*737.63)]; 185 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*949.5, scalingFactorY*scalingFactorX*732.19) controlPoint1: CGPointMake(scalingFactorX*943.1, scalingFactorY*scalingFactorX*737.97) controlPoint2: CGPointMake(scalingFactorX*946.09, scalingFactorY*scalingFactorX*734.97)]; 186 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*968.07, scalingFactorY*scalingFactorX*721.35) controlPoint1: CGPointMake(scalingFactorX*955.08, scalingFactorY*scalingFactorX*727.65) controlPoint2: CGPointMake(scalingFactorX*961.37, scalingFactorY*scalingFactorX*724.04)]; 187 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*975.52, scalingFactorY*scalingFactorX*691.7) controlPoint1: CGPointMake(scalingFactorX*963.73, scalingFactorY*scalingFactorX*711.38) controlPoint2: CGPointMake(scalingFactorX*966.21, scalingFactorY*scalingFactorX*699.72)]; 188 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*999.09, scalingFactorY*scalingFactorX*683.5) controlPoint1: CGPointMake(scalingFactorX*982.02, scalingFactorY*scalingFactorX*686.1) controlPoint2: CGPointMake(scalingFactorX*990.58, scalingFactorY*scalingFactorX*683.37)]; 189 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*1011.3, scalingFactorY*scalingFactorX*659.58) controlPoint1: CGPointMake(scalingFactorX*998.34, scalingFactorY*scalingFactorX*674.92) controlPoint2: CGPointMake(scalingFactorX*1002.41, scalingFactorY*scalingFactorX*666.14)]; 190 | [rightClouds2Path addCurveToPoint: CGPointMake(scalingFactorX*1070.7, scalingFactorY*scalingFactorX*659.58) controlPoint1: CGPointMake(scalingFactorX*1027.7, scalingFactorY*scalingFactorX*647.47) controlPoint2: CGPointMake(scalingFactorX*1054.3, scalingFactorY*scalingFactorX*647.47)]; 191 | [rightClouds2Path closePath]; 192 | [rgb240 setFill]; 193 | [rightClouds2Path fill]; 194 | 195 | // Memory 196 | CGGradientRelease(skyBackground); 197 | CGColorSpaceRelease(colorSpace); 198 | } 199 | 200 | @end -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/AngryBirdView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface AngryBirdView : UIView 12 | 13 | @end -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/AngryBirdView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import "AngryBirdView.h" 10 | 11 | @interface AngryBirdView() 12 | { 13 | @private 14 | CGFloat _scalingFactor; 15 | } 16 | 17 | #pragma mark - Private Properties 18 | 19 | #pragma mark - Private Methods 20 | - (void)commonInitializer; 21 | 22 | @end 23 | 24 | @implementation AngryBirdView 25 | 26 | #pragma mark - Initialization 27 | 28 | - (id)initWithFrame:(CGRect)frame 29 | { 30 | self = [super initWithFrame:frame]; 31 | 32 | if (nil != self) 33 | { 34 | [self commonInitializer]; 35 | } 36 | 37 | return self; 38 | } 39 | 40 | - (id)initWithCoder:(NSCoder *)aDecoder 41 | { 42 | self = [super initWithCoder:aDecoder]; 43 | 44 | if (nil != self) 45 | { 46 | [self commonInitializer]; 47 | } 48 | 49 | return self; 50 | } 51 | 52 | - (id)init 53 | { 54 | self = [super init]; 55 | 56 | if (nil != self) 57 | { 58 | [self commonInitializer]; 59 | } 60 | 61 | return self; 62 | } 63 | 64 | - (void)commonInitializer 65 | { 66 | self.backgroundColor = [UIColor clearColor]; 67 | 68 | _scalingFactor = 0.0f; 69 | CGFloat width = CGRectGetWidth(self.frame); 70 | CGFloat uniWidth = 512.0f; 71 | 72 | _scalingFactor = width/uniWidth; 73 | } 74 | 75 | #pragma mark - Drawing 76 | 77 | - (void)drawRect:(CGRect)rect 78 | { 79 | [super drawRect:rect]; 80 | 81 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 82 | 83 | // Colors 84 | UIColor* black = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 1]; 85 | UIColor* r212g0b46 = [UIColor colorWithRed: 0.79 green: 0 blue: 0.14 alpha: 1]; 86 | UIColor* r252g0b80 = [UIColor colorWithRed: 0.99 green: 0 blue: 0.25 alpha: 1]; 87 | UIColor* rgb0alpha10 = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 0.1]; 88 | UIColor* r143g0b13 = [UIColor colorWithRed: 0.49 green: 0 blue: 0.05 alpha: 1]; 89 | UIColor* r22g196b168 = [UIColor colorWithRed: 0.85 green: 0.72 blue: 0.59 alpha: 1]; 90 | UIColor* white = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 1]; 91 | UIColor* r243g156b33 = [UIColor colorWithRed: 0.94 green: 0.54 blue: 0.1 alpha: 1]; 92 | UIColor* r250g187b33 = [UIColor colorWithRed: 0.98 green: 0.68 blue: 0.1 alpha: 1]; 93 | 94 | // Black Bird Background Drawing 95 | UIBezierPath* blackBirdBackgroundPath = [UIBezierPath bezierPath]; 96 | [blackBirdBackgroundPath moveToPoint: CGPointMake(_scalingFactor*201.5, _scalingFactor*133.5)]; 97 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*135, _scalingFactor*203) controlPoint1: CGPointMake(_scalingFactor*201.5, _scalingFactor*133.5) controlPoint2: CGPointMake(_scalingFactor*164.21, _scalingFactor*157.79)]; 98 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*112, _scalingFactor*253) controlPoint1: CGPointMake(_scalingFactor*127.7, _scalingFactor*214.3) controlPoint2: CGPointMake(_scalingFactor*112.61, _scalingFactor*250.71)]; 99 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*97, _scalingFactor*221) controlPoint1: CGPointMake(_scalingFactor*111.39, _scalingFactor*255.3) controlPoint2: CGPointMake(_scalingFactor*97.02, _scalingFactor*221.14)]; 100 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*75.5, _scalingFactor*239) controlPoint1: CGPointMake(_scalingFactor*96.73, _scalingFactor*218.66) controlPoint2: CGPointMake(_scalingFactor*75.97, _scalingFactor*237.71)]; 101 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*108, _scalingFactor*267.5) controlPoint1: CGPointMake(_scalingFactor*75.03, _scalingFactor*240.29) controlPoint2: CGPointMake(_scalingFactor*99.74, _scalingFactor*262.89)]; 102 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*57.5, _scalingFactor*243.5) controlPoint1: CGPointMake(_scalingFactor*116.26, _scalingFactor*272.11) controlPoint2: CGPointMake(_scalingFactor*62.16, _scalingFactor*244.83)]; 103 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*44.5, _scalingFactor*271.5) controlPoint1: CGPointMake(_scalingFactor*52.84, _scalingFactor*242.17) controlPoint2: CGPointMake(_scalingFactor*44.29, _scalingFactor*264.81)]; 104 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*104.5, _scalingFactor*280.5) controlPoint1: CGPointMake(_scalingFactor*44.71, _scalingFactor*278.19) controlPoint2: CGPointMake(_scalingFactor*104.5, _scalingFactor*280.5)]; 105 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*70.5, _scalingFactor*290.5) controlPoint1: CGPointMake(_scalingFactor*104.5, _scalingFactor*280.5) controlPoint2: CGPointMake(_scalingFactor*71.39, _scalingFactor*288.53)]; 106 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*77.5, _scalingFactor*309.5) controlPoint1: CGPointMake(_scalingFactor*69.61, _scalingFactor*292.47) controlPoint2: CGPointMake(_scalingFactor*77.5, _scalingFactor*309.5)]; 107 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*103, _scalingFactor*294) controlPoint1: CGPointMake(_scalingFactor*77.5, _scalingFactor*309.5) controlPoint2: CGPointMake(_scalingFactor*104.3, _scalingFactor*288.4)]; 108 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*151, _scalingFactor*420) controlPoint1: CGPointMake(_scalingFactor*101.7, _scalingFactor*299.6) controlPoint2: CGPointMake(_scalingFactor*90.3, _scalingFactor*373.97)]; 109 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*274, _scalingFactor*459) controlPoint1: CGPointMake(_scalingFactor*179.69, _scalingFactor*441.75) controlPoint2: CGPointMake(_scalingFactor*224.74, _scalingFactor*454.55)]; 110 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*405, _scalingFactor*430) controlPoint1: CGPointMake(_scalingFactor*328.96, _scalingFactor*463.96) controlPoint2: CGPointMake(_scalingFactor*370.85, _scalingFactor*450.21)]; 111 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*451.5, _scalingFactor*230.5) controlPoint1: CGPointMake(_scalingFactor*469.75, _scalingFactor*391.68) controlPoint2: CGPointMake(_scalingFactor*480.96, _scalingFactor*299.99)]; 112 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*351.5, _scalingFactor*128.5) controlPoint1: CGPointMake(_scalingFactor*422.04, _scalingFactor*161.01) controlPoint2: CGPointMake(_scalingFactor*351.5, _scalingFactor*128.5)]; 113 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*260, _scalingFactor*51) controlPoint1: CGPointMake(_scalingFactor*351.5, _scalingFactor*128.5) controlPoint2: CGPointMake(_scalingFactor*312.1, _scalingFactor*47.73)]; 114 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*236.5, _scalingFactor*89.5) controlPoint1: CGPointMake(_scalingFactor*207.9, _scalingFactor*54.27) controlPoint2: CGPointMake(_scalingFactor*236.5, _scalingFactor*89.5)]; 115 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*167, _scalingFactor*105) controlPoint1: CGPointMake(_scalingFactor*236.5, _scalingFactor*89.5) controlPoint2: CGPointMake(_scalingFactor*179.42, _scalingFactor*79.11)]; 116 | [blackBirdBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*201.5, _scalingFactor*133.5) controlPoint1: CGPointMake(_scalingFactor*154.58, _scalingFactor*130.89) controlPoint2: CGPointMake(_scalingFactor*201.5, _scalingFactor*133.5)]; 117 | [blackBirdBackgroundPath closePath]; 118 | [black setFill]; 119 | [blackBirdBackgroundPath fill]; 120 | 121 | // Red Bird Filling Drawing 122 | UIBezierPath* redBirdFillingPath = [UIBezierPath bezierPath]; 123 | [redBirdFillingPath moveToPoint: CGPointMake(_scalingFactor*350.5, _scalingFactor*138.5)]; 124 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*280.5, _scalingFactor*62.5) controlPoint1: CGPointMake(_scalingFactor*350.5, _scalingFactor*138.5) controlPoint2: CGPointMake(_scalingFactor*331.59, _scalingFactor*82.6)]; 125 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*265.5, _scalingFactor*103.5) controlPoint1: CGPointMake(_scalingFactor*229.41, _scalingFactor*42.4) controlPoint2: CGPointMake(_scalingFactor*235.15, _scalingFactor*87.44)]; 126 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*314.5, _scalingFactor*125.5) controlPoint1: CGPointMake(_scalingFactor*295.85, _scalingFactor*119.56) controlPoint2: CGPointMake(_scalingFactor*314.5, _scalingFactor*125.5)]; 127 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*254.5, _scalingFactor*102.5) controlPoint1: CGPointMake(_scalingFactor*314.5, _scalingFactor*125.5) controlPoint2: CGPointMake(_scalingFactor*278.4, _scalingFactor*124.64)]; 128 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*183.5, _scalingFactor*119.5) controlPoint1: CGPointMake(_scalingFactor*230.6, _scalingFactor*80.36) controlPoint2: CGPointMake(_scalingFactor*153.52, _scalingFactor*96.38)]; 129 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*260.5, _scalingFactor*126.5) controlPoint1: CGPointMake(_scalingFactor*196.52, _scalingFactor*129.54) controlPoint2: CGPointMake(_scalingFactor*260.35, _scalingFactor*126.5)]; 130 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*157.5, _scalingFactor*185.5) controlPoint1: CGPointMake(_scalingFactor*260.77, _scalingFactor*126.5) controlPoint2: CGPointMake(_scalingFactor*205.1, _scalingFactor*125.93)]; 131 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*110.5, _scalingFactor*306.5) controlPoint1: CGPointMake(_scalingFactor*109.9, _scalingFactor*245.07) controlPoint2: CGPointMake(_scalingFactor*110.5, _scalingFactor*306.5)]; 132 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*162.5, _scalingFactor*408.5) controlPoint1: CGPointMake(_scalingFactor*110.5, _scalingFactor*306.5) controlPoint2: CGPointMake(_scalingFactor*103.96, _scalingFactor*371.82)]; 133 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5) controlPoint1: CGPointMake(_scalingFactor*221.04, _scalingFactor*445.18) controlPoint2: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5)]; 134 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*428.5, _scalingFactor*392.5) controlPoint1: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5) controlPoint2: CGPointMake(_scalingFactor*380.53, _scalingFactor*448.64)]; 135 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*419.5, _scalingFactor*193.5) controlPoint1: CGPointMake(_scalingFactor*468.59, _scalingFactor*345.58) controlPoint2: CGPointMake(_scalingFactor*456.7, _scalingFactor*235.48)]; 136 | [redBirdFillingPath addCurveToPoint: CGPointMake(_scalingFactor*350.5, _scalingFactor*138.5) controlPoint1: CGPointMake(_scalingFactor*382.3, _scalingFactor*151.52) controlPoint2: CGPointMake(_scalingFactor*350.5, _scalingFactor*138.5)]; 137 | [redBirdFillingPath closePath]; 138 | [r212g0b46 setFill]; 139 | [redBirdFillingPath fill]; 140 | 141 | // Red Bird Highlight Drawing 142 | UIBezierPath* redBirdHighlightPath = [UIBezierPath bezierPath]; 143 | [redBirdHighlightPath moveToPoint: CGPointMake(_scalingFactor*228.16, _scalingFactor*92.45)]; 144 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*181.64, _scalingFactor*117.95) controlPoint1: CGPointMake(_scalingFactor*211.07, _scalingFactor*94.65) controlPoint2: CGPointMake(_scalingFactor*191.16, _scalingFactor*109.86)]; 145 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*228.62, _scalingFactor*92.51) controlPoint1: CGPointMake(_scalingFactor*163.37, _scalingFactor*101.47) controlPoint2: CGPointMake(_scalingFactor*199.26, _scalingFactor*89.06)]; 146 | [redBirdHighlightPath addLineToPoint: CGPointMake(_scalingFactor*228.16, _scalingFactor*92.45)]; 147 | [redBirdHighlightPath closePath]; 148 | [redBirdHighlightPath moveToPoint: CGPointMake(_scalingFactor*280.5, _scalingFactor*62.5)]; 149 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*350.5, _scalingFactor*138.5) controlPoint1: CGPointMake(_scalingFactor*331.59, _scalingFactor*82.6) controlPoint2: CGPointMake(_scalingFactor*350.5, _scalingFactor*138.5)]; 150 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*419.5, _scalingFactor*193.5) controlPoint1: CGPointMake(_scalingFactor*350.5, _scalingFactor*138.5) controlPoint2: CGPointMake(_scalingFactor*382.3, _scalingFactor*151.52)]; 151 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*451.99, _scalingFactor*280.21) controlPoint1: CGPointMake(_scalingFactor*436.34, _scalingFactor*212.51) controlPoint2: CGPointMake(_scalingFactor*447.99, _scalingFactor*245.47)]; 152 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*336, _scalingFactor*146) controlPoint1: CGPointMake(_scalingFactor*438.59, _scalingFactor*216.02) controlPoint2: CGPointMake(_scalingFactor*384.24, _scalingFactor*168.75)]; 153 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*328, _scalingFactor*123) controlPoint1: CGPointMake(_scalingFactor*322.43, _scalingFactor*139.6) controlPoint2: CGPointMake(_scalingFactor*339.4, _scalingFactor*143.94)]; 154 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*242.38, _scalingFactor*70.38) controlPoint1: CGPointMake(_scalingFactor*303.25, _scalingFactor*77.54) controlPoint2: CGPointMake(_scalingFactor*255.47, _scalingFactor*68.75)]; 155 | [redBirdHighlightPath addCurveToPoint: CGPointMake(_scalingFactor*280.5, _scalingFactor*62.5) controlPoint1: CGPointMake(_scalingFactor*242.97, _scalingFactor*59.06) controlPoint2: CGPointMake(_scalingFactor*254.21, _scalingFactor*52.16)]; 156 | [redBirdHighlightPath closePath]; 157 | [r252g0b80 setFill]; 158 | [redBirdHighlightPath fill]; 159 | 160 | // Bird Tummy Skin Drawing 161 | UIBezierPath* birdTummySkinPath = [UIBezierPath bezierPath]; 162 | [birdTummySkinPath moveToPoint: CGPointMake(_scalingFactor*373.92, _scalingFactor*383.73)]; 163 | [birdTummySkinPath addCurveToPoint: CGPointMake(_scalingFactor*401.72, _scalingFactor*415.88) controlPoint1: CGPointMake(_scalingFactor*386.12, _scalingFactor*393.25) controlPoint2: CGPointMake(_scalingFactor*395.39, _scalingFactor*404.19)]; 164 | [birdTummySkinPath addCurveToPoint: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5) controlPoint1: CGPointMake(_scalingFactor*353.59, _scalingFactor*447.38) controlPoint2: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5)]; 165 | [birdTummySkinPath addCurveToPoint: CGPointMake(_scalingFactor*165.53, _scalingFactor*410.36) controlPoint1: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5) controlPoint2: CGPointMake(_scalingFactor*223.47, _scalingFactor*445.16)]; 166 | [birdTummySkinPath addCurveToPoint: CGPointMake(_scalingFactor*190.08, _scalingFactor*383.73) controlPoint1: CGPointMake(_scalingFactor*171.64, _scalingFactor*400.75) controlPoint2: CGPointMake(_scalingFactor*179.82, _scalingFactor*391.73)]; 167 | [birdTummySkinPath addCurveToPoint: CGPointMake(_scalingFactor*373.92, _scalingFactor*383.73) controlPoint1: CGPointMake(_scalingFactor*240.84, _scalingFactor*344.09) controlPoint2: CGPointMake(_scalingFactor*323.16, _scalingFactor*344.09)]; 168 | [birdTummySkinPath closePath]; 169 | [r22g196b168 setFill]; 170 | [birdTummySkinPath fill]; 171 | 172 | // Bird Dot Drawing 173 | UIBezierPath* birdDotPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(_scalingFactor*217, _scalingFactor*295, _scalingFactor*34, _scalingFactor*66)]; 174 | [r143g0b13 setFill]; 175 | [birdDotPath fill]; 176 | 177 | // Bird Dot 2 Drawing 178 | UIBezierPath* birdDot2Path = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(_scalingFactor*171, _scalingFactor*317, _scalingFactor*33, _scalingFactor*45)]; 179 | [r143g0b13 setFill]; 180 | [birdDot2Path fill]; 181 | 182 | // Black Bird Face Background Drawing 183 | UIBezierPath* blackBirdFaceBackgroundPath = [UIBezierPath bezierPath]; 184 | [blackBirdFaceBackgroundPath moveToPoint: CGPointMake(_scalingFactor*392.5, _scalingFactor*252.5)]; 185 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*359.5, _scalingFactor*269.5) controlPoint1: CGPointMake(_scalingFactor*376.38, _scalingFactor*262.24) controlPoint2: CGPointMake(_scalingFactor*359.5, _scalingFactor*269.5)]; 186 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*284.5, _scalingFactor*220) controlPoint1: CGPointMake(_scalingFactor*359.5, _scalingFactor*269.5) controlPoint2: CGPointMake(_scalingFactor*291.08, _scalingFactor*230.66)]; 187 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*259.5, _scalingFactor*249.5) controlPoint1: CGPointMake(_scalingFactor*277.92, _scalingFactor*209.34) controlPoint2: CGPointMake(_scalingFactor*259.09, _scalingFactor*248.65)]; 188 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*284.5, _scalingFactor*265.5) controlPoint1: CGPointMake(_scalingFactor*259.91, _scalingFactor*250.35) controlPoint2: CGPointMake(_scalingFactor*280.76, _scalingFactor*265.56)]; 189 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*276.5, _scalingFactor*296.5) controlPoint1: CGPointMake(_scalingFactor*286.9, _scalingFactor*265.46) controlPoint2: CGPointMake(_scalingFactor*276.19, _scalingFactor*274.07)]; 190 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*281.5, _scalingFactor*319.5) controlPoint1: CGPointMake(_scalingFactor*276.67, _scalingFactor*308.96) controlPoint2: CGPointMake(_scalingFactor*283.55, _scalingFactor*317.77)]; 191 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*300.5, _scalingFactor*317.5) controlPoint1: CGPointMake(_scalingFactor*275.76, _scalingFactor*324.35) controlPoint2: CGPointMake(_scalingFactor*294.68, _scalingFactor*319.28)]; 192 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*330.5, _scalingFactor*316.5) controlPoint1: CGPointMake(_scalingFactor*306.32, _scalingFactor*315.72) controlPoint2: CGPointMake(_scalingFactor*335.59, _scalingFactor*312.9)]; 193 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*291.5, _scalingFactor*362.5) controlPoint1: CGPointMake(_scalingFactor*325.41, _scalingFactor*320.1) controlPoint2: CGPointMake(_scalingFactor*291.5, _scalingFactor*339.21)]; 194 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*296.5, _scalingFactor*383.5) controlPoint1: CGPointMake(_scalingFactor*291.5, _scalingFactor*362.87) controlPoint2: CGPointMake(_scalingFactor*292.93, _scalingFactor*380.57)]; 195 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*353.5, _scalingFactor*418.5) controlPoint1: CGPointMake(_scalingFactor*309.03, _scalingFactor*393.8) controlPoint2: CGPointMake(_scalingFactor*347.3, _scalingFactor*420.35)]; 196 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*402.5, _scalingFactor*381.5) controlPoint1: CGPointMake(_scalingFactor*371.7, _scalingFactor*413.06) controlPoint2: CGPointMake(_scalingFactor*400.53, _scalingFactor*386.79)]; 197 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*430.5, _scalingFactor*395.5) controlPoint1: CGPointMake(_scalingFactor*404.1, _scalingFactor*377.2) controlPoint2: CGPointMake(_scalingFactor*419.81, _scalingFactor*393.29)]; 198 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*439.5, _scalingFactor*385.5) controlPoint1: CGPointMake(_scalingFactor*438.81, _scalingFactor*397.21) controlPoint2: CGPointMake(_scalingFactor*439.29, _scalingFactor*384.95)]; 199 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*423.5, _scalingFactor*347.5) controlPoint1: CGPointMake(_scalingFactor*439.98, _scalingFactor*386.77) controlPoint2: CGPointMake(_scalingFactor*433.83, _scalingFactor*364.47)]; 200 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*379.5, _scalingFactor*311.5) controlPoint1: CGPointMake(_scalingFactor*413.17, _scalingFactor*330.53) controlPoint2: CGPointMake(_scalingFactor*379.5, _scalingFactor*311.5)]; 201 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*417.5, _scalingFactor*303.5) controlPoint1: CGPointMake(_scalingFactor*379.5, _scalingFactor*311.5) controlPoint2: CGPointMake(_scalingFactor*387.21, _scalingFactor*300.51)]; 202 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*423.5, _scalingFactor*293.5) controlPoint1: CGPointMake(_scalingFactor*432.59, _scalingFactor*304.99) controlPoint2: CGPointMake(_scalingFactor*423.19, _scalingFactor*302.86)]; 203 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*417.5, _scalingFactor*269.5) controlPoint1: CGPointMake(_scalingFactor*423.82, _scalingFactor*284.07) controlPoint2: CGPointMake(_scalingFactor*417.9, _scalingFactor*269.5)]; 204 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*442.5, _scalingFactor*259.5) controlPoint1: CGPointMake(_scalingFactor*416.7, _scalingFactor*269.5) controlPoint2: CGPointMake(_scalingFactor*442.5, _scalingFactor*259.5)]; 205 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*426.5, _scalingFactor*227.5) controlPoint1: CGPointMake(_scalingFactor*442.5, _scalingFactor*259.5) controlPoint2: CGPointMake(_scalingFactor*432.27, _scalingFactor*220.94)]; 206 | [blackBirdFaceBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*392.5, _scalingFactor*252.5) controlPoint1: CGPointMake(_scalingFactor*423.63, _scalingFactor*230.76) controlPoint2: CGPointMake(_scalingFactor*408.45, _scalingFactor*242.86)]; 207 | [blackBirdFaceBackgroundPath closePath]; 208 | [black setFill]; 209 | [blackBirdFaceBackgroundPath fill]; 210 | 211 | // Bird White Eye Right Background Drawing 212 | UIBezierPath* birdWhiteEyeRightBackgroundPath = [UIBezierPath bezierPath]; 213 | [birdWhiteEyeRightBackgroundPath moveToPoint: CGPointMake(_scalingFactor*290, _scalingFactor*267.5)]; 214 | [birdWhiteEyeRightBackgroundPath addLineToPoint: CGPointMake(_scalingFactor*355, _scalingFactor*290.5)]; 215 | [birdWhiteEyeRightBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*352, _scalingFactor*305) controlPoint1: CGPointMake(_scalingFactor*355, _scalingFactor*290.5) controlPoint2: CGPointMake(_scalingFactor*354.75, _scalingFactor*303.99)]; 216 | [birdWhiteEyeRightBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*338, _scalingFactor*312.5) controlPoint1: CGPointMake(_scalingFactor*349.25, _scalingFactor*306.01) controlPoint2: CGPointMake(_scalingFactor*341.8, _scalingFactor*312.36)]; 217 | [birdWhiteEyeRightBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*304.5, _scalingFactor*312.5) controlPoint1: CGPointMake(_scalingFactor*334.2, _scalingFactor*312.64) controlPoint2: CGPointMake(_scalingFactor*323.66, _scalingFactor*310.77)]; 218 | [birdWhiteEyeRightBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*288, _scalingFactor*314.5) controlPoint1: CGPointMake(_scalingFactor*299.71, _scalingFactor*312.93) controlPoint2: CGPointMake(_scalingFactor*290.14, _scalingFactor*316.32)]; 219 | [birdWhiteEyeRightBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*281, _scalingFactor*282.5) controlPoint1: CGPointMake(_scalingFactor*281.36, _scalingFactor*308.85) controlPoint2: CGPointMake(_scalingFactor*279.38, _scalingFactor*291.86)]; 220 | [birdWhiteEyeRightBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*290, _scalingFactor*267.5) controlPoint1: CGPointMake(_scalingFactor*283.14, _scalingFactor*270.13) controlPoint2: CGPointMake(_scalingFactor*290, _scalingFactor*267.5)]; 221 | [birdWhiteEyeRightBackgroundPath closePath]; 222 | [white setFill]; 223 | [birdWhiteEyeRightBackgroundPath fill]; 224 | 225 | // Bird White Eye Left Background Drawing 226 | UIBezierPath* birdWhiteEyeLeftBackgroundPath = [UIBezierPath bezierPath]; 227 | [birdWhiteEyeLeftBackgroundPath moveToPoint: CGPointMake(_scalingFactor*361, _scalingFactor*289)]; 228 | [birdWhiteEyeLeftBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*410, _scalingFactor*273) controlPoint1: CGPointMake(_scalingFactor*363.98, _scalingFactor*285.65) controlPoint2: CGPointMake(_scalingFactor*407.73, _scalingFactor*271.97)]; 229 | [birdWhiteEyeLeftBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*416, _scalingFactor*297) controlPoint1: CGPointMake(_scalingFactor*412.9, _scalingFactor*274.31) controlPoint2: CGPointMake(_scalingFactor*417.59, _scalingFactor*289.96)]; 230 | [birdWhiteEyeLeftBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*380, _scalingFactor*304) controlPoint1: CGPointMake(_scalingFactor*415.4, _scalingFactor*299.67) controlPoint2: CGPointMake(_scalingFactor*385.16, _scalingFactor*297.35)]; 231 | [birdWhiteEyeLeftBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*361, _scalingFactor*304) controlPoint1: CGPointMake(_scalingFactor*374.84, _scalingFactor*310.65) controlPoint2: CGPointMake(_scalingFactor*361, _scalingFactor*303.8)]; 232 | [birdWhiteEyeLeftBackgroundPath addCurveToPoint: CGPointMake(_scalingFactor*361, _scalingFactor*289) controlPoint1: CGPointMake(_scalingFactor*361, _scalingFactor*304.2) controlPoint2: CGPointMake(_scalingFactor*358.74, _scalingFactor*291.55)]; 233 | [birdWhiteEyeLeftBackgroundPath closePath]; 234 | [white setFill]; 235 | [birdWhiteEyeLeftBackgroundPath fill]; 236 | 237 | // Bird Shadow Drawing 238 | UIBezierPath* birdShadowPath = [UIBezierPath bezierPath]; 239 | [birdShadowPath moveToPoint: CGPointMake(_scalingFactor*201.33, _scalingFactor*146.31)]; 240 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*160.5, _scalingFactor*277.5) controlPoint1: CGPointMake(_scalingFactor*195.21, _scalingFactor*155.9) controlPoint2: CGPointMake(_scalingFactor*161.77, _scalingFactor*211.37)]; 241 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*236.5, _scalingFactor*383.5) controlPoint1: CGPointMake(_scalingFactor*159.15, _scalingFactor*347.52) controlPoint2: CGPointMake(_scalingFactor*220.47, _scalingFactor*394.94)]; 242 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*281.5, _scalingFactor*352.5) controlPoint1: CGPointMake(_scalingFactor*269.24, _scalingFactor*360.13) controlPoint2: CGPointMake(_scalingFactor*281.5, _scalingFactor*352.5)]; 243 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*259, _scalingFactor*326) controlPoint1: CGPointMake(_scalingFactor*281.5, _scalingFactor*352.5) controlPoint2: CGPointMake(_scalingFactor*258.84, _scalingFactor*352.68)]; 244 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*296.5, _scalingFactor*257) controlPoint1: CGPointMake(_scalingFactor*259.21, _scalingFactor*292.27) controlPoint2: CGPointMake(_scalingFactor*303.48, _scalingFactor*242.49)]; 245 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*296, _scalingFactor*310) controlPoint1: CGPointMake(_scalingFactor*293.37, _scalingFactor*263.5) controlPoint2: CGPointMake(_scalingFactor*281.81, _scalingFactor*311.5)]; 246 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*353.5, _scalingFactor*321) controlPoint1: CGPointMake(_scalingFactor*352.78, _scalingFactor*304.02) controlPoint2: CGPointMake(_scalingFactor*353.5, _scalingFactor*321)]; 247 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*382, _scalingFactor*267) controlPoint1: CGPointMake(_scalingFactor*353.5, _scalingFactor*321) controlPoint2: CGPointMake(_scalingFactor*351.13, _scalingFactor*267.83)]; 248 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*423.5, _scalingFactor*267.5) controlPoint1: CGPointMake(_scalingFactor*388.81, _scalingFactor*266.82) controlPoint2: CGPointMake(_scalingFactor*415.34, _scalingFactor*260.36)]; 249 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*429.5, _scalingFactor*347.5) controlPoint1: CGPointMake(_scalingFactor*468.68, _scalingFactor*307.02) controlPoint2: CGPointMake(_scalingFactor*429.5, _scalingFactor*347.5)]; 250 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*438.88, _scalingFactor*376.88) controlPoint1: CGPointMake(_scalingFactor*429.5, _scalingFactor*347.5) controlPoint2: CGPointMake(_scalingFactor*441.47, _scalingFactor*358.8)]; 251 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*428.5, _scalingFactor*392.5) controlPoint1: CGPointMake(_scalingFactor*435.91, _scalingFactor*382.62) controlPoint2: CGPointMake(_scalingFactor*432.46, _scalingFactor*387.87)]; 252 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5) controlPoint1: CGPointMake(_scalingFactor*380.53, _scalingFactor*448.64) controlPoint2: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5)]; 253 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*162.5, _scalingFactor*408.5) controlPoint1: CGPointMake(_scalingFactor*292.5, _scalingFactor*444.5) controlPoint2: CGPointMake(_scalingFactor*221.04, _scalingFactor*445.18)]; 254 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*110.5, _scalingFactor*306.5) controlPoint1: CGPointMake(_scalingFactor*103.96, _scalingFactor*371.82) controlPoint2: CGPointMake(_scalingFactor*110.5, _scalingFactor*306.5)]; 255 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*157.5, _scalingFactor*185.5) controlPoint1: CGPointMake(_scalingFactor*110.5, _scalingFactor*306.5) controlPoint2: CGPointMake(_scalingFactor*109.9, _scalingFactor*245.07)]; 256 | [birdShadowPath addCurveToPoint: CGPointMake(_scalingFactor*201.49, _scalingFactor*146.05) controlPoint1: CGPointMake(_scalingFactor*172.02, _scalingFactor*167.33) controlPoint2: CGPointMake(_scalingFactor*187.29, _scalingFactor*154.75)]; 257 | [birdShadowPath addLineToPoint: CGPointMake(_scalingFactor*201.33, _scalingFactor*146.31)]; 258 | [birdShadowPath closePath]; 259 | [rgb0alpha10 setFill]; 260 | [birdShadowPath fill]; 261 | 262 | // Bird Right Eye Drawing 263 | UIBezierPath* birdRightEyePath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(_scalingFactor*310, _scalingFactor*284, _scalingFactor*21, _scalingFactor*19)]; 264 | [black setFill]; 265 | [birdRightEyePath fill]; 266 | 267 | // Bird Left Eye Drawing 268 | UIBezierPath* birdLeftEyePath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(_scalingFactor*366, _scalingFactor*286, _scalingFactor*14, _scalingFactor*13)]; 269 | [black setFill]; 270 | [birdLeftEyePath fill]; 271 | 272 | // Bird Upper Jaw Drawing 273 | UIBezierPath* birdUpperJawPath = [UIBezierPath bezierPath]; 274 | [birdUpperJawPath moveToPoint: CGPointMake(_scalingFactor*422, _scalingFactor*356)]; 275 | [birdUpperJawPath addCurveToPoint: CGPointMake(_scalingFactor*358, _scalingFactor*309) controlPoint1: CGPointMake(_scalingFactor*405.78, _scalingFactor*327.16) controlPoint2: CGPointMake(_scalingFactor*362.33, _scalingFactor*308.85)]; 276 | [birdUpperJawPath addCurveToPoint: CGPointMake(_scalingFactor*303, _scalingFactor*351) controlPoint1: CGPointMake(_scalingFactor*345.61, _scalingFactor*309.44) controlPoint2: CGPointMake(_scalingFactor*308.76, _scalingFactor*337)]; 277 | [birdUpperJawPath addCurveToPoint: CGPointMake(_scalingFactor*420, _scalingFactor*384) controlPoint1: CGPointMake(_scalingFactor*293.1, _scalingFactor*375.07) controlPoint2: CGPointMake(_scalingFactor*401.42, _scalingFactor*362.42)]; 278 | [birdUpperJawPath addCurveToPoint: CGPointMake(_scalingFactor*422, _scalingFactor*356) controlPoint1: CGPointMake(_scalingFactor*429.55, _scalingFactor*395.1) controlPoint2: CGPointMake(_scalingFactor*439.17, _scalingFactor*386.53)]; 279 | [birdUpperJawPath closePath]; 280 | [r250g187b33 setFill]; 281 | [birdUpperJawPath fill]; 282 | 283 | // Bird Lower Jaw Drawing 284 | UIBezierPath* birdLowerJawPath = [UIBezierPath bezierPath]; 285 | [birdLowerJawPath moveToPoint: CGPointMake(_scalingFactor*313.5, _scalingFactor*385.5)]; 286 | [birdLowerJawPath addCurveToPoint: CGPointMake(_scalingFactor*350.5, _scalingFactor*372.5) controlPoint1: CGPointMake(_scalingFactor*317.11, _scalingFactor*383.02) controlPoint2: CGPointMake(_scalingFactor*339.15, _scalingFactor*373.22)]; 287 | [birdLowerJawPath addCurveToPoint: CGPointMake(_scalingFactor*398.5, _scalingFactor*380.5) controlPoint1: CGPointMake(_scalingFactor*365.83, _scalingFactor*371.53) controlPoint2: CGPointMake(_scalingFactor*401.04, _scalingFactor*376.72)]; 288 | [birdLowerJawPath addCurveToPoint: CGPointMake(_scalingFactor*354.5, _scalingFactor*409.5) controlPoint1: CGPointMake(_scalingFactor*391.08, _scalingFactor*391.55) controlPoint2: CGPointMake(_scalingFactor*371.08, _scalingFactor*407.93)]; 289 | [birdLowerJawPath addCurveToPoint: CGPointMake(_scalingFactor*313.5, _scalingFactor*385.5) controlPoint1: CGPointMake(_scalingFactor*347.79, _scalingFactor*410.13) controlPoint2: CGPointMake(_scalingFactor*307.73, _scalingFactor*389.47)]; 290 | [birdLowerJawPath closePath]; 291 | [r243g156b33 setFill]; 292 | [birdLowerJawPath fill]; 293 | 294 | // Bird Teeth Drawing 295 | UIBezierPath* birdTeethPath = [UIBezierPath bezierPath]; 296 | [birdTeethPath moveToPoint: CGPointMake(_scalingFactor*300, _scalingFactor*364)]; 297 | [birdTeethPath addCurveToPoint: CGPointMake(_scalingFactor*306, _scalingFactor*382) controlPoint1: CGPointMake(_scalingFactor*296.59, _scalingFactor*363.17) controlPoint2: CGPointMake(_scalingFactor*295.96, _scalingFactor*384.5)]; 298 | [birdTeethPath addCurveToPoint: CGPointMake(_scalingFactor*334, _scalingFactor*373) controlPoint1: CGPointMake(_scalingFactor*316.04, _scalingFactor*379.5) controlPoint2: CGPointMake(_scalingFactor*327.4, _scalingFactor*373.1)]; 299 | [birdTeethPath addCurveToPoint: CGPointMake(_scalingFactor*300, _scalingFactor*364) controlPoint1: CGPointMake(_scalingFactor*339.05, _scalingFactor*372.92) controlPoint2: CGPointMake(_scalingFactor*311.15, _scalingFactor*366.72)]; 300 | [birdTeethPath closePath]; 301 | [white setFill]; 302 | [birdTeethPath fill]; 303 | 304 | // Cleanup 305 | CGColorSpaceRelease(colorSpace); 306 | } 307 | 308 | @end -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @class ViewController; 12 | 13 | @interface AppDelegate : UIResponder 14 | 15 | @property (strong, nonatomic) UIWindow *window; 16 | @property (strong, nonatomic) ViewController *viewController; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | 12 | @implementation AppDelegate 13 | 14 | @synthesize window = _window; 15 | @synthesize viewController = _viewController; 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 18 | { 19 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 20 | 21 | self.viewController = [[ViewController alloc] init]; 22 | 23 | self.window.rootViewController = self.viewController; 24 | [self.window makeKeyAndVisible]; 25 | return YES; 26 | } 27 | 28 | @end -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/CoreBirdy-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.nehira.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UIStatusBarHidden 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationLandscapeLeft 36 | UIInterfaceOrientationLandscapeRight 37 | 38 | UISupportedInterfaceOrientations~ipad 39 | 40 | UIInterfaceOrientationLandscapeLeft 41 | UIInterfaceOrientationLandscapeRight 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/CoreBirdy-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'CoreBirdy' target in the 'CoreBirdy' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_4_0 8 | #warning "This project uses features only available in iOS SDK 4.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011, Philip Kluz (Philip.Kluz@zuui.org) 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 14 | * Neither the name of Philip Kluz, 'zuui.org' nor the names of its contributors may 15 | be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL PHILIP KLUZ BE LIABLE FOR ANY DIRECT, 22 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/ViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @class AngryBirdView; 12 | 13 | @interface ViewController : UIViewController 14 | 15 | #pragma mark - Public Properties 16 | @property (nonatomic, strong) IBOutlet UIScrollView *iPhoneScrollView; 17 | @property (nonatomic, strong) IBOutlet AngryBirdView *angryBird; 18 | 19 | #pragma mark - Public Methods 20 | 21 | @end -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/ViewController.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import "ViewController.h" 10 | #import "AngryBirdView.h" 11 | 12 | @implementation ViewController 13 | 14 | @synthesize iPhoneScrollView; 15 | @synthesize angryBird; 16 | 17 | - (void)viewDidLoad 18 | { 19 | [super viewDidLoad]; 20 | 21 | if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 22 | { 23 | self.iPhoneScrollView.contentSize = CGSizeMake(512.0f, 512.0f); 24 | AngryBirdView *anAngryBird = [[AngryBirdView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 512.0f, 512.0f)]; 25 | [self.iPhoneScrollView addSubview:anAngryBird]; 26 | } 27 | } 28 | 29 | - (void)viewDidUnload 30 | { 31 | self.iPhoneScrollView = nil; 32 | [super viewDidUnload]; 33 | } 34 | 35 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 36 | { 37 | return UIInterfaceOrientationIsLandscape(interfaceOrientation); 38 | } 39 | 40 | @end -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/en.lproj/ViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1296 5 | 11D50b 6 | 2182 7 | 1138.32 8 | 568.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1179 12 | 13 | 14 | IBProxyObject 15 | IBUIView 16 | IBUIScrollView 17 | 18 | 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | PluginDependencyRecalculationVersion 23 | 24 | 25 | 26 | 27 | IBFilesOwner 28 | IBCocoaTouchFramework 29 | 30 | 31 | IBFirstResponder 32 | IBCocoaTouchFramework 33 | 34 | 35 | 36 | 274 37 | 38 | 39 | 40 | 274 41 | {320, 460} 42 | 43 | 44 | 45 | _NS:9 46 | 47 | 3 48 | MSAwAA 49 | 50 | YES 51 | YES 52 | IBCocoaTouchFramework 53 | 2 54 | 55 | 56 | {{0, 20}, {320, 460}} 57 | 58 | 59 | 60 | 61 | 3 62 | MQA 63 | 64 | NO 65 | 66 | IBCocoaTouchFramework 67 | 68 | 69 | 70 | 71 | 72 | 73 | view 74 | 75 | 76 | 77 | 7 78 | 79 | 80 | 81 | iPhoneScrollView 82 | 83 | 84 | 85 | 13 86 | 87 | 88 | 89 | delegate 90 | 91 | 92 | 93 | 12 94 | 95 | 96 | 97 | 98 | 99 | 0 100 | 101 | 102 | 103 | 104 | 105 | -1 106 | 107 | 108 | File's Owner 109 | 110 | 111 | -2 112 | 113 | 114 | 115 | 116 | 6 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 9 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | ViewController 133 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 134 | UIResponder 135 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 136 | AngryBirdBackgroundView 137 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 138 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 139 | 140 | 141 | 142 | 143 | 144 | 13 145 | 146 | 147 | 148 | 149 | AngryBirdBackgroundView 150 | UIView 151 | 152 | IBProjectSource 153 | ./Classes/AngryBirdBackgroundView.h 154 | 155 | 156 | 157 | AngryBirdView 158 | UIView 159 | 160 | IBProjectSource 161 | ./Classes/AngryBirdView.h 162 | 163 | 164 | 165 | ViewController 166 | UIViewController 167 | 168 | AngryBirdView 169 | UIScrollView 170 | 171 | 172 | 173 | angryBird 174 | AngryBirdView 175 | 176 | 177 | iPhoneScrollView 178 | UIScrollView 179 | 180 | 181 | 182 | IBProjectSource 183 | ./Classes/ViewController.h 184 | 185 | 186 | 187 | 188 | 0 189 | IBCocoaTouchFramework 190 | 191 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 192 | 193 | 194 | YES 195 | 3 196 | 1179 197 | 198 | 199 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/en.lproj/ViewController~iPad.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1296 5 | 11D50b 6 | 2182 7 | 1138.32 8 | 568.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1179 12 | 13 | 14 | IBProxyObject 15 | IBUIView 16 | 17 | 18 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 19 | 20 | 21 | PluginDependencyRecalculationVersion 22 | 23 | 24 | 25 | 26 | IBFilesOwner 27 | IBIPadFramework 28 | 29 | 30 | IBFirstResponder 31 | IBIPadFramework 32 | 33 | 34 | 35 | 274 36 | 37 | 38 | 39 | 269 40 | {{224, 276}, {512, 512}} 41 | 42 | 43 | 44 | _NS:9 45 | 46 | 3 47 | MSAwAA 48 | 49 | IBIPadFramework 50 | 51 | 52 | {{0, 20}, {1024, 748}} 53 | 54 | 55 | 56 | 57 | 3 58 | MQA 59 | 60 | 2 61 | 62 | 63 | 64 | 2 65 | 66 | 67 | 3 68 | 3 69 | 70 | IBIPadFramework 71 | 72 | 73 | 74 | 75 | 76 | 77 | view 78 | 79 | 80 | 81 | 3 82 | 83 | 84 | 85 | angryBird 86 | 87 | 88 | 89 | 6 90 | 91 | 92 | 93 | 94 | 95 | 0 96 | 97 | 98 | 99 | 100 | 101 | -1 102 | 103 | 104 | File's Owner 105 | 106 | 107 | -2 108 | 109 | 110 | 111 | 112 | 2 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 5 121 | 122 | 123 | 124 | 125 | 126 | 127 | ViewController 128 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 129 | UIResponder 130 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 131 | AngryBirdBackgroundView 132 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 133 | AngryBirdView 134 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 135 | 136 | 137 | 138 | 139 | 140 | 6 141 | 142 | 143 | 144 | 145 | AngryBirdBackgroundView 146 | UIView 147 | 148 | IBProjectSource 149 | ./Classes/AngryBirdBackgroundView.h 150 | 151 | 152 | 153 | AngryBirdView 154 | UIView 155 | 156 | IBProjectSource 157 | ./Classes/AngryBirdView.h 158 | 159 | 160 | 161 | ViewController 162 | UIViewController 163 | 164 | AngryBirdView 165 | UIScrollView 166 | 167 | 168 | 169 | angryBird 170 | AngryBirdView 171 | 172 | 173 | iPhoneScrollView 174 | UIScrollView 175 | 176 | 177 | 178 | IBProjectSource 179 | ./Classes/ViewController.h 180 | 181 | 182 | 183 | 184 | 0 185 | IBIPadFramework 186 | 187 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 188 | 189 | 190 | YES 191 | 3 192 | 1179 193 | 194 | 195 | -------------------------------------------------------------------------------- /src/CoreBirdy/CoreBirdy/main.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 20.03.2012 7 | */ 8 | 9 | #import 10 | 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/CoreGraphicsSeminar.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5E1AD49215218F720065984A /* TapAndMoveView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1AD49115218F720065984A /* TapAndMoveView.m */; }; 11 | 5E1AD494152191DC0065984A /* TopicsDataSource.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5E1AD493152191DC0065984A /* TopicsDataSource.plist */; }; 12 | 5E1C82111520B36F00ABB2BD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E1C82101520B36F00ABB2BD /* UIKit.framework */; }; 13 | 5E1C82131520B36F00ABB2BD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E1C82121520B36F00ABB2BD /* Foundation.framework */; }; 14 | 5E1C82151520B36F00ABB2BD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E1C82141520B36F00ABB2BD /* CoreGraphics.framework */; }; 15 | 5E1C821B1520B36F00ABB2BD /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5E1C82191520B36F00ABB2BD /* InfoPlist.strings */; }; 16 | 5E1C821D1520B36F00ABB2BD /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C821C1520B36F00ABB2BD /* main.m */; }; 17 | 5E1C82211520B36F00ABB2BD /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C82201520B36F00ABB2BD /* AppDelegate.m */; }; 18 | 5E1C82241520B36F00ABB2BD /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C82231520B36F00ABB2BD /* MasterViewController.m */; }; 19 | 5E1C82271520B36F00ABB2BD /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C82261520B36F00ABB2BD /* DetailViewController.m */; }; 20 | 5E1C822A1520B36F00ABB2BD /* MasterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5E1C82281520B36F00ABB2BD /* MasterViewController.xib */; }; 21 | 5E1C82441520B9EE00ABB2BD /* ColorFillView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C82431520B9EE00ABB2BD /* ColorFillView.m */; }; 22 | 5E1C82461520BA3000ABB2BD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E1C82451520BA3000ABB2BD /* QuartzCore.framework */; }; 23 | 5E1C824C1520BB2600ABB2BD /* GradientFillLinearView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C824B1520BB2600ABB2BD /* GradientFillLinearView.m */; }; 24 | 5E1C824F1520BBC300ABB2BD /* GradientFillRadialView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C824E1520BBC300ABB2BD /* GradientFillRadialView.m */; }; 25 | 5E1C82521520C10500ABB2BD /* PathsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C82511520C10500ABB2BD /* PathsView.m */; }; 26 | 5E1C82551520C37D00ABB2BD /* BezierCurveView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C82541520C37D00ABB2BD /* BezierCurveView.m */; }; 27 | 5E1C82581520C89C00ABB2BD /* ImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C82571520C89C00ABB2BD /* ImageView.m */; }; 28 | 5E1C825A1520C8AC00ABB2BD /* tombraider.png in Resources */ = {isa = PBXBuildFile; fileRef = 5E1C82591520C8AC00ABB2BD /* tombraider.png */; }; 29 | 5E1C825D1520CD7400ABB2BD /* ClippingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C825C1520CD7400ABB2BD /* ClippingView.m */; }; 30 | 5E1C82601520D24600ABB2BD /* ClippingEOView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E1C825F1520D24600ABB2BD /* ClippingEOView.m */; }; 31 | 5E1C826A1520D54600ABB2BD /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 5E1C82691520D54600ABB2BD /* LICENSE */; }; 32 | 5E2CC9C8152AFB11005267E7 /* CustomButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E2CC9C7152AFB11005267E7 /* CustomButton.m */; }; 33 | 5E2CC9CB152AFB23005267E7 /* CustomButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E2CC9CA152AFB23005267E7 /* CustomButtonView.m */; }; 34 | 5E8D33191528FCE7004B7442 /* TapAndMoveViewWithHitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E8D33181528FCE7004B7442 /* TapAndMoveViewWithHitTest.m */; }; 35 | 5ED1BA32152289E200A62AA5 /* CoverFlowViewController~iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5ED1BA31152289E200A62AA5 /* CoverFlowViewController~iPad.xib */; }; 36 | 5ED2B8931522652F00CB9077 /* CoverFlowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ED2B8921522652F00CB9077 /* CoverFlowView.m */; }; 37 | 5ED2B896152266C700CB9077 /* CoverFlowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ED2B895152266C700CB9077 /* CoverFlowViewController.m */; }; 38 | 5ED2B8991522699400CB9077 /* CoverView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ED2B8981522699300CB9077 /* CoverView.m */; }; 39 | /* End PBXBuildFile section */ 40 | 41 | /* Begin PBXFileReference section */ 42 | 5E1AD49015218F720065984A /* TapAndMoveView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TapAndMoveView.h; path = demos/TapAndMoveView.h; sourceTree = ""; }; 43 | 5E1AD49115218F720065984A /* TapAndMoveView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TapAndMoveView.m; path = demos/TapAndMoveView.m; sourceTree = ""; }; 44 | 5E1AD493152191DC0065984A /* TopicsDataSource.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = TopicsDataSource.plist; sourceTree = ""; }; 45 | 5E1C820C1520B36F00ABB2BD /* CoreTechniques.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CoreTechniques.app; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 5E1C82101520B36F00ABB2BD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 47 | 5E1C82121520B36F00ABB2BD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 48 | 5E1C82141520B36F00ABB2BD /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 49 | 5E1C82181520B36F00ABB2BD /* CoreTechniques-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "CoreTechniques-Info.plist"; sourceTree = ""; }; 50 | 5E1C821A1520B36F00ABB2BD /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 51 | 5E1C821C1520B36F00ABB2BD /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 52 | 5E1C821E1520B36F00ABB2BD /* CoreTechniques-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CoreTechniques-Prefix.pch"; sourceTree = ""; }; 53 | 5E1C821F1520B36F00ABB2BD /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 54 | 5E1C82201520B36F00ABB2BD /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 55 | 5E1C82221520B36F00ABB2BD /* MasterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MasterViewController.h; sourceTree = ""; }; 56 | 5E1C82231520B36F00ABB2BD /* MasterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MasterViewController.m; sourceTree = ""; }; 57 | 5E1C82251520B36F00ABB2BD /* DetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = ""; }; 58 | 5E1C82261520B36F00ABB2BD /* DetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = ""; }; 59 | 5E1C82291520B36F00ABB2BD /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MasterViewController.xib; sourceTree = ""; }; 60 | 5E1C82421520B9EE00ABB2BD /* ColorFillView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ColorFillView.h; path = demos/ColorFillView.h; sourceTree = ""; }; 61 | 5E1C82431520B9EE00ABB2BD /* ColorFillView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ColorFillView.m; path = demos/ColorFillView.m; sourceTree = ""; }; 62 | 5E1C82451520BA3000ABB2BD /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 63 | 5E1C824A1520BB2600ABB2BD /* GradientFillLinearView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GradientFillLinearView.h; path = demos/GradientFillLinearView.h; sourceTree = ""; }; 64 | 5E1C824B1520BB2600ABB2BD /* GradientFillLinearView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GradientFillLinearView.m; path = demos/GradientFillLinearView.m; sourceTree = ""; }; 65 | 5E1C824D1520BBC300ABB2BD /* GradientFillRadialView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GradientFillRadialView.h; path = demos/GradientFillRadialView.h; sourceTree = ""; }; 66 | 5E1C824E1520BBC300ABB2BD /* GradientFillRadialView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GradientFillRadialView.m; path = demos/GradientFillRadialView.m; sourceTree = ""; }; 67 | 5E1C82501520C10400ABB2BD /* PathsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PathsView.h; path = demos/PathsView.h; sourceTree = ""; }; 68 | 5E1C82511520C10500ABB2BD /* PathsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PathsView.m; path = demos/PathsView.m; sourceTree = ""; }; 69 | 5E1C82531520C37C00ABB2BD /* BezierCurveView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BezierCurveView.h; path = demos/BezierCurveView.h; sourceTree = ""; }; 70 | 5E1C82541520C37D00ABB2BD /* BezierCurveView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BezierCurveView.m; path = demos/BezierCurveView.m; sourceTree = ""; }; 71 | 5E1C82561520C89C00ABB2BD /* ImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageView.h; path = demos/ImageView.h; sourceTree = ""; }; 72 | 5E1C82571520C89C00ABB2BD /* ImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ImageView.m; path = demos/ImageView.m; sourceTree = ""; }; 73 | 5E1C82591520C8AC00ABB2BD /* tombraider.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tombraider.png; sourceTree = ""; }; 74 | 5E1C825B1520CD7300ABB2BD /* ClippingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClippingView.h; path = demos/ClippingView.h; sourceTree = ""; }; 75 | 5E1C825C1520CD7400ABB2BD /* ClippingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ClippingView.m; path = demos/ClippingView.m; sourceTree = ""; }; 76 | 5E1C825E1520D24600ABB2BD /* ClippingEOView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClippingEOView.h; path = demos/ClippingEOView.h; sourceTree = ""; }; 77 | 5E1C825F1520D24600ABB2BD /* ClippingEOView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ClippingEOView.m; path = demos/ClippingEOView.m; sourceTree = ""; }; 78 | 5E1C82691520D54600ABB2BD /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 79 | 5E2CC9C6152AFB11005267E7 /* CustomButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomButton.h; path = demos/CustomButton.h; sourceTree = ""; }; 80 | 5E2CC9C7152AFB11005267E7 /* CustomButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CustomButton.m; path = demos/CustomButton.m; sourceTree = ""; }; 81 | 5E2CC9C9152AFB23005267E7 /* CustomButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomButtonView.h; path = demos/CustomButtonView.h; sourceTree = ""; }; 82 | 5E2CC9CA152AFB23005267E7 /* CustomButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CustomButtonView.m; path = demos/CustomButtonView.m; sourceTree = ""; }; 83 | 5E8D33171528FCE7004B7442 /* TapAndMoveViewWithHitTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TapAndMoveViewWithHitTest.h; path = demos/TapAndMoveViewWithHitTest.h; sourceTree = ""; }; 84 | 5E8D33181528FCE7004B7442 /* TapAndMoveViewWithHitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TapAndMoveViewWithHitTest.m; path = demos/TapAndMoveViewWithHitTest.m; sourceTree = ""; }; 85 | 5ED1BA31152289E200A62AA5 /* CoverFlowViewController~iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = "CoverFlowViewController~iPad.xib"; path = "demos/CoverFlowViewController~iPad.xib"; sourceTree = ""; }; 86 | 5ED2B8911522652F00CB9077 /* CoverFlowView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CoverFlowView.h; path = demos/CoverFlowView.h; sourceTree = ""; }; 87 | 5ED2B8921522652F00CB9077 /* CoverFlowView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CoverFlowView.m; path = demos/CoverFlowView.m; sourceTree = ""; }; 88 | 5ED2B894152266C700CB9077 /* CoverFlowViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CoverFlowViewController.h; path = demos/CoverFlowViewController.h; sourceTree = ""; }; 89 | 5ED2B895152266C700CB9077 /* CoverFlowViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CoverFlowViewController.m; path = demos/CoverFlowViewController.m; sourceTree = ""; }; 90 | 5ED2B8971522699300CB9077 /* CoverView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CoverView.h; path = demos/CoverView.h; sourceTree = ""; }; 91 | 5ED2B8981522699300CB9077 /* CoverView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CoverView.m; path = demos/CoverView.m; sourceTree = ""; }; 92 | /* End PBXFileReference section */ 93 | 94 | /* Begin PBXFrameworksBuildPhase section */ 95 | 5E1C82091520B36F00ABB2BD /* Frameworks */ = { 96 | isa = PBXFrameworksBuildPhase; 97 | buildActionMask = 2147483647; 98 | files = ( 99 | 5E1C82461520BA3000ABB2BD /* QuartzCore.framework in Frameworks */, 100 | 5E1C82111520B36F00ABB2BD /* UIKit.framework in Frameworks */, 101 | 5E1C82131520B36F00ABB2BD /* Foundation.framework in Frameworks */, 102 | 5E1C82151520B36F00ABB2BD /* CoreGraphics.framework in Frameworks */, 103 | ); 104 | runOnlyForDeploymentPostprocessing = 0; 105 | }; 106 | /* End PBXFrameworksBuildPhase section */ 107 | 108 | /* Begin PBXGroup section */ 109 | 5E1AD48E15218F500065984A /* UIKit Animations */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 5E8D331A1528FCEC004B7442 /* Translation */, 113 | 5E8D331B1528FCF2004B7442 /* Translation (Hit Test) */, 114 | ); 115 | name = "UIKit Animations"; 116 | sourceTree = ""; 117 | }; 118 | 5E1C82011520B36F00ABB2BD = { 119 | isa = PBXGroup; 120 | children = ( 121 | 5E1C82161520B36F00ABB2BD /* CoreTechniques */, 122 | 5E1C820F1520B36F00ABB2BD /* Frameworks */, 123 | 5E1C820D1520B36F00ABB2BD /* Products */, 124 | ); 125 | sourceTree = ""; 126 | }; 127 | 5E1C820D1520B36F00ABB2BD /* Products */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 5E1C820C1520B36F00ABB2BD /* CoreTechniques.app */, 131 | ); 132 | name = Products; 133 | sourceTree = ""; 134 | }; 135 | 5E1C820F1520B36F00ABB2BD /* Frameworks */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 5E1C82451520BA3000ABB2BD /* QuartzCore.framework */, 139 | 5E1C82101520B36F00ABB2BD /* UIKit.framework */, 140 | 5E1C82121520B36F00ABB2BD /* Foundation.framework */, 141 | 5E1C82141520B36F00ABB2BD /* CoreGraphics.framework */, 142 | ); 143 | name = Frameworks; 144 | sourceTree = ""; 145 | }; 146 | 5E1C82161520B36F00ABB2BD /* CoreTechniques */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 5E1C82691520D54600ABB2BD /* LICENSE */, 150 | 5E1C821F1520B36F00ABB2BD /* AppDelegate.h */, 151 | 5E1C82201520B36F00ABB2BD /* AppDelegate.m */, 152 | 5E1C82411520B58F00ABB2BD /* Demos */, 153 | 5E1C82401520B58400ABB2BD /* Application Logic */, 154 | 5E1C82171520B36F00ABB2BD /* Supporting Files */, 155 | ); 156 | path = CoreTechniques; 157 | sourceTree = ""; 158 | }; 159 | 5E1C82171520B36F00ABB2BD /* Supporting Files */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 5E1C82181520B36F00ABB2BD /* CoreTechniques-Info.plist */, 163 | 5E1C82191520B36F00ABB2BD /* InfoPlist.strings */, 164 | 5E1C821C1520B36F00ABB2BD /* main.m */, 165 | 5E1C821E1520B36F00ABB2BD /* CoreTechniques-Prefix.pch */, 166 | ); 167 | name = "Supporting Files"; 168 | sourceTree = ""; 169 | }; 170 | 5E1C82401520B58400ABB2BD /* Application Logic */ = { 171 | isa = PBXGroup; 172 | children = ( 173 | 5E1C82221520B36F00ABB2BD /* MasterViewController.h */, 174 | 5E1C82231520B36F00ABB2BD /* MasterViewController.m */, 175 | 5E1C82281520B36F00ABB2BD /* MasterViewController.xib */, 176 | 5E1C82251520B36F00ABB2BD /* DetailViewController.h */, 177 | 5E1C82261520B36F00ABB2BD /* DetailViewController.m */, 178 | 5E1AD493152191DC0065984A /* TopicsDataSource.plist */, 179 | ); 180 | name = "Application Logic"; 181 | sourceTree = ""; 182 | }; 183 | 5E1C82411520B58F00ABB2BD /* Demos */ = { 184 | isa = PBXGroup; 185 | children = ( 186 | 5E1C826B1520D83200ABB2BD /* CoreGraphics */, 187 | 5E1AD48E15218F500065984A /* UIKit Animations */, 188 | 5E1C826C1520D84200ABB2BD /* CoreAnimation */, 189 | ); 190 | name = Demos; 191 | sourceTree = ""; 192 | }; 193 | 5E1C82611520D3AC00ABB2BD /* Color Fill */ = { 194 | isa = PBXGroup; 195 | children = ( 196 | 5E1C82421520B9EE00ABB2BD /* ColorFillView.h */, 197 | 5E1C82431520B9EE00ABB2BD /* ColorFillView.m */, 198 | ); 199 | name = "Color Fill"; 200 | sourceTree = ""; 201 | }; 202 | 5E1C82621520D3B400ABB2BD /* Image */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | 5E1C82561520C89C00ABB2BD /* ImageView.h */, 206 | 5E1C82571520C89C00ABB2BD /* ImageView.m */, 207 | ); 208 | name = Image; 209 | sourceTree = ""; 210 | }; 211 | 5E1C82631520D3C200ABB2BD /* Gradient (Linear) */ = { 212 | isa = PBXGroup; 213 | children = ( 214 | 5E1C824A1520BB2600ABB2BD /* GradientFillLinearView.h */, 215 | 5E1C824B1520BB2600ABB2BD /* GradientFillLinearView.m */, 216 | ); 217 | name = "Gradient (Linear)"; 218 | sourceTree = ""; 219 | }; 220 | 5E1C82641520D3CF00ABB2BD /* Gradient (Radial) */ = { 221 | isa = PBXGroup; 222 | children = ( 223 | 5E1C824D1520BBC300ABB2BD /* GradientFillRadialView.h */, 224 | 5E1C824E1520BBC300ABB2BD /* GradientFillRadialView.m */, 225 | ); 226 | name = "Gradient (Radial)"; 227 | sourceTree = ""; 228 | }; 229 | 5E1C82651520D3DB00ABB2BD /* Paths */ = { 230 | isa = PBXGroup; 231 | children = ( 232 | 5E1C82501520C10400ABB2BD /* PathsView.h */, 233 | 5E1C82511520C10500ABB2BD /* PathsView.m */, 234 | ); 235 | name = Paths; 236 | sourceTree = ""; 237 | }; 238 | 5E1C82661520D3EA00ABB2BD /* Clipping */ = { 239 | isa = PBXGroup; 240 | children = ( 241 | 5E1C825B1520CD7300ABB2BD /* ClippingView.h */, 242 | 5E1C825C1520CD7400ABB2BD /* ClippingView.m */, 243 | ); 244 | name = Clipping; 245 | sourceTree = ""; 246 | }; 247 | 5E1C82671520D3F200ABB2BD /* Clipping (EO) */ = { 248 | isa = PBXGroup; 249 | children = ( 250 | 5E1C825E1520D24600ABB2BD /* ClippingEOView.h */, 251 | 5E1C825F1520D24600ABB2BD /* ClippingEOView.m */, 252 | ); 253 | name = "Clipping (EO)"; 254 | sourceTree = ""; 255 | }; 256 | 5E1C82681520D3FC00ABB2BD /* Bezier Curves */ = { 257 | isa = PBXGroup; 258 | children = ( 259 | 5E1C82531520C37C00ABB2BD /* BezierCurveView.h */, 260 | 5E1C82541520C37D00ABB2BD /* BezierCurveView.m */, 261 | ); 262 | name = "Bezier Curves"; 263 | sourceTree = ""; 264 | }; 265 | 5E1C826B1520D83200ABB2BD /* CoreGraphics */ = { 266 | isa = PBXGroup; 267 | children = ( 268 | 5E1C82611520D3AC00ABB2BD /* Color Fill */, 269 | 5E1C82621520D3B400ABB2BD /* Image */, 270 | 5E1C82631520D3C200ABB2BD /* Gradient (Linear) */, 271 | 5E1C82641520D3CF00ABB2BD /* Gradient (Radial) */, 272 | 5E1C82651520D3DB00ABB2BD /* Paths */, 273 | 5E1C82681520D3FC00ABB2BD /* Bezier Curves */, 274 | 5E1C82661520D3EA00ABB2BD /* Clipping */, 275 | 5E1C82671520D3F200ABB2BD /* Clipping (EO) */, 276 | 5E2CC9C4152AFAF3005267E7 /* Custom UIButton */, 277 | 5E1C82591520C8AC00ABB2BD /* tombraider.png */, 278 | ); 279 | name = CoreGraphics; 280 | sourceTree = ""; 281 | }; 282 | 5E1C826C1520D84200ABB2BD /* CoreAnimation */ = { 283 | isa = PBXGroup; 284 | children = ( 285 | 5E8D331C15290C2F004B7442 /* CoverFlow */, 286 | ); 287 | name = CoreAnimation; 288 | sourceTree = ""; 289 | }; 290 | 5E2CC9C4152AFAF3005267E7 /* Custom UIButton */ = { 291 | isa = PBXGroup; 292 | children = ( 293 | 5E2CC9C9152AFB23005267E7 /* CustomButtonView.h */, 294 | 5E2CC9CA152AFB23005267E7 /* CustomButtonView.m */, 295 | 5E2CC9C6152AFB11005267E7 /* CustomButton.h */, 296 | 5E2CC9C7152AFB11005267E7 /* CustomButton.m */, 297 | ); 298 | name = "Custom UIButton"; 299 | sourceTree = ""; 300 | }; 301 | 5E8D331A1528FCEC004B7442 /* Translation */ = { 302 | isa = PBXGroup; 303 | children = ( 304 | 5E1AD49015218F720065984A /* TapAndMoveView.h */, 305 | 5E1AD49115218F720065984A /* TapAndMoveView.m */, 306 | ); 307 | name = Translation; 308 | sourceTree = ""; 309 | }; 310 | 5E8D331B1528FCF2004B7442 /* Translation (Hit Test) */ = { 311 | isa = PBXGroup; 312 | children = ( 313 | 5E8D33171528FCE7004B7442 /* TapAndMoveViewWithHitTest.h */, 314 | 5E8D33181528FCE7004B7442 /* TapAndMoveViewWithHitTest.m */, 315 | ); 316 | name = "Translation (Hit Test)"; 317 | sourceTree = ""; 318 | }; 319 | 5E8D331C15290C2F004B7442 /* CoverFlow */ = { 320 | isa = PBXGroup; 321 | children = ( 322 | 5ED2B894152266C700CB9077 /* CoverFlowViewController.h */, 323 | 5ED2B895152266C700CB9077 /* CoverFlowViewController.m */, 324 | 5ED1BA31152289E200A62AA5 /* CoverFlowViewController~iPad.xib */, 325 | 5ED2B8911522652F00CB9077 /* CoverFlowView.h */, 326 | 5ED2B8921522652F00CB9077 /* CoverFlowView.m */, 327 | 5ED2B8971522699300CB9077 /* CoverView.h */, 328 | 5ED2B8981522699300CB9077 /* CoverView.m */, 329 | ); 330 | name = CoverFlow; 331 | sourceTree = ""; 332 | }; 333 | /* End PBXGroup section */ 334 | 335 | /* Begin PBXNativeTarget section */ 336 | 5E1C820B1520B36F00ABB2BD /* CoreTechniques */ = { 337 | isa = PBXNativeTarget; 338 | buildConfigurationList = 5E1C82301520B36F00ABB2BD /* Build configuration list for PBXNativeTarget "CoreTechniques" */; 339 | buildPhases = ( 340 | 5E1C82081520B36F00ABB2BD /* Sources */, 341 | 5E1C82091520B36F00ABB2BD /* Frameworks */, 342 | 5E1C820A1520B36F00ABB2BD /* Resources */, 343 | ); 344 | buildRules = ( 345 | ); 346 | dependencies = ( 347 | ); 348 | name = CoreTechniques; 349 | productName = CoreTechniques; 350 | productReference = 5E1C820C1520B36F00ABB2BD /* CoreTechniques.app */; 351 | productType = "com.apple.product-type.application"; 352 | }; 353 | /* End PBXNativeTarget section */ 354 | 355 | /* Begin PBXProject section */ 356 | 5E1C82031520B36F00ABB2BD /* Project object */ = { 357 | isa = PBXProject; 358 | attributes = { 359 | LastUpgradeCheck = 0430; 360 | }; 361 | buildConfigurationList = 5E1C82061520B36F00ABB2BD /* Build configuration list for PBXProject "CoreTechniques" */; 362 | compatibilityVersion = "Xcode 3.2"; 363 | developmentRegion = English; 364 | hasScannedForEncodings = 0; 365 | knownRegions = ( 366 | en, 367 | ); 368 | mainGroup = 5E1C82011520B36F00ABB2BD; 369 | productRefGroup = 5E1C820D1520B36F00ABB2BD /* Products */; 370 | projectDirPath = ""; 371 | projectRoot = ""; 372 | targets = ( 373 | 5E1C820B1520B36F00ABB2BD /* CoreTechniques */, 374 | ); 375 | }; 376 | /* End PBXProject section */ 377 | 378 | /* Begin PBXResourcesBuildPhase section */ 379 | 5E1C820A1520B36F00ABB2BD /* Resources */ = { 380 | isa = PBXResourcesBuildPhase; 381 | buildActionMask = 2147483647; 382 | files = ( 383 | 5E1C821B1520B36F00ABB2BD /* InfoPlist.strings in Resources */, 384 | 5E1C822A1520B36F00ABB2BD /* MasterViewController.xib in Resources */, 385 | 5E1C825A1520C8AC00ABB2BD /* tombraider.png in Resources */, 386 | 5E1C826A1520D54600ABB2BD /* LICENSE in Resources */, 387 | 5E1AD494152191DC0065984A /* TopicsDataSource.plist in Resources */, 388 | 5ED1BA32152289E200A62AA5 /* CoverFlowViewController~iPad.xib in Resources */, 389 | ); 390 | runOnlyForDeploymentPostprocessing = 0; 391 | }; 392 | /* End PBXResourcesBuildPhase section */ 393 | 394 | /* Begin PBXSourcesBuildPhase section */ 395 | 5E1C82081520B36F00ABB2BD /* Sources */ = { 396 | isa = PBXSourcesBuildPhase; 397 | buildActionMask = 2147483647; 398 | files = ( 399 | 5E1C821D1520B36F00ABB2BD /* main.m in Sources */, 400 | 5E1C82211520B36F00ABB2BD /* AppDelegate.m in Sources */, 401 | 5E1C82241520B36F00ABB2BD /* MasterViewController.m in Sources */, 402 | 5E1C82271520B36F00ABB2BD /* DetailViewController.m in Sources */, 403 | 5E1C82441520B9EE00ABB2BD /* ColorFillView.m in Sources */, 404 | 5E1C824C1520BB2600ABB2BD /* GradientFillLinearView.m in Sources */, 405 | 5E1C824F1520BBC300ABB2BD /* GradientFillRadialView.m in Sources */, 406 | 5E1C82521520C10500ABB2BD /* PathsView.m in Sources */, 407 | 5E1C82551520C37D00ABB2BD /* BezierCurveView.m in Sources */, 408 | 5E1C82581520C89C00ABB2BD /* ImageView.m in Sources */, 409 | 5E1C825D1520CD7400ABB2BD /* ClippingView.m in Sources */, 410 | 5E1C82601520D24600ABB2BD /* ClippingEOView.m in Sources */, 411 | 5E1AD49215218F720065984A /* TapAndMoveView.m in Sources */, 412 | 5ED2B8931522652F00CB9077 /* CoverFlowView.m in Sources */, 413 | 5ED2B896152266C700CB9077 /* CoverFlowViewController.m in Sources */, 414 | 5ED2B8991522699400CB9077 /* CoverView.m in Sources */, 415 | 5E8D33191528FCE7004B7442 /* TapAndMoveViewWithHitTest.m in Sources */, 416 | 5E2CC9C8152AFB11005267E7 /* CustomButton.m in Sources */, 417 | 5E2CC9CB152AFB23005267E7 /* CustomButtonView.m in Sources */, 418 | ); 419 | runOnlyForDeploymentPostprocessing = 0; 420 | }; 421 | /* End PBXSourcesBuildPhase section */ 422 | 423 | /* Begin PBXVariantGroup section */ 424 | 5E1C82191520B36F00ABB2BD /* InfoPlist.strings */ = { 425 | isa = PBXVariantGroup; 426 | children = ( 427 | 5E1C821A1520B36F00ABB2BD /* en */, 428 | ); 429 | name = InfoPlist.strings; 430 | sourceTree = ""; 431 | }; 432 | 5E1C82281520B36F00ABB2BD /* MasterViewController.xib */ = { 433 | isa = PBXVariantGroup; 434 | children = ( 435 | 5E1C82291520B36F00ABB2BD /* en */, 436 | ); 437 | name = MasterViewController.xib; 438 | sourceTree = ""; 439 | }; 440 | /* End PBXVariantGroup section */ 441 | 442 | /* Begin XCBuildConfiguration section */ 443 | 5E1C822E1520B36F00ABB2BD /* Debug */ = { 444 | isa = XCBuildConfiguration; 445 | buildSettings = { 446 | ALWAYS_SEARCH_USER_PATHS = NO; 447 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 448 | CLANG_ENABLE_OBJC_ARC = YES; 449 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 450 | COPY_PHASE_STRIP = NO; 451 | GCC_C_LANGUAGE_STANDARD = gnu99; 452 | GCC_DYNAMIC_NO_PIC = NO; 453 | GCC_OPTIMIZATION_LEVEL = 0; 454 | GCC_PREPROCESSOR_DEFINITIONS = ( 455 | "DEBUG=1", 456 | "$(inherited)", 457 | ); 458 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 459 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 460 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 461 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 462 | GCC_WARN_UNUSED_VARIABLE = YES; 463 | IPHONEOS_DEPLOYMENT_TARGET = 5.1; 464 | SDKROOT = iphoneos; 465 | TARGETED_DEVICE_FAMILY = 2; 466 | }; 467 | name = Debug; 468 | }; 469 | 5E1C822F1520B36F00ABB2BD /* Release */ = { 470 | isa = XCBuildConfiguration; 471 | buildSettings = { 472 | ALWAYS_SEARCH_USER_PATHS = NO; 473 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 474 | CLANG_ENABLE_OBJC_ARC = YES; 475 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 476 | COPY_PHASE_STRIP = YES; 477 | GCC_C_LANGUAGE_STANDARD = gnu99; 478 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 479 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 480 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 481 | GCC_WARN_UNUSED_VARIABLE = YES; 482 | IPHONEOS_DEPLOYMENT_TARGET = 5.1; 483 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 484 | SDKROOT = iphoneos; 485 | TARGETED_DEVICE_FAMILY = 2; 486 | VALIDATE_PRODUCT = YES; 487 | }; 488 | name = Release; 489 | }; 490 | 5E1C82311520B36F00ABB2BD /* Debug */ = { 491 | isa = XCBuildConfiguration; 492 | buildSettings = { 493 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 494 | GCC_PREFIX_HEADER = "CoreTechniques/CoreTechniques-Prefix.pch"; 495 | INFOPLIST_FILE = "CoreTechniques/CoreTechniques-Info.plist"; 496 | PRODUCT_NAME = "$(TARGET_NAME)"; 497 | WRAPPER_EXTENSION = app; 498 | }; 499 | name = Debug; 500 | }; 501 | 5E1C82321520B36F00ABB2BD /* Release */ = { 502 | isa = XCBuildConfiguration; 503 | buildSettings = { 504 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 505 | GCC_PREFIX_HEADER = "CoreTechniques/CoreTechniques-Prefix.pch"; 506 | INFOPLIST_FILE = "CoreTechniques/CoreTechniques-Info.plist"; 507 | PRODUCT_NAME = "$(TARGET_NAME)"; 508 | WRAPPER_EXTENSION = app; 509 | }; 510 | name = Release; 511 | }; 512 | /* End XCBuildConfiguration section */ 513 | 514 | /* Begin XCConfigurationList section */ 515 | 5E1C82061520B36F00ABB2BD /* Build configuration list for PBXProject "CoreTechniques" */ = { 516 | isa = XCConfigurationList; 517 | buildConfigurations = ( 518 | 5E1C822E1520B36F00ABB2BD /* Debug */, 519 | 5E1C822F1520B36F00ABB2BD /* Release */, 520 | ); 521 | defaultConfigurationIsVisible = 0; 522 | defaultConfigurationName = Release; 523 | }; 524 | 5E1C82301520B36F00ABB2BD /* Build configuration list for PBXNativeTarget "CoreTechniques" */ = { 525 | isa = XCConfigurationList; 526 | buildConfigurations = ( 527 | 5E1C82311520B36F00ABB2BD /* Debug */, 528 | 5E1C82321520B36F00ABB2BD /* Release */, 529 | ); 530 | defaultConfigurationIsVisible = 0; 531 | defaultConfigurationName = Release; 532 | }; 533 | /* End XCConfigurationList section */ 534 | }; 535 | rootObject = 5E1C82031520B36F00ABB2BD /* Project object */; 536 | } 537 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | @property (strong, nonatomic) UISplitViewController *splitViewController; 15 | 16 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "AppDelegate.h" 10 | #import "MasterViewController.h" 11 | #import "DetailViewController.h" 12 | 13 | @implementation AppDelegate 14 | 15 | @synthesize window = _window; 16 | @synthesize splitViewController = _splitViewController; 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 19 | { 20 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 21 | 22 | MasterViewController *masterViewController = [[MasterViewController alloc] init]; 23 | UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController]; 24 | 25 | DetailViewController *detailViewController = [[DetailViewController alloc] init]; 26 | UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; 27 | 28 | masterViewController.detailViewController = detailViewController; 29 | 30 | self.splitViewController = [[UISplitViewController alloc] init]; 31 | self.splitViewController.delegate = detailViewController; 32 | self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil]; 33 | 34 | self.window.rootViewController = self.splitViewController; 35 | [self.window makeKeyAndVisible]; 36 | return YES; 37 | } 38 | 39 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/CoreTechniques-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.nehira.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/CoreTechniques-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'CoreTechniques' target in the 'CoreTechniques' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_4_0 8 | #warning "This project uses features only available in iOS SDK 4.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/DetailViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface DetailViewController : UIViewController 12 | 13 | #pragma mark - Public Properties 14 | @property (nonatomic, copy) NSString *topic; 15 | 16 | #pragma mark - Public Methods 17 | 18 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/DetailViewController.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "DetailViewController.h" 10 | 11 | // Demo Files for CoreGraphics 12 | #import "ColorFillView.h" 13 | #import "GradientFillLinearView.h" 14 | #import "GradientFillRadialView.h" 15 | #import "ImageView.h" 16 | #import "PathsView.h" 17 | #import "BezierCurveView.h" 18 | #import "ClippingView.h" 19 | #import "ClippingEOView.h" 20 | #import "CustomButtonView.h" 21 | 22 | // Demo Files for UIKit (Animation) 23 | #import "TapAndMoveView.h" 24 | #import "TapAndMoveViewWithHitTest.h" 25 | 26 | // Demo Files for CoreAnimation 27 | 28 | @interface DetailViewController () 29 | 30 | #pragma mark - Private Proeprties 31 | @property (strong, nonatomic) UIPopoverController *masterPopoverController; 32 | @property (strong, nonatomic) UIView *currentView; 33 | 34 | #pragma mark - Private Methods 35 | - (void)updateView; 36 | 37 | @end 38 | 39 | @implementation DetailViewController 40 | 41 | @synthesize topic = _topic; 42 | @synthesize masterPopoverController = _masterPopoverController; 43 | @synthesize currentView = _currentView; 44 | 45 | #pragma mark - Managing the detail item 46 | 47 | - (void)updateView 48 | { 49 | if (nil != self.topic) 50 | { 51 | if (nil != [self.currentView superview]) 52 | { 53 | [self.currentView removeFromSuperview]; 54 | } 55 | 56 | if ([self.topic isEqualToString:@"Color Fill"]) 57 | { 58 | self.view = [[ColorFillView alloc] initWithFrame:self.view.frame]; 59 | } 60 | else if ([self.topic isEqualToString:@"Gradient Fill (Linear)"]) 61 | { 62 | self.view = [[GradientFillLinearView alloc] initWithFrame:self.view.frame]; 63 | } 64 | else if ([self.topic isEqualToString:@"Gradient Fill (Radial)"]) 65 | { 66 | self.view = [[GradientFillRadialView alloc] initWithFrame:self.view.frame]; 67 | } 68 | else if ([self.topic isEqualToString:@"Images"]) 69 | { 70 | self.view = [[ImageView alloc] initWithFrame:self.view.frame]; 71 | } 72 | else if ([self.topic isEqualToString:@"Paths"]) 73 | { 74 | self.view = [[PathsView alloc] initWithFrame:self.view.frame]; 75 | } 76 | else if ([self.topic isEqualToString:@"Bezier Curves"]) 77 | { 78 | self.view = [[BezierCurveView alloc] initWithFrame:self.view.frame]; 79 | } 80 | else if ([self.topic isEqualToString:@"Clipping"]) 81 | { 82 | self.view = [[ClippingView alloc] initWithFrame:self.view.frame]; 83 | } 84 | else if ([self.topic isEqualToString:@"Clipping (Even-Odd)"]) 85 | { 86 | self.view = [[ClippingEOView alloc] initWithFrame:self.view.frame]; 87 | } 88 | else if ([self.topic isEqualToString:@"Translation"]) 89 | { 90 | self.view = [[TapAndMoveView alloc] initWithFrame:self.view.frame]; 91 | } 92 | else if ([self.topic isEqualToString:@"Translation (Hit Test)"]) 93 | { 94 | self.view = [[TapAndMoveViewWithHitTest alloc] initWithFrame:self.view.frame]; 95 | } 96 | else if ([self.topic isEqualToString:@"Custom Button"]) 97 | { 98 | self.view = [[CustomButtonView alloc] initWithFrame:self.view.frame]; 99 | } 100 | else 101 | { 102 | // No valid topic selected. 103 | } 104 | } 105 | } 106 | 107 | #pragma mark - Accessors 108 | 109 | - (void)setTopic:(NSString *)newTopic 110 | { 111 | if (_topic != newTopic) 112 | { 113 | _topic = newTopic; 114 | [self updateView]; 115 | } 116 | 117 | if (self.masterPopoverController != nil) 118 | { 119 | [self.masterPopoverController dismissPopoverAnimated:YES]; 120 | } 121 | } 122 | 123 | #pragma mark - Touches 124 | 125 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 126 | { 127 | if ([self.topic isEqualToString:@"Translation"] && [self.view isKindOfClass:[TapAndMoveView class]]) 128 | { 129 | TapAndMoveView *view = (TapAndMoveView *)self.view; 130 | [view didTapView]; 131 | } 132 | else if ([self.topic isEqualToString:@"Translation (Hit Test)"] && [self.view isKindOfClass:[TapAndMoveViewWithHitTest class]]) 133 | { 134 | TapAndMoveViewWithHitTest *view = (TapAndMoveViewWithHitTest *)self.view; 135 | 136 | UITouch *touch = (UITouch *)[touches anyObject]; 137 | UIView *viewHit = [view hitTest:[touch locationInView:view] withEvent:event]; 138 | 139 | if ([viewHit isEqual:view.redBox]) 140 | { 141 | [view didTapRedBox]; 142 | } 143 | } 144 | } 145 | 146 | #pragma mark - View lifecycle 147 | 148 | - (void)viewDidLoad 149 | { 150 | [super viewDidLoad]; 151 | 152 | self.title = NSLocalizedString(@"Rendered", @"Rendered"); 153 | self.topic = @"Color Fill"; 154 | [self updateView]; 155 | } 156 | 157 | - (void)viewDidUnload 158 | { 159 | self.topic = nil; 160 | 161 | [super viewDidUnload]; 162 | } 163 | 164 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 165 | { 166 | return UIInterfaceOrientationIsLandscape(interfaceOrientation); 167 | } 168 | 169 | #pragma mark - Split view 170 | 171 | - (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController 172 | { 173 | barButtonItem.title = NSLocalizedString(@"Topics", @"Topics"); 174 | 175 | [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES]; 176 | 177 | self.masterPopoverController = popoverController; 178 | } 179 | 180 | - (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 181 | { 182 | [self.navigationItem setLeftBarButtonItem:nil animated:YES]; 183 | self.masterPopoverController = nil; 184 | } 185 | 186 | @end 187 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011, Philip Kluz (Philip.Kluz@zuui.org) 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 14 | * Neither the name of Philip Kluz, 'zuui.org' nor the names of its contributors may 15 | be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL PHILIP KLUZ BE LIABLE FOR ANY DIRECT, 22 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/MasterViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @class DetailViewController; 12 | 13 | @interface MasterViewController : UITableViewController 14 | 15 | #pragma mark - Public Properties 16 | @property (strong, nonatomic) DetailViewController *detailViewController; 17 | 18 | #pragma mark - Public Methods 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/MasterViewController.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "MasterViewController.h" 10 | #import "DetailViewController.h" 11 | 12 | #import "CoverFlowViewController.h" 13 | 14 | @interface MasterViewController () 15 | 16 | #pragma mark - Private Properties 17 | @property (nonatomic, strong, readwrite) NSMutableDictionary *dataSource; 18 | 19 | #pragma mark - Private Methods 20 | 21 | @end 22 | 23 | @implementation MasterViewController 24 | 25 | @synthesize detailViewController = _detailViewController; 26 | @synthesize dataSource = _dataSource; 27 | 28 | - (void)viewDidLoad 29 | { 30 | [super viewDidLoad]; 31 | 32 | self.title = NSLocalizedString(@"Techniques", @"Techniques"); 33 | self.clearsSelectionOnViewWillAppear = NO; 34 | self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0); 35 | 36 | NSString *dataSourceFilePath = [[NSBundle mainBundle] pathForResource:@"TopicsDataSource" ofType:@"plist"]; 37 | self.dataSource = [[NSMutableDictionary alloc] initWithContentsOfFile:dataSourceFilePath]; 38 | } 39 | 40 | - (void)viewDidUnload 41 | { 42 | self.dataSource = nil; 43 | self.detailViewController = nil; 44 | 45 | [super viewDidUnload]; 46 | } 47 | 48 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 49 | { 50 | return UIInterfaceOrientationIsLandscape(interfaceOrientation); 51 | } 52 | 53 | #pragma mark - Table View 54 | 55 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 56 | { 57 | return [[self.dataSource objectForKey:@"DataSource"] count]; 58 | } 59 | 60 | - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 61 | { 62 | return 22.0f; 63 | } 64 | 65 | - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 66 | { 67 | return [[[self.dataSource objectForKey:@"DataSource"] objectAtIndex:section] objectForKey:@"Title"]; 68 | } 69 | 70 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 71 | { 72 | return [[[[self.dataSource objectForKey:@"DataSource"] objectAtIndex:section] objectForKey:@"Topics"] count]; 73 | } 74 | 75 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 76 | { 77 | static NSString *CellIdentifier = @"Cell"; 78 | 79 | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 80 | 81 | if (cell == nil) 82 | { 83 | cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 84 | } 85 | 86 | cell.textLabel.text = [[[[self.dataSource objectForKey:@"DataSource"] objectAtIndex:indexPath.section] objectForKey:@"Topics"] objectAtIndex:indexPath.row]; 87 | 88 | return cell; 89 | } 90 | 91 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 92 | { 93 | NSString *topic = [[[[self.dataSource objectForKey:@"DataSource"] objectAtIndex:indexPath.section] objectForKey:@"Topics"] objectAtIndex:indexPath.row]; 94 | 95 | if ([topic isEqualToString:@"CoverFlow"]) 96 | { 97 | UINavigationController *modalNavigationController = [[UINavigationController alloc] initWithRootViewController:[[CoverFlowViewController alloc] initWithNibName:@"CoverFlowViewController" bundle:nil]]; 98 | [self presentModalViewController:modalNavigationController animated:YES]; 99 | } 100 | else 101 | { 102 | self.detailViewController.topic = topic; 103 | } 104 | } 105 | 106 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/TopicsDataSource.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DataSource 6 | 7 | 8 | Title 9 | CoreGraphics 10 | Topics 11 | 12 | Color Fill 13 | Gradient Fill (Linear) 14 | Gradient Fill (Radial) 15 | Images 16 | Paths 17 | Bezier Curves 18 | Clipping 19 | Clipping (Even-Odd) 20 | Custom Button 21 | 22 | 23 | 24 | Title 25 | UIKit (Animation) 26 | Topics 27 | 28 | Translation 29 | Translation (Hit Test) 30 | 31 | 32 | 33 | Title 34 | CoreAnimation 35 | Topics 36 | 37 | CoverFlow 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/BezierCurveView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | #import "ColorFillView.h" 11 | 12 | @interface BezierCurveView : ColorFillView 13 | 14 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/BezierCurveView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "BezierCurveView.h" 10 | 11 | @implementation BezierCurveView 12 | 13 | - (void)drawRect:(CGRect)rect 14 | { 15 | [super drawRect:rect]; 16 | 17 | CGContextRef context = UIGraphicsGetCurrentContext(); 18 | 19 | CGFloat yellowColor[4] = {1.0f, 1.0f, 0.0f, 1.0f}; 20 | 21 | UIBezierPath *bezierPath = [UIBezierPath bezierPath]; 22 | 23 | [bezierPath moveToPoint: CGPointMake(CGRectGetWidth(rect)*0.22f, (CGRectGetHeight(rect)/2.0f)+120.0f)]; 24 | 25 | [bezierPath addCurveToPoint:CGPointMake((CGRectGetWidth(rect)*0.22f)+171.0f, (CGRectGetHeight(rect)/2.0f)-84.0f) controlPoint1:CGPointMake(CGRectGetWidth(rect)*0.22f, (CGRectGetHeight(rect)/2.0f)+120.0f) controlPoint2:CGPointMake((CGRectGetWidth(rect)*0.22f)+109.0f, (CGRectGetHeight(rect)/2.0f)-92.0f)]; 26 | 27 | [bezierPath addCurveToPoint:CGPointMake((CGRectGetWidth(rect)*0.22f)+420.0f, (CGRectGetHeight(rect)/2.0f)-90.0f) controlPoint1:CGPointMake((CGRectGetWidth(rect)*0.22f)+233.0f, (CGRectGetHeight(rect)/2.0f)-75.0f) controlPoint2:CGPointMake((CGRectGetWidth(rect)*0.22f)+375.0f, (CGRectGetHeight(rect)/2.0f)+5.0f)]; 28 | 29 | CGContextAddPath(context, bezierPath.CGPath); 30 | 31 | CGContextSetStrokeColor(context, yellowColor); 32 | CGContextSetLineWidth(context, 5.0f); 33 | 34 | CGContextStrokePath(context); 35 | } 36 | 37 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/ClippingEOView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | #import "ColorFillView.h" 11 | 12 | @interface ClippingEOView : ColorFillView 13 | 14 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/ClippingEOView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | 8 | // Clip the context and draw. 9 | */ 10 | 11 | #import "ClippingEOView.h" 12 | 13 | @implementation ClippingEOView 14 | 15 | - (void)drawRect:(CGRect)rect 16 | { 17 | [super drawRect:rect]; 18 | 19 | CGContextRef context = UIGraphicsGetCurrentContext(); 20 | 21 | UIImage *image = [UIImage imageNamed:@"tombraider.png"]; 22 | 23 | CGRect centeredImageRect = CGRectMake((CGRectGetWidth(rect)/2.0f)-(image.size.width/2.0f), (CGRectGetHeight(rect)/2.0f)-(image.size.height/2.0f), image.size.width, image.size.height); 24 | 25 | UIBezierPath *outterBoundsClipping = [UIBezierPath bezierPathWithRoundedRect:centeredImageRect cornerRadius:20.0f]; 26 | 27 | CGRect innerRect = CGRectInset(centeredImageRect, 30.0f, 30.0f); 28 | 29 | UIBezierPath *innerBoundsClipping = [UIBezierPath bezierPathWithRoundedRect:innerRect cornerRadius:11.0f]; 30 | 31 | CGContextSaveGState(context); 32 | 33 | CGContextAddPath(context, outterBoundsClipping.CGPath); 34 | CGContextAddPath(context, innerBoundsClipping.CGPath); 35 | 36 | CGContextEOClip(context); 37 | 38 | [image drawInRect:centeredImageRect]; 39 | 40 | CGContextRestoreGState(context); 41 | } 42 | 43 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/ClippingView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | #import "ColorFillView.h" 11 | 12 | @interface ClippingView : ColorFillView 13 | 14 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/ClippingView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "ClippingView.h" 10 | 11 | @implementation ClippingView 12 | 13 | - (void)drawRect:(CGRect)rect 14 | { 15 | [super drawRect:rect]; 16 | 17 | CGContextRef context = UIGraphicsGetCurrentContext(); 18 | 19 | UIImage *image = [UIImage imageNamed:@"tombraider.png"]; 20 | 21 | CGRect centeredImageRect = CGRectMake((CGRectGetWidth(rect)/2.0f)-(image.size.width/2.0f), (CGRectGetHeight(rect)/2.0f)-(image.size.height/2.0f), image.size.width, image.size.height); 22 | 23 | UIBezierPath *clipPath = [UIBezierPath bezierPathWithRoundedRect:centeredImageRect cornerRadius:20.0f]; 24 | 25 | CGContextAddPath(context, clipPath.CGPath); 26 | CGContextClip(context); 27 | 28 | [image drawInRect:centeredImageRect]; 29 | } 30 | 31 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/ColorFillView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface ColorFillView : UIView 12 | 13 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/ColorFillView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "ColorFillView.h" 10 | #import 11 | 12 | @implementation ColorFillView 13 | 14 | - (void)drawRect:(CGRect)rect 15 | { 16 | [super drawRect:rect]; 17 | 18 | CGContextRef context = UIGraphicsGetCurrentContext(); 19 | CGFloat redColor[4] = {1.0f, 0.5f, 0.0f, 1.0f}; 20 | CGContextSetFillColor(context, redColor); 21 | CGContextFillRect(context, rect); 22 | } 23 | 24 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CoverFlowView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 27.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface CoverFlowView : UIScrollView 12 | 13 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CoverFlowView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 27.03.2012 7 | */ 8 | 9 | #import "CoverFlowView.h" 10 | 11 | @implementation CoverFlowView 12 | 13 | - (id)initWithFrame:(CGRect)frame 14 | { 15 | self = [super initWithFrame:frame]; 16 | 17 | if (nil != self) 18 | { 19 | // Initialization code 20 | } 21 | 22 | return self; 23 | } 24 | 25 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CoverFlowViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 27.03.2012 7 | */ 8 | 9 | #import 10 | #import "CoverFlowView.h" 11 | 12 | @interface CoverFlowViewController : UIViewController 13 | 14 | #pragma mark - Public Properties 15 | @property (nonatomic, strong, readwrite) IBOutlet CoverFlowView *view; 16 | 17 | @property (nonatomic, assign, readwrite) CGFloat coverSpacing; 18 | @property (nonatomic, assign, readwrite) CGFloat coverWidth; 19 | @property (nonatomic, assign, readwrite) CGFloat coverHeight; 20 | 21 | #pragma mark - Public Methods 22 | 23 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CoverFlowViewController.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 27.03.2012 7 | */ 8 | 9 | #import "CoverFlowViewController.h" 10 | #import "CoverFlowView.h" 11 | #import "CoverView.h" 12 | 13 | @interface CoverFlowViewController () 14 | 15 | #pragma mark - Private Properties 16 | @property (nonatomic, strong, readwrite) NSMutableArray *covers; 17 | @property (nonatomic, assign, readwrite) NSUInteger currentCoverIndex; 18 | 19 | #pragma mark - Private Methods 20 | // Debug: 21 | - (void)debug_setupCovers; 22 | - (void)debug_distributeCovers; 23 | 24 | @end 25 | 26 | @implementation CoverFlowViewController 27 | 28 | @synthesize currentCoverIndex = _currentCoverIndex; 29 | @synthesize covers = _covers; 30 | @synthesize coverSpacing = _coverSpacing; 31 | @synthesize coverWidth = _coverWidth; 32 | @synthesize coverHeight = _coverHeight; 33 | @dynamic view; 34 | 35 | #pragma mark - Initialization 36 | 37 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 38 | { 39 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 40 | 41 | if (nil != self) 42 | { 43 | self.title = @"Coverflow"; 44 | self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Dismiss" style:UIBarButtonItemStylePlain target:self action:@selector(dismissModalViewControllerAnimated:)]; 45 | 46 | self.currentCoverIndex = 0; 47 | self.coverSpacing = 115.0f; 48 | self.coverWidth = 150.0f; 49 | self.coverHeight = 150.0f; 50 | } 51 | 52 | return self; 53 | } 54 | 55 | #pragma mark - CoverFlow Logic 56 | 57 | - (void)animateToIndex:(NSUInteger)index 58 | { 59 | 60 | } 61 | 62 | - (void)snapToClosestIndex 63 | { 64 | 65 | } 66 | 67 | - (void)translateCoverFlow:(CGFloat)value 68 | { 69 | 70 | } 71 | 72 | - (CGFloat)scalingFactorForOrigin:(CGPoint)origin 73 | { 74 | return 0.0f; 75 | } 76 | 77 | - (NSUInteger)coverCount 78 | { 79 | return [self.covers count]; 80 | } 81 | 82 | - (CoverView *)currentCover 83 | { 84 | return [self.covers objectAtIndex:self.currentCoverIndex]; 85 | } 86 | 87 | #pragma mark - CoverFlow Setup 88 | 89 | - (void)debug_setupCovers 90 | { 91 | self.covers = [[NSMutableArray alloc] init]; 92 | 93 | CGFloat verticalCenter = (self.view.frame.size.height-self.coverHeight)/2.0f; 94 | 95 | [self.covers addObject:[[CoverView alloc] initWithFrame:CGRectMake(0.0f, verticalCenter, self.coverWidth, self.coverHeight)]]; 96 | [self.covers addObject:[[CoverView alloc] initWithFrame:CGRectMake(0.0f, verticalCenter, self.coverWidth, self.coverHeight)]]; 97 | [self.covers addObject:[[CoverView alloc] initWithFrame:CGRectMake(0.0f, verticalCenter, self.coverWidth, self.coverHeight)]]; 98 | [self.covers addObject:[[CoverView alloc] initWithFrame:CGRectMake(0.0f, verticalCenter, self.coverWidth, self.coverHeight)]]; 99 | [self.covers addObject:[[CoverView alloc] initWithFrame:CGRectMake(0.0f, verticalCenter, self.coverWidth, self.coverHeight)]]; 100 | 101 | self.view.contentSize = CGSizeMake([self coverCount]*(self.coverWidth+self.coverSpacing), self.coverHeight); 102 | 103 | [self debug_distributeCovers]; 104 | } 105 | 106 | - (void)debug_distributeCovers 107 | { 108 | NSUInteger coverCount = [self coverCount]; 109 | 110 | for (NSUInteger i = 0; i < coverCount; i++) 111 | { 112 | CoverView *cover = [self.covers objectAtIndex:i]; 113 | 114 | if (i == 0) 115 | { 116 | cover.frame = CGRectOffset(cover.frame, self.coverSpacing, 0.0f); 117 | } 118 | else 119 | { 120 | CoverView *previousCover = [self.covers objectAtIndex:i-1]; 121 | 122 | CGFloat horizontalOffsetInRelationToPrevious = previousCover.frame.origin.x + self.coverWidth + self.coverSpacing; 123 | cover.frame = CGRectOffset(cover.frame, horizontalOffsetInRelationToPrevious, 0.0f); 124 | } 125 | 126 | [self.view addSubview:cover]; 127 | } 128 | } 129 | 130 | #pragma mark - View lifecycle 131 | 132 | - (void)viewDidLoad 133 | { 134 | [super viewDidLoad]; 135 | 136 | self.view.decelerationRate = UIScrollViewDecelerationRateNormal/2.0f; 137 | 138 | [self debug_setupCovers]; 139 | } 140 | 141 | - (void)viewDidUnload 142 | { 143 | [super viewDidUnload]; 144 | } 145 | 146 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 147 | { 148 | return UIInterfaceOrientationIsLandscape(interfaceOrientation); 149 | } 150 | 151 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CoverFlowViewController~iPad.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1296 5 | 11D50b 6 | 2182 7 | 1138.32 8 | 568.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 1179 12 | 13 | 14 | IBProxyObject 15 | IBUIScrollView 16 | 17 | 18 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 19 | 20 | 21 | PluginDependencyRecalculationVersion 22 | 23 | 24 | 25 | 26 | IBFilesOwner 27 | IBIPadFramework 28 | 29 | 30 | IBFirstResponder 31 | IBIPadFramework 32 | 33 | 34 | 35 | 268 36 | {{0, 20}, {1024, 748}} 37 | 38 | 39 | 40 | _NS:9 41 | 42 | 3 43 | MQA 44 | 45 | YES 46 | YES 47 | 48 | 2 49 | 50 | 51 | 3 52 | 3 53 | 54 | 55 | IBUIScreenMetrics 56 | 57 | YES 58 | 59 | 60 | 61 | 62 | 63 | {768, 1024} 64 | {1024, 768} 65 | 66 | 67 | IBIPadFramework 68 | iPad Full Screen 69 | 70 | IBIPadFramework 71 | 72 | 73 | 74 | 75 | 76 | 77 | view 78 | 79 | 80 | 81 | 11 82 | 83 | 84 | 85 | delegate 86 | 87 | 88 | 89 | 10 90 | 91 | 92 | 93 | 94 | 95 | 0 96 | 97 | 98 | 99 | 100 | 101 | -1 102 | 103 | 104 | File's Owner 105 | 106 | 107 | -2 108 | 109 | 110 | 111 | 112 | 8 113 | 114 | 115 | 116 | 117 | 118 | 119 | CoverFlowViewController 120 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 121 | UIResponder 122 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 123 | CoverFlowView 124 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 125 | 126 | 127 | 128 | 129 | 130 | 11 131 | 132 | 133 | 134 | 135 | CoverFlowView 136 | UIScrollView 137 | 138 | IBProjectSource 139 | ./Classes/CoverFlowView.h 140 | 141 | 142 | 143 | CoverFlowViewController 144 | UIViewController 145 | 146 | view 147 | CoverFlowView 148 | 149 | 150 | view 151 | 152 | view 153 | CoverFlowView 154 | 155 | 156 | 157 | IBProjectSource 158 | ./Classes/CoverFlowViewController.h 159 | 160 | 161 | 162 | 163 | 0 164 | IBIPadFramework 165 | 166 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 167 | 168 | 169 | YES 170 | 3 171 | 1179 172 | 173 | 174 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CoverView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 27.03.2012 7 | */ 8 | 9 | #import 10 | 11 | enum CoverViewPresentationState { 12 | CoverViewNormal = 0, 13 | CoverViewIsPresented = 1 14 | }; 15 | 16 | @interface CoverView : UIView 17 | { 18 | enum CoverViewPresentationState _currentPresentationState; 19 | } 20 | 21 | #pragma mark - Public Properties 22 | 23 | #pragma mark - Public Methods 24 | - (void)presentCoverView; 25 | - (void)dismissCoverView; 26 | 27 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CoverView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 27.03.2012 7 | */ 8 | 9 | #import "CoverView.h" 10 | #import 11 | 12 | #define PRESENTATION_REVERSING_ENABLED 1 13 | 14 | #define DARK_COLOR [UIColor colorWithRed:0.5f green:0.0f blue:0.0f alpha:1.0f] 15 | #define LIGHT_COLOR [UIColor redColor] 16 | 17 | #define SCALING_FACTOR 1.5f 18 | 19 | @implementation CoverView 20 | 21 | - (id)initWithFrame:(CGRect)frame 22 | { 23 | self = [super initWithFrame:frame]; 24 | 25 | if (nil != self) 26 | { 27 | self.layer.contents = nil; 28 | self.layer.backgroundColor = DARK_COLOR.CGColor; 29 | self.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.bounds].CGPath; 30 | self.layer.shadowOpacity = 0.5f; 31 | self.layer.shadowOffset = CGSizeMake(0.0f, 0.0f); 32 | self.layer.shadowRadius = 5.0f; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 39 | { 40 | switch (_currentPresentationState) 41 | { 42 | case CoverViewNormal: 43 | [self presentCoverView]; 44 | break; 45 | 46 | case CoverViewIsPresented: 47 | [self dismissCoverView]; 48 | break; 49 | 50 | default: 51 | break; 52 | } 53 | } 54 | 55 | - (void)presentCoverView 56 | { 57 | CABasicAnimation *rotationAndScalingAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; 58 | 59 | CATransform3D rotateTransform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f); 60 | CATransform3D scaleTransform = CATransform3DMakeScale(SCALING_FACTOR, SCALING_FACTOR, 1.0f); 61 | CATransform3D combinedTransform = CATransform3DConcat(rotateTransform, scaleTransform); 62 | 63 | #if PRESENTATION_REVERSING_ENABLED 64 | CALayer *presentationLayer = (CALayer*)[self.layer presentationLayer]; 65 | rotationAndScalingAnimation.fromValue = [NSValue valueWithCATransform3D:[presentationLayer transform]]; 66 | #else 67 | rotationAndScalingAnimation.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; 68 | #endif 69 | 70 | rotationAndScalingAnimation.toValue = [NSValue valueWithCATransform3D:combinedTransform]; 71 | rotationAndScalingAnimation.duration = 1.0f; 72 | 73 | self.layer.transform = combinedTransform; 74 | 75 | [self.layer addAnimation:rotationAndScalingAnimation forKey:@"transform"]; 76 | self.layer.backgroundColor = LIGHT_COLOR.CGColor; 77 | 78 | CABasicAnimation *colorAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; 79 | 80 | #if PRESENTATION_REVERSING_ENABLED 81 | colorAnimation.fromValue = (id)[presentationLayer backgroundColor]; 82 | #else 83 | colorAnimation.fromValue = (id)DARK_COLOR.CGColor; 84 | #endif 85 | 86 | colorAnimation.toValue = (id)LIGHT_COLOR.CGColor; 87 | colorAnimation.fillMode = kCAFillModeForwards; 88 | colorAnimation.duration = rotationAndScalingAnimation.duration; 89 | colorAnimation.removedOnCompletion = YES; 90 | 91 | [self.layer addAnimation:colorAnimation forKey:@"presentAnimation"]; 92 | 93 | _currentPresentationState = CoverViewIsPresented; 94 | } 95 | 96 | - (void)animateAlongPath:(UIBezierPath *)path 97 | { 98 | CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 99 | anim.duration = 4.0f; 100 | anim.path = path.CGPath; 101 | anim.calculationMode = kCAAnimationLinear; 102 | [self.layer addAnimation:anim forKey:@"position"]; 103 | } 104 | 105 | - (void)dismissCoverView 106 | { 107 | CABasicAnimation *rotationAndScalingAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; 108 | 109 | #if PRESENTATION_REVERSING_ENABLED 110 | CALayer *presentationLayer = (CALayer*)[self.layer presentationLayer]; 111 | rotationAndScalingAnimation.fromValue = [NSValue valueWithCATransform3D:[presentationLayer transform]]; 112 | #else 113 | CATransform3D rotateTransform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f); 114 | CATransform3D scaleTransform = CATransform3DMakeScale(SCALING_FACTOR, SCALING_FACTOR, 1.0f); 115 | CATransform3D combinedTransform = CATransform3DConcat(rotateTransform, scaleTransform); 116 | 117 | rotationAndScalingAnimation.fromValue = [NSValue valueWithCATransform3D:combinedTransform]; 118 | #endif 119 | 120 | rotationAndScalingAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; 121 | rotationAndScalingAnimation.duration = 1.0f; 122 | 123 | self.layer.transform = CATransform3DIdentity; 124 | 125 | [self.layer addAnimation:rotationAndScalingAnimation forKey:@"transform"]; 126 | 127 | self.layer.backgroundColor = DARK_COLOR.CGColor; 128 | 129 | CABasicAnimation *colorAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"]; 130 | 131 | 132 | #if PRESENTATION_REVERSING_ENABLED 133 | colorAnimation.fromValue = (id)[presentationLayer backgroundColor]; 134 | #else 135 | colorAnimation.fromValue = (id)LIGHT_COLOR.CGColor; 136 | #endif 137 | 138 | colorAnimation.toValue = (id)DARK_COLOR.CGColor; 139 | colorAnimation.fillMode = kCAFillModeForwards; 140 | colorAnimation.duration = rotationAndScalingAnimation.duration; 141 | colorAnimation.removedOnCompletion = YES; 142 | 143 | [self.layer addAnimation:colorAnimation forKey:@"dismissAnimation"]; 144 | 145 | _currentPresentationState = CoverViewNormal; 146 | } 147 | 148 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CustomButton.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 02.04.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface CustomButton : UIButton 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CustomButton.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 02.04.2012 7 | */ 8 | 9 | #import "CustomButton.h" 10 | 11 | @interface CustomButton() 12 | 13 | - (UIImage *)_createStandardImage; 14 | 15 | @end 16 | 17 | @implementation CustomButton 18 | 19 | - (id)initWithFrame:(CGRect)frame 20 | { 21 | self = [super initWithFrame:frame]; 22 | 23 | if (nil != self) 24 | { 25 | [self setTitle:@"Custom Button" forState:UIControlStateNormal]; 26 | [self setBackgroundImage:[self _createStandardImage] forState:UIControlStateNormal]; 27 | } 28 | 29 | return self; 30 | } 31 | 32 | - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event 33 | { 34 | [self setNeedsDisplay]; 35 | return YES; 36 | } 37 | 38 | #define PADDING 10.5f 39 | 40 | - (UIImage *)_createStandardImage 41 | { 42 | // General Declarations 43 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 44 | 45 | // Retina awareness. 46 | if ([[UIScreen mainScreen] scale] > 0.0) 47 | { 48 | UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen] scale]); 49 | } 50 | else 51 | { 52 | UIGraphicsBeginImageContext(self.bounds.size); 53 | } 54 | 55 | CGContextRef context = UIGraphicsGetCurrentContext(); 56 | 57 | // Color Declarations 58 | UIColor *blue = [UIColor colorWithRed:0.14f green:0.57f blue:1.0f alpha:1.0f]; 59 | CGFloat blueHSBA[4]; 60 | [blue getHue: &blueHSBA[0] saturation: &blueHSBA[1] brightness: &blueHSBA[2] alpha: &blueHSBA[3]]; 61 | 62 | UIColor* darkBlue = [UIColor colorWithHue: blueHSBA[0] saturation: blueHSBA[1] brightness: 0.6 alpha: blueHSBA[3]]; 63 | UIColor* rgb0alpha40 = [UIColor colorWithRed: 0 green: 0 blue: 0 alpha: 0.4]; 64 | 65 | // Gradient Declarations 66 | NSArray* gradientColors = [NSArray arrayWithObjects: (id)blue.CGColor, (id)darkBlue.CGColor, nil]; 67 | CGFloat gradientLocations[] = {0.0f, 1.0f}; 68 | CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)gradientColors, gradientLocations); 69 | 70 | // Shadow Declarations 71 | CGColorRef arrowShadow = darkBlue.CGColor; 72 | CGSize arrowShadowOffset = CGSizeMake(0, -0); 73 | CGFloat arrowShadowBlurRadius = 4; 74 | 75 | // Rounded Rectangle Drawing 76 | UIBezierPath *roundedRectanglePath = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(PADDING, PADDING, CGRectGetWidth(self.bounds)-(PADDING*2.0f), CGRectGetHeight(self.bounds)-(PADDING*2.0f)) cornerRadius:4]; 77 | CGContextSaveGState(context); 78 | CGContextSetShadowWithColor(context, arrowShadowOffset, arrowShadowBlurRadius, arrowShadow); 79 | CGContextSetFillColorWithColor(context, arrowShadow); 80 | [roundedRectanglePath fill]; 81 | [roundedRectanglePath addClip]; 82 | CGContextDrawLinearGradient(context, gradient, CGPointMake(CGRectGetMinX(self.bounds), CGRectGetMinY(self.bounds)), CGPointMake(CGRectGetMinX(self.bounds), CGRectGetMaxY(self.bounds)), 0); 83 | CGContextRestoreGState(context); 84 | 85 | [rgb0alpha40 setStroke]; 86 | roundedRectanglePath.lineWidth = 0.5f; 87 | [roundedRectanglePath stroke]; 88 | 89 | // Cleanup 90 | CGGradientRelease(gradient); 91 | CGColorSpaceRelease(colorSpace); 92 | 93 | return UIGraphicsGetImageFromCurrentImageContext(); 94 | } 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CustomButtonView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 02.04.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface CustomButtonView : UIView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/CustomButtonView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 02.04.2012 7 | */ 8 | 9 | #import "CustomButtonView.h" 10 | #import "CustomButton.h" 11 | 12 | @implementation CustomButtonView 13 | 14 | - (id)initWithFrame:(CGRect)frame 15 | { 16 | self = [super initWithFrame:frame]; 17 | if (nil != self) 18 | { 19 | CustomButton *button = [[CustomButton alloc] initWithFrame:CGRectMake(20.0f, 20.0f, 200.0f, 90.0f)]; 20 | [self addSubview:button]; 21 | } 22 | return self; 23 | } 24 | 25 | - (void)drawRect:(CGRect)rect 26 | { 27 | [super drawRect:rect]; 28 | 29 | CGContextRef context = UIGraphicsGetCurrentContext(); 30 | CGFloat redColor[4] = {1.0f, 0.5f, 0.0f, 1.0f}; 31 | CGContextSetFillColor(context, redColor); 32 | CGContextFillRect(context, rect); 33 | } 34 | 35 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/GradientFillLinearView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface GradientFillLinearView : UIView 12 | 13 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/GradientFillLinearView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "GradientFillLinearView.h" 10 | #import 11 | 12 | @implementation GradientFillLinearView 13 | 14 | - (void)drawRect:(CGRect)rect 15 | { 16 | [super drawRect:rect]; 17 | CGContextRef context = UIGraphicsGetCurrentContext(); 18 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 19 | 20 | CGFloat colors[8] = {33.0f/255.0f, 102.0f/255.0f, 133.0f/255.0f, 1.0f, // Dark Blue Color 21 | 138.0f/255.0f, 206.0f/255.0f, 236.0f/255.0f, 1.0f}; // Light Blue Color 22 | 23 | CGFloat locations[2] = {0.0f, 1.0f}; 24 | 25 | CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, 2); 26 | 27 | CGContextDrawLinearGradient(context, gradient, CGPointMake(0.0f, 0.0f), CGPointMake(0.0f, CGRectGetHeight(rect)), kCGGradientDrawsAfterEndLocation|kCGGradientDrawsBeforeStartLocation); 28 | 29 | CGGradientRelease(gradient); 30 | CGColorSpaceRelease(colorSpace); 31 | } 32 | 33 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/GradientFillRadialView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface GradientFillRadialView : UIView 12 | 13 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/GradientFillRadialView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "GradientFillRadialView.h" 10 | 11 | @implementation GradientFillRadialView 12 | 13 | - (void)drawRect:(CGRect)rect 14 | { 15 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 16 | CGContextRef context = UIGraphicsGetCurrentContext(); 17 | 18 | UIColor *blue = [UIColor colorWithRed:0.14f green:0.57f blue:1.0f alpha:1.0f]; 19 | UIColor *darkBlue = [UIColor colorWithRed:0.084f green:0.342f blue:0.6f alpha:1.0f]; 20 | 21 | NSArray *gradientColors = [NSArray arrayWithObjects:(id)blue.CGColor, (id)darkBlue.CGColor, nil]; 22 | 23 | CGFloat gradientLocations[] = {0.0f, 1.0f}; 24 | 25 | // Note: ARC does not support toll-free-bridging, thus we need to do it manually. 26 | CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)gradientColors, gradientLocations); 27 | 28 | CGContextDrawRadialGradient(context, gradient, 29 | CGPointMake(CGRectGetWidth(rect)/2.0f, CGRectGetHeight(rect)/2.0f), // Start Center Point 30 | 200.0f, // Start Center Radius 31 | CGPointMake(CGRectGetWidth(rect)/2.0f, CGRectGetHeight(rect)/2.0f), // End Center Point 32 | 400.0f, // End Center Radius 33 | kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation); 34 | 35 | CGColorSpaceRelease(colorSpace); 36 | } 37 | 38 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/ImageView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | #import "ColorFillView.h" 11 | 12 | @interface ImageView : ColorFillView 13 | 14 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/ImageView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "ImageView.h" 10 | 11 | @implementation ImageView 12 | 13 | - (void)drawRect:(CGRect)rect 14 | { 15 | [super drawRect:rect]; 16 | 17 | UIImage *image = [UIImage imageNamed:@"tombraider.png"]; 18 | 19 | CGRect centeredImageRect = CGRectMake((CGRectGetWidth(rect)/2.0f)-(image.size.width/2.0f), (CGRectGetHeight(rect)/2.0f)-(image.size.height/2.0f), image.size.width, image.size.height); 20 | [image drawInRect:centeredImageRect]; 21 | } 22 | 23 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/PathsView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | #import "GradientFillRadialView.h" 11 | 12 | @interface PathsView : GradientFillRadialView 13 | 14 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/PathsView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "PathsView.h" 10 | 11 | @implementation PathsView 12 | 13 | - (void)drawRect:(CGRect)rect 14 | { 15 | [super drawRect:rect]; 16 | 17 | CGContextRef context = UIGraphicsGetCurrentContext(); 18 | CGMutablePathRef triangePath = CGPathCreateMutable(); 19 | 20 | CGFloat yellowColor[4] = {1.0f, 1.0f, 0.0f, 1.0f}; 21 | 22 | CGPathMoveToPoint(triangePath, NULL, CGRectGetWidth(rect)/2.0f, CGRectGetHeight(rect)*0.2f); 23 | CGPathAddLineToPoint(triangePath, NULL, CGRectGetWidth(rect)/4.0f, CGRectGetHeight(rect)*0.7f); 24 | CGPathAddLineToPoint(triangePath, NULL, CGRectGetWidth(rect)*3.0f/4.0f, CGRectGetHeight(rect)*0.7f); 25 | 26 | CGContextAddPath(context, triangePath); 27 | 28 | CGContextClosePath(context); 29 | 30 | CGContextSetLineWidth(context, 5.0f); 31 | CGContextSetStrokeColor(context, yellowColor); 32 | CGContextSetShadow(context, CGSizeMake(3.0f, 3.0f), 4.0f); 33 | 34 | CGContextStrokePath(context); 35 | 36 | CGPathRelease(triangePath); 37 | } 38 | 39 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/TapAndMoveView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface TapAndMoveView : UIView 12 | 13 | #pragma mark - Public Properties 14 | @property (nonatomic, strong, readonly) UIView *redBox; 15 | 16 | #pragma mark - Public Methods 17 | // Note: Tap recognition is implemented in the associated ViewController! In our case: The DetailViewController. 18 | - (void)didTapView; 19 | 20 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/TapAndMoveView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 26.03.2012 7 | */ 8 | 9 | #import "TapAndMoveView.h" 10 | 11 | enum RedBoxPosition 12 | { 13 | RedBoxPositionIsLeft = 0, 14 | RedBoxPositionIsRight = 1 15 | }; 16 | 17 | @interface TapAndMoveView() 18 | { 19 | @private 20 | enum RedBoxPosition _currentPosition; 21 | } 22 | 23 | #pragma mark - Private Propertes 24 | @property (nonatomic, strong, readwrite) UIView *redBox; 25 | 26 | #pragma mark - Private Methods 27 | 28 | @end 29 | 30 | @implementation TapAndMoveView 31 | 32 | @synthesize redBox = _redBox; 33 | 34 | #pragma mark - Initialization 35 | 36 | - (id)init 37 | { 38 | self = [super init]; 39 | 40 | if (nil != self) 41 | { 42 | [self commonInitializer]; 43 | } 44 | 45 | return self; 46 | } 47 | 48 | - (id)initWithFrame:(CGRect)frame 49 | { 50 | self = [super initWithFrame:frame]; 51 | 52 | if (nil != self) 53 | { 54 | [self commonInitializer]; 55 | } 56 | 57 | return self; 58 | } 59 | 60 | - (id)initWithCoder:(NSCoder *)aDecoder 61 | { 62 | self = [super initWithCoder:aDecoder]; 63 | 64 | if (nil != self) 65 | { 66 | [self commonInitializer]; 67 | } 68 | 69 | return self; 70 | } 71 | 72 | - (void)commonInitializer 73 | { 74 | _currentPosition = RedBoxPositionIsLeft; 75 | 76 | self.backgroundColor = [UIColor whiteColor]; 77 | 78 | self.redBox = [[UIView alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 50.0f, 50.0f)]; 79 | self.redBox.backgroundColor = [UIColor redColor]; 80 | 81 | [self addSubview:self.redBox]; 82 | } 83 | 84 | #pragma mark - Actions 85 | 86 | - (void)didTapView 87 | { 88 | [UIView animateWithDuration:1.0f animations:^ 89 | { 90 | if (_currentPosition == RedBoxPositionIsLeft) 91 | { 92 | self.redBox.frame = CGRectOffset(self.redBox.frame, 550.0f, 0.0f); 93 | _currentPosition = RedBoxPositionIsRight; 94 | } 95 | else 96 | { 97 | self.redBox.frame = CGRectOffset(self.redBox.frame, -550.0f, 0.0f); 98 | _currentPosition = RedBoxPositionIsLeft; 99 | } 100 | }]; 101 | } 102 | 103 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/TapAndMoveViewWithHitTest.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 01.04.2012 7 | */ 8 | 9 | #import 10 | 11 | @interface TapAndMoveViewWithHitTest : UIView 12 | 13 | #pragma mark - Public Properties 14 | @property (nonatomic, strong, readonly) UIView *redBox; 15 | 16 | #pragma mark - Public Methods 17 | // Note: Hit testing is implemented in the associated ViewController! In our case: The DetailViewController. 18 | - (void)didTapRedBox; 19 | 20 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/demos/TapAndMoveViewWithHitTest.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011, Nehira.com 3 | * All rights reserved. 4 | * 5 | * @author Philip Kluz 6 | * @date 01.04.2012 7 | */ 8 | 9 | #import "TapAndMoveViewWithHitTest.h" 10 | #import 11 | 12 | enum RedBoxPosition 13 | { 14 | RedBoxPositionIsTopLeft = 0, 15 | RedBoxPositionIsTopRight = 1, 16 | RedBoxPositionIsBottomRight = 2, 17 | RedBoxPositionIsBottomLeft = 3 18 | }; 19 | 20 | @interface TapAndMoveViewWithHitTest() 21 | { 22 | @private 23 | enum RedBoxPosition _currentPosition; 24 | } 25 | 26 | #pragma mark - Private Propertes 27 | @property (nonatomic, strong, readwrite) UIView *redBox; 28 | 29 | #pragma mark - Private Methods 30 | 31 | @end 32 | 33 | @implementation TapAndMoveViewWithHitTest 34 | 35 | @synthesize redBox = _redBox; 36 | 37 | #pragma mark - Initialization 38 | 39 | - (id)init 40 | { 41 | self = [super init]; 42 | 43 | if (nil != self) 44 | { 45 | [self commonInitializer]; 46 | } 47 | 48 | return self; 49 | } 50 | 51 | - (id)initWithFrame:(CGRect)frame 52 | { 53 | self = [super initWithFrame:frame]; 54 | 55 | if (nil != self) 56 | { 57 | [self commonInitializer]; 58 | } 59 | 60 | return self; 61 | } 62 | 63 | - (id)initWithCoder:(NSCoder *)aDecoder 64 | { 65 | self = [super initWithCoder:aDecoder]; 66 | 67 | if (nil != self) 68 | { 69 | [self commonInitializer]; 70 | } 71 | 72 | return self; 73 | } 74 | 75 | - (void)commonInitializer 76 | { 77 | _currentPosition = RedBoxPositionIsTopLeft; 78 | 79 | self.backgroundColor = [UIColor whiteColor]; 80 | 81 | self.redBox = [[UIView alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 50.0f, 50.0f)]; 82 | self.redBox.backgroundColor = [UIColor redColor]; 83 | 84 | [self addSubview:self.redBox]; 85 | } 86 | 87 | #pragma mark - Actions 88 | 89 | - (void)didTapRedBox 90 | { 91 | [UIView animateWithDuration:1.0f animations:^ 92 | { 93 | switch (_currentPosition) 94 | { 95 | case RedBoxPositionIsTopLeft: 96 | self.redBox.frame = CGRectOffset(self.redBox.frame, 550.0f, 0.0f); 97 | self.redBox.backgroundColor = [UIColor yellowColor]; 98 | _currentPosition = RedBoxPositionIsTopRight; 99 | break; 100 | 101 | case RedBoxPositionIsTopRight: 102 | { 103 | CGRect expandedRect = CGRectInset(self.redBox.frame, -50.0f, -50.0f); 104 | CGRect translatedExpandedRect = CGRectOffset(expandedRect, -50.0f, 500.0f); 105 | self.redBox.frame = translatedExpandedRect; 106 | 107 | self.redBox.backgroundColor = [UIColor blueColor]; 108 | _currentPosition = RedBoxPositionIsBottomRight; 109 | } 110 | break; 111 | 112 | case RedBoxPositionIsBottomRight: 113 | { 114 | CGRect contractedRect = CGRectInset(self.redBox.frame, 50.0f, 50.0f); 115 | CGRect translatedExpandedRect = CGRectOffset(contractedRect, -500.0f, 50.0f); 116 | self.redBox.frame = translatedExpandedRect; 117 | 118 | self.redBox.backgroundColor = [UIColor greenColor]; 119 | _currentPosition = RedBoxPositionIsBottomLeft; 120 | } 121 | break; 122 | 123 | case RedBoxPositionIsBottomLeft: 124 | self.redBox.frame = CGRectOffset(self.redBox.frame, 0.0f, -550.0f); 125 | self.redBox.backgroundColor = [UIColor redColor]; 126 | _currentPosition = RedBoxPositionIsTopLeft; 127 | break; 128 | 129 | default: 130 | break; 131 | } 132 | }]; 133 | } 134 | 135 | @end -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/en.lproj/MasterViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1280 5 | 11C25 6 | 1919 7 | 1138.11 8 | 566.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 916 12 | 13 | 14 | IBProxyObject 15 | IBUITableView 16 | 17 | 18 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 19 | 20 | 21 | PluginDependencyRecalculationVersion 22 | 23 | 24 | 25 | 26 | IBFilesOwner 27 | IBIPadFramework 28 | 29 | 30 | IBFirstResponder 31 | IBIPadFramework 32 | 33 | 34 | 35 | 274 36 | {{0, 20}, {320, 832}} 37 | 38 | 39 | 40 | 3 41 | MQA 42 | 43 | YES 44 | 45 | 2 46 | 47 | 48 | IBUISplitViewMasterSimulatedSizeMetrics 49 | 50 | YES 51 | 52 | 53 | 54 | 55 | 56 | {320, 852} 57 | {320, 768} 58 | 59 | 60 | IBIPadFramework 61 | Master 62 | IBUISplitViewController 63 | 64 | IBUISplitViewControllerContentSizeLocation 65 | IBUISplitViewControllerContentSizeLocationMaster 66 | 67 | 68 | IBIPadFramework 69 | YES 70 | 1 71 | 0 72 | YES 73 | 44 74 | 22 75 | 22 76 | 77 | 78 | 79 | 80 | 81 | 82 | view 83 | 84 | 85 | 86 | 3 87 | 88 | 89 | 90 | dataSource 91 | 92 | 93 | 94 | 4 95 | 96 | 97 | 98 | delegate 99 | 100 | 101 | 102 | 5 103 | 104 | 105 | 106 | 107 | 108 | 0 109 | 110 | 111 | 112 | 113 | 114 | -1 115 | 116 | 117 | File's Owner 118 | 119 | 120 | -2 121 | 122 | 123 | 124 | 125 | 2 126 | 127 | 128 | 129 | 130 | 131 | 132 | MasterViewController 133 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 134 | UIResponder 135 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 136 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 137 | 138 | 139 | 140 | 141 | 142 | 5 143 | 144 | 145 | 146 | 147 | MasterViewController 148 | UITableViewController 149 | 150 | IBProjectSource 151 | ./Classes/MasterViewController.h 152 | 153 | 154 | 155 | 156 | 0 157 | IBIPadFramework 158 | YES 159 | 3 160 | 916 161 | 162 | 163 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CoreTechniques 4 | // 5 | // Created by Philip Kluz on 3/26/12. 6 | // Copyright (c) 2012 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/CoreTechniques/CoreTechniques/tombraider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pkluz/PKCoreTechniques/24b7b4da212aa95af7408df4102cb87164282ee1/src/CoreTechniques/CoreTechniques/tombraider.png --------------------------------------------------------------------------------