Browse files

first commit

  • Loading branch information...
0 parents commit 770c1b03067cc7df6eb1c68548411dedf12592a2 @malcommac committed Jun 4, 2012
BIN DMScrollingTicker/.DS_Store
Binary file not shown.
310 DMScrollingTicker/DMScrollingTicker.xcodeproj/project.pbxproj
@@ -0,0 +1,310 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ D9CCFE4B1576562B0028EC47 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9CCFE4A1576562B0028EC47 /* UIKit.framework */; };
+ D9CCFE4D1576562B0028EC47 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9CCFE4C1576562B0028EC47 /* Foundation.framework */; };
+ D9CCFE4F1576562B0028EC47 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9CCFE4E1576562B0028EC47 /* CoreGraphics.framework */; };
+ D9CCFE551576562B0028EC47 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D9CCFE531576562B0028EC47 /* InfoPlist.strings */; };
+ D9CCFE571576562B0028EC47 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D9CCFE561576562B0028EC47 /* main.m */; };
+ D9CCFE5B1576562B0028EC47 /* RSAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D9CCFE5A1576562B0028EC47 /* RSAppDelegate.m */; };
+ D9CCFE5E1576562B0028EC47 /* RSViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9CCFE5D1576562B0028EC47 /* RSViewController.m */; };
+ D9CCFE611576562B0028EC47 /* RSViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9CCFE5F1576562B0028EC47 /* RSViewController.xib */; };
+ D9CCFE69157656360028EC47 /* DMScrollingTicker.m in Sources */ = {isa = PBXBuildFile; fileRef = D9CCFE68157656360028EC47 /* DMScrollingTicker.m */; };
+ D9CCFE731576679B0028EC47 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9CCFE721576679B0028EC47 /* QuartzCore.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ D9CCFE461576562B0028EC47 /* DMScrollingTicker.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DMScrollingTicker.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ D9CCFE4A1576562B0028EC47 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ D9CCFE4C1576562B0028EC47 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ D9CCFE4E1576562B0028EC47 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ D9CCFE521576562B0028EC47 /* DMScrollingTicker-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DMScrollingTicker-Info.plist"; sourceTree = "<group>"; };
+ D9CCFE541576562B0028EC47 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ D9CCFE561576562B0028EC47 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ D9CCFE581576562B0028EC47 /* DMScrollingTicker-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DMScrollingTicker-Prefix.pch"; sourceTree = "<group>"; };
+ D9CCFE591576562B0028EC47 /* RSAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RSAppDelegate.h; sourceTree = "<group>"; };
+ D9CCFE5A1576562B0028EC47 /* RSAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RSAppDelegate.m; sourceTree = "<group>"; };
+ D9CCFE5C1576562B0028EC47 /* RSViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RSViewController.h; sourceTree = "<group>"; };
+ D9CCFE5D1576562B0028EC47 /* RSViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RSViewController.m; sourceTree = "<group>"; };
+ D9CCFE601576562B0028EC47 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/RSViewController.xib; sourceTree = "<group>"; };
+ D9CCFE67157656360028EC47 /* DMScrollingTicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DMScrollingTicker.h; sourceTree = "<group>"; };
+ D9CCFE68157656360028EC47 /* DMScrollingTicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DMScrollingTicker.m; sourceTree = "<group>"; };
+ D9CCFE721576679B0028EC47 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ D9CCFE431576562B0028EC47 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D9CCFE731576679B0028EC47 /* QuartzCore.framework in Frameworks */,
+ D9CCFE4B1576562B0028EC47 /* UIKit.framework in Frameworks */,
+ D9CCFE4D1576562B0028EC47 /* Foundation.framework in Frameworks */,
+ D9CCFE4F1576562B0028EC47 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ D9CCFE3B1576562B0028EC47 = {
+ isa = PBXGroup;
+ children = (
+ D9CCFE501576562B0028EC47 /* Example */,
+ D9CCFE491576562B0028EC47 /* Frameworks */,
+ D9CCFE471576562B0028EC47 /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ D9CCFE471576562B0028EC47 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ D9CCFE461576562B0028EC47 /* DMScrollingTicker.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ D9CCFE491576562B0028EC47 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ D9CCFE721576679B0028EC47 /* QuartzCore.framework */,
+ D9CCFE4A1576562B0028EC47 /* UIKit.framework */,
+ D9CCFE4C1576562B0028EC47 /* Foundation.framework */,
+ D9CCFE4E1576562B0028EC47 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ D9CCFE501576562B0028EC47 /* Example */ = {
+ isa = PBXGroup;
+ children = (
+ D9CCFE591576562B0028EC47 /* RSAppDelegate.h */,
+ D9CCFE5A1576562B0028EC47 /* RSAppDelegate.m */,
+ D9CCFE741576B2860028EC47 /* Scrolling Ticker Class */,
+ D9CCFE751576B28D0028EC47 /* Application View Controllers */,
+ D9CCFE511576562B0028EC47 /* Supporting Files */,
+ );
+ name = Example;
+ path = test;
+ sourceTree = "<group>";
+ };
+ D9CCFE511576562B0028EC47 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ D9CCFE521576562B0028EC47 /* DMScrollingTicker-Info.plist */,
+ D9CCFE531576562B0028EC47 /* InfoPlist.strings */,
+ D9CCFE561576562B0028EC47 /* main.m */,
+ D9CCFE581576562B0028EC47 /* DMScrollingTicker-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ D9CCFE741576B2860028EC47 /* Scrolling Ticker Class */ = {
+ isa = PBXGroup;
+ children = (
+ D9CCFE67157656360028EC47 /* DMScrollingTicker.h */,
+ D9CCFE68157656360028EC47 /* DMScrollingTicker.m */,
+ );
+ name = "Scrolling Ticker Class";
+ sourceTree = "<group>";
+ };
+ D9CCFE751576B28D0028EC47 /* Application View Controllers */ = {
+ isa = PBXGroup;
+ children = (
+ D9CCFE5C1576562B0028EC47 /* RSViewController.h */,
+ D9CCFE5D1576562B0028EC47 /* RSViewController.m */,
+ D9CCFE5F1576562B0028EC47 /* RSViewController.xib */,
+ );
+ name = "Application View Controllers";
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ D9CCFE451576562B0028EC47 /* DMScrollingTicker */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D9CCFE641576562B0028EC47 /* Build configuration list for PBXNativeTarget "DMScrollingTicker" */;
+ buildPhases = (
+ D9CCFE421576562B0028EC47 /* Sources */,
+ D9CCFE431576562B0028EC47 /* Frameworks */,
+ D9CCFE441576562B0028EC47 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = DMScrollingTicker;
+ productName = test;
+ productReference = D9CCFE461576562B0028EC47 /* DMScrollingTicker.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ D9CCFE3D1576562B0028EC47 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ CLASSPREFIX = RS;
+ LastUpgradeCheck = 0430;
+ };
+ buildConfigurationList = D9CCFE401576562B0028EC47 /* Build configuration list for PBXProject "DMScrollingTicker" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = D9CCFE3B1576562B0028EC47;
+ productRefGroup = D9CCFE471576562B0028EC47 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ D9CCFE451576562B0028EC47 /* DMScrollingTicker */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ D9CCFE441576562B0028EC47 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D9CCFE551576562B0028EC47 /* InfoPlist.strings in Resources */,
+ D9CCFE611576562B0028EC47 /* RSViewController.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ D9CCFE421576562B0028EC47 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D9CCFE571576562B0028EC47 /* main.m in Sources */,
+ D9CCFE5B1576562B0028EC47 /* RSAppDelegate.m in Sources */,
+ D9CCFE5E1576562B0028EC47 /* RSViewController.m in Sources */,
+ D9CCFE69157656360028EC47 /* DMScrollingTicker.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ D9CCFE531576562B0028EC47 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ D9CCFE541576562B0028EC47 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+ D9CCFE5F1576562B0028EC47 /* RSViewController.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ D9CCFE601576562B0028EC47 /* en */,
+ );
+ name = RSViewController.xib;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ D9CCFE621576562B0028EC47 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 5.1;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ D9CCFE631576562B0028EC47 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ CLANG_ENABLE_OBJC_ARC = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 5.1;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ D9CCFE651576562B0028EC47 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "test/DMScrollingTicker-Prefix.pch";
+ INFOPLIST_FILE = "test/DMScrollingTicker-Info.plist";
+ PRODUCT_NAME = DMScrollingTicker;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ D9CCFE661576562B0028EC47 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "test/DMScrollingTicker-Prefix.pch";
+ INFOPLIST_FILE = "test/DMScrollingTicker-Info.plist";
+ PRODUCT_NAME = DMScrollingTicker;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ D9CCFE401576562B0028EC47 /* Build configuration list for PBXProject "DMScrollingTicker" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D9CCFE621576562B0028EC47 /* Debug */,
+ D9CCFE631576562B0028EC47 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ D9CCFE641576562B0028EC47 /* Build configuration list for PBXNativeTarget "DMScrollingTicker" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D9CCFE651576562B0028EC47 /* Debug */,
+ D9CCFE661576562B0028EC47 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = D9CCFE3D1576562B0028EC47 /* Project object */;
+}
7 DMScrollingTicker/DMScrollingTicker.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:DMScrollingTicker.xcodeproj">
+ </FileRef>
+</Workspace>
BIN ...codeproj/project.xcworkspace/xcuserdata/malcom.xcuserdatad/UserInterfaceState.xcuserstate
Binary file not shown.
10 ....xcodeproj/project.xcworkspace/xcuserdata/malcom.xcuserdatad/WorkspaceSettings.xcsettings
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key>
+ <true/>
+ <key>SnapshotAutomaticallyBeforeSignificantChanges</key>
+ <false/>
+</dict>
+</plist>
5 ...ScrollingTicker.xcodeproj/xcuserdata/malcom.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+ type = "1"
+ version = "1.0">
+</Bucket>
85 ...ollingTicker.xcodeproj/xcuserdata/malcom.xcuserdatad/xcschemes/DMScrollingTicker.xcscheme
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+ version = "1.3">
+ <BuildAction
+ parallelizeBuildables = "YES"
+ buildImplicitDependencies = "YES">
+ <BuildActionEntries>
+ <BuildActionEntry
+ buildForTesting = "YES"
+ buildForRunning = "YES"
+ buildForProfiling = "YES"
+ buildForArchiving = "YES"
+ buildForAnalyzing = "YES">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "D9CCFE451576562B0028EC47"
+ BuildableName = "DMScrollingTicker.app"
+ BlueprintName = "DMScrollingTicker"
+ ReferencedContainer = "container:DMScrollingTicker.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ buildConfiguration = "Debug">
+ <Testables>
+ </Testables>
+ <MacroExpansion>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "D9CCFE451576562B0028EC47"
+ BuildableName = "DMScrollingTicker.app"
+ BlueprintName = "DMScrollingTicker"
+ ReferencedContainer = "container:DMScrollingTicker.xcodeproj">
+ </BuildableReference>
+ </MacroExpansion>
+ </TestAction>
+ <LaunchAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Debug"
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ allowLocationSimulation = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "D9CCFE451576562B0028EC47"
+ BuildableName = "DMScrollingTicker.app"
+ BlueprintName = "DMScrollingTicker"
+ ReferencedContainer = "container:DMScrollingTicker.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release"
+ debugDocumentVersioning = "YES">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "D9CCFE451576562B0028EC47"
+ BuildableName = "DMScrollingTicker.app"
+ BlueprintName = "DMScrollingTicker"
+ ReferencedContainer = "container:DMScrollingTicker.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
22 ...crollingTicker.xcodeproj/xcuserdata/malcom.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>SchemeUserState</key>
+ <dict>
+ <key>DMScrollingTicker.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <key>SuppressBuildableAutocreation</key>
+ <dict>
+ <key>D9CCFE451576562B0028EC47</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>
38 DMScrollingTicker/test/DMScrollingTicker-Info.plist
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>com.romastanze.${PRODUCT_NAME:rfc1034identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+</dict>
+</plist>
14 DMScrollingTicker/test/DMScrollingTicker-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'test' target in the 'test' project
+//
+
+#import <Availability.h>
+
+#ifndef __IPHONE_4_0
+#warning "This project uses features only available in iOS SDK 4.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import <UIKit/UIKit.h>
+ #import <Foundation/Foundation.h>
+#endif
115 DMScrollingTicker/test/DMScrollingTicker.h
@@ -0,0 +1,115 @@
+//
+// DMScrollingTicker.m
+//
+// Created by Daniele Margutti on 5/15/12.
+// Copyright (c) 2012 Daniele Margutti. All rights reserved.
+// Email: daniele.margutti@gmail.com
+// Website: http://www.danielem.org
+// License: MIT License
+// Put this line in your about box: 'Portions LPScrollingTicker by Daniele Margutti http://www.danielem.org'
+
+/*
+ DMScrollingTicker is an advanced horizontal scroll ticker class made in Objective-C for iOS.
+ It doesn't use standard NSTimer to perform animations but instead Quartz Layers.
+ It allows to load any set of UIView subclasses and add to the scrolling queue with a simple call.
+ You can pick between two modes:
+ - standard mode: you will pass your list of UIViews and begin animation (all views will be adjusted and loaded at startup time)
+ - lazy mode: you will pass only UIView's CGSizes array and a datasource blocks handler and DMScrollingView will load each
+ view only when needed (and remove them when not used). It may be useful when you have lots of ticker elements
+ (here called subviews) and you pay attention to the memory usage
+ */
+
+#import <UIKit/UIKit.h>
+
+
+// This is the scrolling ticker UIView's lazy loading data source handler. You must return the indexOfViewToShow UIView subclass to show
+typedef UIView* (^LPScrollingTickerLazyLoadingHandler)(NSUInteger indexOfViewToShow);
+// This is the handler called at the end of each loop.
+typedef void (^LPScrollingTickerAnimationCompletition)(NSUInteger loopsDone, BOOL isFinished);
+
+
+enum {
+ LPScrollingDirection_FromLeft = 0, // Animation starts from left and continues to the right side
+ LPScrollingDirection_FromRight = 1 // Animation starts from right and continues back to the left side
+}; typedef NSUInteger LPScrollingDirection;
+
+@interface DMScrollingTicker : UIView {
+
+}
+
+@property (readonly) BOOL isAnimating; // YES if an animation is currently in progress
+@property (readonly) NSUInteger loopsDone; // Number of loops made since the beginning of the animation
+
+@property (nonatomic,readonly) CGSize contentSize; // Total size of the scrolling content subviews
+@property (readonly) CGRect visibleContentRect; // Currently visible content rect
+
+
+// Allocation method
+- (id)initWithFrame:(CGRect)frame;
+
+/*
+ Begin a new animation by loading subviews only when request and release them when not visible.
+ - dataSource = You should return the correct indexOfViewToShow UIView subview inside the dataSource block handler.
+ - subviewsSizes = Return an NSArray of NSValues (CGSize) contains the size of each element to show.
+ This is required to make a correct layout of the scroller before start the animation.
+ - scrollDirection = Pick between LPScrollingDirection_FromLeft (animation starts from left and continues to the right side)
+ or LPScrollingDirection_FromRight (animation starts from right and continues back to the left side)
+ - scrollSpeed = scrolling speed in pixels per second (0 = use defaults scrool speed, 50 p/s)
+ - loops = The number of animations loops to make (0 means infinite)
+ - completition = Called every when the animation ends a loop animation.
+ */
+- (void) beginAnimationWithLazyViews:(LPScrollingTickerLazyLoadingHandler) dataSource
+ itemsSizes:(NSArray *) subviewsSizes
+ direction:(LPScrollingDirection) scrollDirection
+ speed:(CGFloat) scrollSpeed
+ loops:(NSUInteger) loops
+ completition:(LPScrollingTickerAnimationCompletition) completition;
+
+/*
+ Begin a new animation using passed subviews items
+ - subviewsItems = UIViews or any subclass you want to load inside the scrolling ticker
+ - scrollDirection = Pick between LPScrollingDirection_FromLeft (animation starts from left and continues to the right side)
+ or LPScrollingDirection_FromRight (animation starts from right and continues back to the left side)
+ - scrollSpeed = scrolling speed in pixels per second (0 = use defaults scrool speed, 50 p/s)
+ - loops = The number of animations loops to make (0 means infinite)
+ - completition = Called every when the animation ends a loop animation.
+ */
+- (void) beginAnimationWithViews:(NSArray *) subviewsItems
+ direction:(LPScrollingDirection) scrollDirection
+ speed:(CGFloat) scrollSpeed
+ loops:(NSUInteger) loops
+ completition:(LPScrollingTickerAnimationCompletition) completition;
+
+/*
+ Begin a new endless animation with scrollDirection = LPScrollingDirection_FromRight and default scroolSpeed
+ */
+- (void) beginAnimationWithViews:(NSArray *) subviewsItems;
+
+// End an active animation and set the scroll
+- (void) endAnimation:(BOOL) animated;
+
+// Pause an active animation
+- (void) pauseAnimation;
+
+// Resume a paused animation
+- (void) resumeAnimation;
+
+// Manual scrolling ticker offset value
+- (void) scrollToOffset:(CGPoint) offsetPoint animate:(BOOL) animated;
+- (void) scrollToStart:(BOOL) animated;
+
+@end
+
+
+// This is a an example of scrolling ticker subview. It's useful to show a title label + description label
+
+@interface LPScrollingTickerLabelItem : UIView {
+
+}
+
+@property (readonly) UILabel *titleLabel;
+@property (readonly) UILabel *descriptionLabel;
+
+- (id) initWithTitle:(NSString *) title description:(NSString *) description;
+
+@end
384 DMScrollingTicker/test/DMScrollingTicker.m
@@ -0,0 +1,384 @@
+//
+// DMScrollingTicker.m
+//
+// Created by Daniele Margutti on 5/15/12.
+// Copyright (c) 2012 Daniele Margutti. All rights reserved.
+// Email: daniele.margutti@gmail.com
+// Website: http://www.danielem.org
+// License: MIT License
+// Put this line in your about box: 'Portions LPScrollingTicker by Daniele Margutti http://www.danielem.org'
+
+
+#import "DMScrollingTicker.h"
+#import <QuartzCore/QuartzCore.h>
+
+#pragma mark - LPScrollingTicker
+
+// Space between each subview item
+#define kLPScrollingTickerHSpace 2.0f
+// Default animation speed
+#define kLPScrollingAnimationPixelsPerSecond 50.0f
+
+@interface DMScrollingTicker() <UIScrollViewDelegate> {
+ UIScrollView* scrollView; // scrolling ticker
+ NSMutableArray* tickerSubViews; // preloaded subviews (if any)
+ NSMutableArray* tickerSubviewsFrames; // preloaded subviews frame (valid both for standard/lazy loading)
+ BOOL isAnimating; // YES if an animation is in progress
+ NSUInteger numberOfLoops; // number of loops to made
+ LPScrollingDirection scrollViewDirection; // scroll direction of the ticker
+ CGFloat scrollViewSpeed; // speed of the scroll in pixels/second
+ NSUInteger loopsDone; // number of loops made since the animation was started
+
+
+ CADisplayLink* displayLink; // used to sync lazy drawing
+
+ // Blocks handlers
+ LPScrollingTickerLazyLoadingHandler lazyLoadingHandler;
+ LPScrollingTickerAnimationCompletition animationCompletitionHandler;
+}
+
+- (void) layoutTickerSubviewsWithItems:(NSArray *) itemsToLoad;
+- (void) layoutTickerSubviewsWithItemSizes:(NSArray *) frameSizes;
+
+- (void) pauseLayer:(CALayer *)layer;
+- (void) resumeLayer:(CALayer *)layer;
+
+- (void) beginAnimation;
+- (CGPoint) startOffset;
+
+@end
+
+@implementation DMScrollingTicker
+
+@synthesize isAnimating;
+@synthesize contentSize,visibleContentRect;
+@synthesize loopsDone;
+
+- (id)initWithFrame:(CGRect)frame {
+ self = [super initWithFrame:frame];
+ if (self) {
+ scrollViewDirection = LPScrollingDirection_FromRight;
+ numberOfLoops = 0; // infinite scrolling = 0
+
+ isAnimating = NO;
+ tickerSubViews = nil;
+ tickerSubviewsFrames = nil;
+
+ scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
+ [scrollView setShowsHorizontalScrollIndicator:NO];
+ [scrollView setShowsVerticalScrollIndicator:NO];
+ scrollView.delegate = self;
+
+ [self addSubview:scrollView];
+ self.backgroundColor = [UIColor clearColor];
+ scrollView.backgroundColor = [UIColor clearColor];
+ }
+ return self;
+}
+
+- (void) beginAnimationWithViews:(NSArray *) subviewsItems {
+ [self beginAnimationWithViews:subviewsItems
+ direction:LPScrollingDirection_FromRight
+ speed:0
+ loops:0
+ completition:^(NSUInteger loopsDone, BOOL isFinished) {}];
+}
+
+- (void) beginAnimationWithViews:(NSArray *) views
+ direction:(LPScrollingDirection) scrollDirection
+ speed:(CGFloat) scrollSpeed
+ loops:(NSUInteger) loops
+ completition:(LPScrollingTickerAnimationCompletition) completition {
+
+ if (isAnimating) [self endAnimation:NO];
+
+ lazyLoadingHandler = nil;
+ animationCompletitionHandler = completition;
+ numberOfLoops = loops;
+ scrollViewDirection = scrollDirection;
+ scrollViewSpeed = (scrollSpeed == 0 ? kLPScrollingAnimationPixelsPerSecond : scrollSpeed);
+
+ if (displayLink) {
+ // Display link is used to catch the current visible area of the scrolling view during the animation
+ [displayLink removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
+ displayLink = nil;
+ }
+
+ [self layoutTickerSubviewsWithItems:views];
+ [self beginAnimation];
+}
+
+- (void) beginAnimationWithLazyViews:(LPScrollingTickerLazyLoadingHandler) dataSource
+ itemsSizes:(NSArray *) subviewsSizes
+ direction:(LPScrollingDirection) scrollDirection
+ speed:(CGFloat) scrollSpeed
+ loops:(NSUInteger) loops
+ completition:(LPScrollingTickerAnimationCompletition) completition {
+
+ if (isAnimating) [self endAnimation:NO];
+
+ lazyLoadingHandler = dataSource;
+ animationCompletitionHandler = completition;
+ numberOfLoops = loops;
+ scrollViewDirection = scrollDirection;
+ scrollViewSpeed = (scrollSpeed == 0 ? kLPScrollingAnimationPixelsPerSecond : scrollSpeed);
+
+ displayLink = [CADisplayLink displayLinkWithTarget: self
+ selector: @selector(tickerDidScroll)];
+ [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
+
+
+ [self layoutTickerSubviewsWithItemSizes:subviewsSizes];
+ [self beginAnimation];
+}
+
+- (CGPoint) startOffset {
+ CGPoint startOffset = CGPointZero;
+ if (scrollViewDirection == LPScrollingDirection_FromRight)
+ startOffset = CGPointMake(-scrollView.frame.size.width, 0);
+ else if (scrollViewDirection == LPScrollingDirection_FromLeft)
+ startOffset = CGPointMake(scrollView.contentSize.width, 0);
+ return startOffset;
+}
+
+- (void) beginAnimation {
+ if (isAnimating) return;
+ [scrollView setContentOffset:[self startOffset]];
+
+ isAnimating = YES;
+
+ NSTimeInterval animationDuration = (scrollView.contentSize.width/scrollViewSpeed);
+ [UIView animateWithDuration:animationDuration
+ delay:0
+ options:UIViewAnimationOptionCurveLinear
+ animations:^{
+ CGPoint finalPoint = CGPointZero;
+
+ if (scrollViewDirection == LPScrollingDirection_FromRight)
+ finalPoint = CGPointMake(scrollView.contentSize.width, 0);
+ else if (scrollViewDirection == LPScrollingDirection_FromLeft)
+ finalPoint = CGPointMake(-scrollView.contentSize.width+scrollView.frame.size.width, 0);
+
+ scrollView.contentOffset = finalPoint;
+ } completion:^(BOOL finished) {
+ if (finished) {
+ isAnimating = NO;
+ BOOL restartAnimation = (numberOfLoops == 0 || loopsDone <= numberOfLoops);
+
+ animationCompletitionHandler((loopsDone+1),!restartAnimation);
+
+ if (restartAnimation)
+ [self beginAnimation];
+ else
+ [self endAnimation:NO];
+
+ loopsDone++;
+ }
+ }];
+}
+
+- (void) endAnimation:(BOOL) animated {
+ if (!isAnimating) return;
+ isAnimating = NO;
+ loopsDone = 0;
+
+ [self pauseLayer:scrollView.layer];
+ [self scrollToStart:animated];
+}
+
+- (void) pauseAnimation {
+ if (!isAnimating) return;
+ isAnimating = NO;
+ [self pauseLayer:scrollView.layer];
+}
+
+- (void) resumeAnimation {
+ if (isAnimating) return;
+ isAnimating = YES;
+ [self resumeLayer:scrollView.layer];
+}
+
+- (void) scrollToOffset:(CGPoint) offsetPoint animate:(BOOL) animated {
+ [self endAnimation:NO];
+ [scrollView setContentOffset:offsetPoint animated:animated];
+}
+
+- (void) scrollToStart:(BOOL) animated {
+ [self endAnimation:NO];
+ [scrollView setContentOffset:[self startOffset] animated:animated];
+}
+
+- (void) layoutSubviews {
+ [super layoutSubviews];
+}
+
+- (CGSize) contentSize {
+ return scrollView.contentSize;
+}
+
+- (void) layoutTickerSubviewsWithItemSizes:(NSArray *) frameSizes {
+ tickerSubViews = [[NSMutableArray alloc] init];
+ tickerSubviewsFrames = [[NSMutableArray alloc] init];
+
+ CGSize scrollingContentSize = CGSizeZero;
+
+ CGFloat offsetX = 0.0f;
+ for (NSValue *itemSize in frameSizes) {
+ CGRect itemFrame = CGRectMake(offsetX,
+ 0,
+ [itemSize CGSizeValue].width,
+ [itemSize CGSizeValue].height);
+ [tickerSubviewsFrames addObject:[NSValue valueWithCGRect:itemFrame]];
+ [tickerSubViews addObject:[NSNull null]];
+
+ CGFloat itemWidth = ([itemSize CGSizeValue].width+kLPScrollingTickerHSpace);
+ scrollingContentSize.width +=+itemWidth;
+ scrollingContentSize.height = MAX(scrollingContentSize.height,[itemSize CGSizeValue].height);
+
+ offsetX += itemWidth;
+ }
+ [scrollView setContentSize:scrollingContentSize];
+}
+
+- (void) layoutTickerSubviewsWithItems:(NSArray *) itemsToLoad {
+ tickerSubViews = nil;
+ tickerSubviewsFrames = [[NSMutableArray alloc] init];
+
+ CGSize scrollingContentSize = CGSizeZero;
+ CGFloat offsetX = 0.0f;
+ for (UIView *itemView in itemsToLoad) {
+ [itemView layoutSubviews]; // get the correct bounds for this subview
+ CGRect itemFrame = CGRectMake(offsetX,
+ 0,
+ itemView.frame.size.width,
+ itemView.frame.size.height);
+ [tickerSubviewsFrames addObject:[NSValue valueWithCGRect:itemFrame]];
+ // [tickerSubViews addObject:itemView];
+
+ // calculate content size
+ CGFloat itemWidth = (itemView.frame.size.width+kLPScrollingTickerHSpace);
+ scrollingContentSize.width +=+itemWidth;
+ scrollingContentSize.height = MAX(scrollingContentSize.height,itemView.frame.size.height);
+ offsetX += itemWidth;
+
+ itemView.frame = itemFrame;
+ [scrollView addSubview:itemView];
+ }
+ [scrollView setContentSize:scrollingContentSize];
+}
+
+- (CGRect) visibleContentRect {
+ CGRect visibleRect;
+ // it returns the correct value while the scrollview is animating (simple scrollView.contentOffset will return a wrong value)
+ visibleRect.origin = [scrollView.layer.presentationLayer bounds].origin;
+ visibleRect.size = scrollView.frame.size;
+ return visibleRect;
+}
+
+- (void)tickerDidScroll {
+ // This method is used by lazy loading in order to check and load visible subviews and
+ // remove the unused/not visible subviews.
+ // This is not called when data loading mode = LPScrollingTickerDataLoading_PreloadSubviews
+ NSUInteger k = 0;
+ CGRect visibleRect = self.visibleContentRect;
+ for (NSValue* itemFrame in tickerSubviewsFrames) {
+ BOOL isVisible = CGRectIntersectsRect(visibleRect, [itemFrame CGRectValue]);
+
+ UIView *targetView = lazyLoadingHandler(k);
+
+ // this item will be now visible so we want to allocate it and insert into the subview
+ if (isVisible && targetView.superview == nil) {
+ targetView.frame = [itemFrame CGRectValue];
+ [scrollView addSubview:targetView];
+ } else if (isVisible == NO && targetView.superview != nil) {
+ // item is not out of the visilble area so we can remove it/dealloc
+ [targetView removeFromSuperview];
+ }
+ ++k;
+ }
+}
+
+-(void)pauseLayer:(CALayer *)layer {
+ CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
+ layer.speed = 0.0;
+ layer.timeOffset = pausedTime;
+}
+
+-(void)resumeLayer:(CALayer *)layer {
+ CFTimeInterval pausedTime = [layer timeOffset];
+ layer.speed = 1.0;
+ layer.timeOffset = 0.0;
+ layer.beginTime = 0.0;
+ CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
+ layer.beginTime = timeSincePause;
+}
+
+@end
+
+
+#pragma mark - LPScrollingTickerLabelItem
+
+
+#define kLPScrollingTickerLabelItem_Title_Font [UIFont boldSystemFontOfSize:14.0f]
+#define kLPScrollingTickerLabelItem_Description_Font [UIFont systemFontOfSize:14.0f]
+#define kLPScrollingTickerLabelItem_Space 5.0f
+
+@interface LPScrollingTickerLabelItem() {
+ UILabel* titleLabel;
+ UILabel* descriptionLabel;
+}
+@end
+
+@implementation LPScrollingTickerLabelItem
+
+@synthesize titleLabel;
+@synthesize descriptionLabel;
+
+- (id) initWithTitle:(NSString *) title description:(NSString *) description {
+ self = [super initWithFrame:CGRectZero];
+ if (self) {
+ titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+ titleLabel.font = kLPScrollingTickerLabelItem_Title_Font;
+ titleLabel.lineBreakMode = UILineBreakModeWordWrap;
+ titleLabel.numberOfLines = 1;
+
+ descriptionLabel = [[UILabel alloc] initWithFrame:CGRectZero];
+ descriptionLabel.font = kLPScrollingTickerLabelItem_Description_Font;
+ descriptionLabel.lineBreakMode = UILineBreakModeWordWrap;
+ descriptionLabel.numberOfLines = 1;
+
+ descriptionLabel.backgroundColor = [UIColor clearColor];
+ titleLabel.backgroundColor = [UIColor clearColor];
+ self.backgroundColor = [UIColor clearColor];
+
+ [self addSubview:titleLabel];
+ [self addSubview:descriptionLabel];
+
+ titleLabel.text = title;
+ descriptionLabel.text = description;
+ }
+ return self;
+}
+
+- (NSString *) description {
+ return [NSString stringWithFormat:@"text='%@,%@' frame=%@",titleLabel.text,descriptionLabel.text,NSStringFromCGRect(self.frame)];
+}
+
+- (void) layoutSubviews {
+ [super layoutSubviews];
+ CGSize bestSize_title = [titleLabel.text sizeWithFont:titleLabel.font
+ constrainedToSize:CGSizeMake(CGFLOAT_MAX, self.frame.size.height)
+ lineBreakMode:UILineBreakModeWordWrap];
+ CGSize bestSize_subtitle = [descriptionLabel.text sizeWithFont:descriptionLabel.font
+ constrainedToSize:CGSizeMake(CGFLOAT_MAX, self.frame.size.height)
+ lineBreakMode:UILineBreakModeWordWrap];
+
+ titleLabel.frame = CGRectMake(5, 0, bestSize_title.width, self.frame.size.height);
+ descriptionLabel.frame = CGRectMake(titleLabel.frame.origin.x+titleLabel.frame.size.width+kLPScrollingTickerLabelItem_Space, 0, bestSize_subtitle.width, self.frame.size.height);
+ [self setFrame:CGRectMake(self.frame.origin.x,
+ self.frame.origin.y,
+ bestSize_title.width+kLPScrollingTickerLabelItem_Space+bestSize_subtitle.width+10,
+ MAX(bestSize_title.height,bestSize_subtitle.height))];
+}
+
+@end
19 DMScrollingTicker/test/RSAppDelegate.h
@@ -0,0 +1,19 @@
+//
+// RSAppDelegate.h
+// test
+//
+// Created by malcom on 5/30/12.
+// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class RSViewController;
+
+@interface RSAppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+@property (strong, nonatomic) RSViewController *viewController;
+
+@end
55 DMScrollingTicker/test/RSAppDelegate.m
@@ -0,0 +1,55 @@
+//
+// RSAppDelegate.m
+// test
+//
+// Created by malcom on 5/30/12.
+// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+#import "RSAppDelegate.h"
+
+#import "RSViewController.h"
+
+@implementation RSAppDelegate
+
+@synthesize window = _window;
+@synthesize viewController = _viewController;
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+ // Override point for customization after application launch.
+ self.viewController = [[RSViewController alloc] initWithNibName:@"RSViewController" bundle:nil];
+ self.window.rootViewController = self.viewController;
+ [self.window makeKeyAndVisible];
+ return YES;
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application
+{
+ // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+ // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application
+{
+ // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+ // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application
+{
+ // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application
+{
+ // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application
+{
+ // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+@end
13 DMScrollingTicker/test/RSViewController.h
@@ -0,0 +1,13 @@
+//
+// RSViewController.h
+// test
+//
+// Created by malcom on 5/30/12.
+// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface RSViewController : UIViewController
+
+@end
79 DMScrollingTicker/test/RSViewController.m
@@ -0,0 +1,79 @@
+//
+// RSViewController.m
+// test
+//
+// Created by malcom on 5/30/12.
+// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+#import "RSViewController.h"
+#import "DMScrollingTicker.h"
+
+@interface RSViewController () {
+ DMScrollingTicker *scrollingTicker;
+}
+
+- (IBAction)btn_stop:(id)sender;
+- (IBAction)btn_resume:(id)sender;
+- (IBAction)btn_goSite:(id)sender;
+
+@end
+
+@implementation RSViewController
+
+- (IBAction)btn_stop:(id)sender {
+ [scrollingTicker pauseAnimation];
+}
+- (IBAction)btn_resume:(id)sender {
+ [scrollingTicker resumeAnimation];
+}
+
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+
+ scrollingTicker = [[DMScrollingTicker alloc] initWithFrame:CGRectMake(0, 170, 320, 18)];
+ scrollingTicker.backgroundColor = [UIColor yellowColor];
+ [self.view addSubview:scrollingTicker];
+ NSMutableArray *l = [[NSMutableArray alloc] init];
+ NSMutableArray *sizes = [[NSMutableArray alloc] init];
+ for (NSUInteger k = 0; k < 5; k++) {
+ LPScrollingTickerLabelItem *label = [[LPScrollingTickerLabelItem alloc] initWithTitle:[NSString stringWithFormat:@"› Title %d:",k]
+ description:[NSString stringWithFormat:@"Description %d",k]];
+ [label layoutSubviews];
+ [sizes addObject:[NSValue valueWithCGSize:label.frame.size]];
+ [l addObject:label];
+ }
+
+ [scrollingTicker beginAnimationWithViews:l
+ direction:LPScrollingDirection_FromRight
+ speed:0
+ loops:2
+ completition:^(NSUInteger loopsDone, BOOL isFinished) {
+ NSLog(@"loop %d, finished? %d",loopsDone,isFinished);
+ }];
+
+ /*
+ [scrollingTicker beginAnimationWithLazyViews:^UIView *(NSUInteger indexOfViewToShow) {
+ return [l objectAtIndex:indexOfViewToShow];
+ } itemsSizes:sizes direction:LPScrollingDirection_FromRight speed:0 loops:0 completition:^(BOOL isFinished) {
+
+ }];*/
+}
+
+- (IBAction)btn_goSite:(id)sender {
+ [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.danielemargutti.com"]];
+}
+
+- (void)viewDidUnload
+{
+ [super viewDidUnload];
+ // Release any retained subviews of the main view.
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+ return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
+}
+
+@end
2 DMScrollingTicker/test/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
388 DMScrollingTicker/test/en.lproj/RSViewController.xib
@@ -0,0 +1,388 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+ <data>
+ <int key="IBDocument.SystemTarget">1296</int>
+ <string key="IBDocument.SystemVersion">11E53</string>
+ <string key="IBDocument.InterfaceBuilderVersion">2182</string>
+ <string key="IBDocument.AppKitVersion">1138.47</string>
+ <string key="IBDocument.HIToolboxVersion">569.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="NS.object.0">1181</string>
+ </object>
+ <array key="IBDocument.IntegratedClassDependencies">
+ <string>IBUIButton</string>
+ <string>IBUIView</string>
+ <string>IBUILabel</string>
+ <string>IBProxyObject</string>
+ </array>
+ <array key="IBDocument.PluginDependencies">
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ </array>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+ <integer value="1" key="NS.object.0"/>
+ </object>
+ <array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+ <object class="IBProxyObject" id="372490531">
+ <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ </object>
+ <object class="IBProxyObject" id="843779117">
+ <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ </object>
+ <object class="IBUIView" id="774585933">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">274</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="IBUIButton" id="250341387">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{71, 346}, {179, 37}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <bool key="IBUIOpaque">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <int key="IBUIContentHorizontalAlignment">0</int>
+ <int key="IBUIContentVerticalAlignment">0</int>
+ <int key="IBUIButtonType">1</int>
+ <string key="IBUINormalTitle">RESUME ANIMATION</string>
+ <object class="NSColor" key="IBUIHighlightedTitleColor" id="559132536">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ <object class="NSColor" key="IBUINormalTitleColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+ </object>
+ <object class="NSColor" key="IBUINormalTitleShadowColor" id="1063636766">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC41AA</bytes>
+ </object>
+ <object class="IBUIFontDescription" key="IBUIFontDescription" id="549705264">
+ <int key="type">2</int>
+ <double key="pointSize">15</double>
+ </object>
+ <object class="NSFont" key="IBUIFont" id="1002375037">
+ <string key="NSName">Helvetica-Bold</string>
+ <double key="NSSize">15</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ </object>
+ <object class="IBUIButton" id="283599986">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{78, 291}, {166, 37}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="250341387"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <bool key="IBUIOpaque">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <int key="IBUIContentHorizontalAlignment">0</int>
+ <int key="IBUIContentVerticalAlignment">0</int>
+ <int key="IBUIButtonType">1</int>
+ <string key="IBUINormalTitle">PAUSE ANIMATION</string>
+ <reference key="IBUIHighlightedTitleColor" ref="559132536"/>
+ <object class="NSColor" key="IBUINormalTitleColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+ </object>
+ <reference key="IBUINormalTitleShadowColor" ref="1063636766"/>
+ <reference key="IBUIFontDescription" ref="549705264"/>
+ <reference key="IBUIFont" ref="1002375037"/>
+ </object>
+ <object class="IBUILabel" id="1003885620">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{20, 20}, {280, 21}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="82675460"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <bool key="IBUIOpaque">NO</bool>
+ <bool key="IBUIClipsSubviews">YES</bool>
+ <int key="IBUIContentMode">7</int>
+ <bool key="IBUIUserInteractionEnabled">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <string key="IBUIText">DMScrollingTicker</string>
+ <object class="NSColor" key="IBUITextColor" id="937592276">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwIDAAA</bytes>
+ </object>
+ <nil key="IBUIHighlightedColor"/>
+ <reference key="IBUIShadowColor" ref="559132536"/>
+ <int key="IBUIBaselineAdjustment">0</int>
+ <float key="IBUIMinimumFontSize">10</float>
+ <int key="IBUITextAlignment">1</int>
+ <object class="IBUIFontDescription" key="IBUIFontDescription">
+ <int key="type">2</int>
+ <double key="pointSize">17</double>
+ </object>
+ <object class="NSFont" key="IBUIFont">
+ <string key="NSName">Helvetica-Bold</string>
+ <double key="NSSize">17</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ </object>
+ <object class="IBUILabel" id="82675460">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{20, 44}, {280, 21}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="963852126"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <bool key="IBUIOpaque">NO</bool>
+ <bool key="IBUIClipsSubviews">YES</bool>
+ <int key="IBUIContentMode">7</int>
+ <bool key="IBUIUserInteractionEnabled">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <string key="IBUIText">advanced ticker class by Daniele Margutti</string>
+ <reference key="IBUITextColor" ref="937592276"/>
+ <nil key="IBUIHighlightedColor"/>
+ <reference key="IBUIShadowColor" ref="559132536"/>
+ <int key="IBUIBaselineAdjustment">0</int>
+ <float key="IBUIMinimumFontSize">10</float>
+ <int key="IBUITextAlignment">1</int>
+ <object class="IBUIFontDescription" key="IBUIFontDescription">
+ <int key="type">1</int>
+ <double key="pointSize">14</double>
+ </object>
+ <object class="NSFont" key="IBUIFont">
+ <string key="NSName">Helvetica</string>
+ <double key="NSSize">14</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ </object>
+ <object class="IBUILabel" id="963852126">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{20, 65}, {280, 21}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="1033906395"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <bool key="IBUIOpaque">NO</bool>
+ <bool key="IBUIClipsSubviews">YES</bool>
+ <int key="IBUIContentMode">7</int>
+ <bool key="IBUIUserInteractionEnabled">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <string key="IBUIText">http://www.danielemargutti.com</string>
+ <reference key="IBUITextColor" ref="937592276"/>
+ <nil key="IBUIHighlightedColor"/>
+ <reference key="IBUIShadowColor" ref="559132536"/>
+ <int key="IBUIBaselineAdjustment">0</int>
+ <float key="IBUIMinimumFontSize">10</float>
+ <int key="IBUITextAlignment">1</int>
+ <object class="IBUIFontDescription" key="IBUIFontDescription">
+ <int key="type">1</int>
+ <double key="pointSize">13</double>
+ </object>
+ <object class="NSFont" key="IBUIFont">
+ <string key="NSName">Helvetica</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ </object>
+ <object class="IBUIButton" id="1033906395">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{15, 14}, {291, 82}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="283599986"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <bool key="IBUIOpaque">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <int key="IBUIContentHorizontalAlignment">0</int>
+ <int key="IBUIContentVerticalAlignment">0</int>
+ <reference key="IBUIHighlightedTitleColor" ref="559132536"/>
+ <object class="NSColor" key="IBUINormalTitleColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+ </object>
+ <reference key="IBUINormalTitleShadowColor" ref="1063636766"/>
+ <reference key="IBUIFontDescription" ref="549705264"/>
+ <reference key="IBUIFont" ref="1002375037"/>
+ </object>
+ </array>
+ <string key="NSFrame">{{0, 20}, {320, 460}}</string>
+ <reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="1003885620"/>
+ <object class="NSColor" key="IBUIBackgroundColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC45MDg4NDAwMTM2IDAuOTA4ODQwMDEzNiAwLjkwODg0MDAxMzYAA</bytes>
+ </object>
+ <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
+ <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ </object>
+ </array>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <array class="NSMutableArray" key="connectionRecords">
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchOutletConnection" key="connection">
+ <string key="label">view</string>
+ <reference key="source" ref="372490531"/>
+ <reference key="destination" ref="774585933"/>
+ </object>
+ <int key="connectionID">7</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchEventConnection" key="connection">
+ <string key="label">btn_resume:</string>
+ <reference key="source" ref="250341387"/>
+ <reference key="destination" ref="372490531"/>
+ <int key="IBEventType">7</int>
+ </object>
+ <int key="connectionID">10</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchEventConnection" key="connection">
+ <string key="label">btn_stop:</string>
+ <reference key="source" ref="283599986"/>
+ <reference key="destination" ref="372490531"/>
+ <int key="IBEventType">7</int>
+ </object>
+ <int key="connectionID">11</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchEventConnection" key="connection">
+ <string key="label">btn_goSite:</string>
+ <reference key="source" ref="1033906395"/>
+ <reference key="destination" ref="372490531"/>
+ <int key="IBEventType">7</int>
+ </object>
+ <int key="connectionID">16</int>
+ </object>
+ </array>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <array key="orderedObjects">
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <array key="object" id="0"/>
+ <reference key="children" ref="1000"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="372490531"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="843779117"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">6</int>
+ <reference key="object" ref="774585933"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="1003885620"/>
+ <reference ref="82675460"/>
+ <reference ref="963852126"/>
+ <reference ref="250341387"/>
+ <reference ref="283599986"/>
+ <reference ref="1033906395"/>
+ </array>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">8</int>
+ <reference key="object" ref="250341387"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">9</int>
+ <reference key="object" ref="283599986"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="1003885620"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="82675460"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="963852126"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">15</int>
+ <reference key="object" ref="1033906395"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ </array>
+ </object>
+ <dictionary class="NSMutableDictionary" key="flattenedProperties">
+ <string key="-1.CustomClassName">RSViewController</string>
+ <string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="-2.CustomClassName">UIResponder</string>
+ <string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="13.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="15.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ </dictionary>
+ <dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+ <nil key="activeLocalization"/>
+ <dictionary class="NSMutableDictionary" key="localizations"/>
+ <nil key="sourceID"/>
+ <int key="maxID">16</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <array class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <object class="IBPartialClassDescription">
+ <string key="className">RSViewController</string>
+ <string key="superclassName">UIViewController</string>
+ <dictionary class="NSMutableDictionary" key="actions">
+ <string key="btn_goSite:">id</string>
+ <string key="btn_resume:">id</string>
+ <string key="btn_stop:">id</string>
+ </dictionary>
+ <dictionary class="NSMutableDictionary" key="actionInfosByName">
+ <object class="IBActionInfo" key="btn_goSite:">
+ <string key="name">btn_goSite:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo" key="btn_resume:">
+ <string key="name">btn_resume:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo" key="btn_stop:">
+ <string key="name">btn_stop:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </dictionary>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/RSViewController.h</string>
+ </object>
+ </object>
+ </array>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
+ <real value="1296" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <string key="IBCocoaTouchPluginVersion">1181</string>
+ </data>
+</archive>
18 DMScrollingTicker/test/main.m
@@ -0,0 +1,18 @@
+//
+// main.m
+// test
+//
+// Created by malcom on 5/30/12.
+// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "RSAppDelegate.h"
+
+int main(int argc, char *argv[])
+{
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([RSAppDelegate class]));
+ }
+}
53 README.md
@@ -0,0 +1,53 @@
+# DMScrollingTicker
+
+DMScrollingTicker is an advanced horizontal scroll ticker class made in Objective-C for iOS.
+It doesn't use standard NSTimer to perform animations but instead Quartz Layers / CoreGraphics.
+It allows to load any set of UIView subclasses and add to the scrolling queue with a simple call.
+
+Daniele Margutti, <http://www.danielem.org>
+
+## How to get started
+
+You can pick between two modes:
+* standard mode: you will pass your list of UIViews and begin animation (all views will be adjusted and loaded at startup time)
+* lazy mode: you will pass only UIView's CGSizes array and a datasource blocks handler and DMScrollingView will load each view only when needed (and remove them when not used). It may be useful when you have lots of ticker elements (here called subviews) and you pay attention to the memory usage
+
+It's compatible with iOS 4.x+ or later (it uses blocks).
+
+## Change log
+
+### May 31, 2012
+
+* First version
+
+## Donations
+
+If you found this project useful, please donate.
+There’s no expected amount and I don’t require you to.
+
+<a href='https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=GS3DBQ69ZBKWJ">CLICK THIS LINK TO DONATE USING PAYPAL</a>
+
+## License (MIT)
+
+Copyright (c) 2012 Daniele Margutti
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.

0 comments on commit 770c1b0

Please sign in to comment.