Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

first commit of a few iOS Components

  • Loading branch information...
commit 2746484cefa065fc41805ff13cacbc6040188c65 0 parents
Dimitris Doukas doukasd authored
Showing with 14,698 additions and 0 deletions.
  1. 0  README
  2. +20 −0 Utils/DDURLParser.h
  3. +46 −0 Utils/DDURLParser.m
  4. +41 −0 ViewControllers/DialController/DialController.h
  5. +262 −0 ViewControllers/DialController/DialController.m
  6. BIN  ViewControllers/DialController/Example/Dial Example/Default.png
  7. BIN  ViewControllers/DialController/Example/Dial Example/Default@2x.png
  8. +533 −0 ViewControllers/DialController/Example/Dial Example/Dial Example.xcodeproj/project.pbxproj
  9. +7 −0 ...ers/DialController/Example/Dial Example/Dial Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  10. +12,090 −0 ...e/Dial Example.xcodeproj/project.xcworkspace/xcuserdata/dimitris.xcuserdatad/UserInterfaceState.xcuserstate
  11. +5 −0 ...ample/Dial Example/Dial Example.xcodeproj/xcuserdata/dimitris.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
  12. +86 −0 ...Example/Dial Example/Dial Example.xcodeproj/xcuserdata/dimitris.xcuserdatad/xcschemes/Dial Example.xcscheme
  13. +27 −0 ...mple/Dial Example/Dial Example.xcodeproj/xcuserdata/dimitris.xcuserdatad/xcschemes/xcschememanagement.plist
  14. +55 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial Example-Info.plist
  15. +14 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial Example-Prefix.pch
  16. +18 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial_ExampleAppDelegate.h
  17. +72 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial_ExampleAppDelegate.m
  18. +20 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial_ExampleViewController.h
  19. +87 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial_ExampleViewController.m
  20. +504 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/en.lproj/Dial_ExampleViewController.xib
  21. +2 −0  ViewControllers/DialController/Example/Dial Example/Dial Example/en.lproj/InfoPlist.strings
  22. +444 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/en.lproj/MainWindow.xib
  23. +14 −0 ViewControllers/DialController/Example/Dial Example/Dial Example/main.m
  24. +22 −0 ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/Dial ExampleTests-Info.plist
  25. +7 −0 ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/Dial ExampleTests-Prefix.pch
  26. +17 −0 ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/Dial_ExampleTests.h
  27. +33 −0 ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/Dial_ExampleTests.m
  28. +2 −0  ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/en.lproj/InfoPlist.strings
  29. BIN  ViewControllers/DialController/Example/Dial Example/Icon@2x~iphone.png
  30. BIN  ViewControllers/DialController/Example/Dial Example/Icon~iphone.png
  31. BIN  ViewControllers/DialController/Example/Dial Example/Resources/Assets.fla
  32. BIN  ViewControllers/DialController/Example/Dial Example/Resources/Digital-7.ttf
  33. BIN  ViewControllers/DialController/Example/Dial Example/Resources/bg@2x.png
  34. BIN  ViewControllers/DialController/Example/Dial Example/Resources/overlay@2x.png
  35. +22 −0 ViewControllers/DialController/GlowLabel.h
  36. +57 −0 ViewControllers/DialController/GlowLabel.m
  37. +39 −0 ViewControllers/DialController/MultiDialViewController.h
  38. +152 −0 ViewControllers/DialController/MultiDialViewController.m
0  README
No changes.
20 Utils/DDURLParser.h
@@ -0,0 +1,20 @@
+//
+// DDURLParser.h
+//
+//
+// Created by Dimitris Doukas on 09/02/2010.
+// Copyright 2010 doukasd.com. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface DDURLParser : NSObject {
+ NSArray *variables;
+}
+
+@property (nonatomic, retain) NSArray *variables;
+
+- (id)initWithURLString:(NSString *)url;
+- (NSString *)valueForVariable:(NSString *)varName;
+
+@end
46 Utils/DDURLParser.m
@@ -0,0 +1,46 @@
+//
+// DDURLParser.m
+//
+//
+// Created by Dimitris Doukas on 09/02/2010.
+// Copyright 2010 doukasd.com. All rights reserved.
+//
+
+@implementation DDURLParser
+@synthesize variables;
+
+- (id) initWithURLString:(NSString *)url{
+ self = [super init];
+ if (self != nil) {
+ NSString *string = url;
+ NSScanner *scanner = [NSScanner scannerWithString:string];
+ [scanner setCharactersToBeSkipped:[NSCharacterSet characterSetWithCharactersInString:@"&?"]];
+ NSString *tempString;
+ NSMutableArray *vars = [NSMutableArray new];
+ //ignore the beginning of the string and skip to the vars
+ [scanner scanUpToString:@"?" intoString:nil];
+ while ([scanner scanUpToString:@"&" intoString:&tempString]) {
+ [vars addObject:[tempString copy]];
+ }
+ self.variables = vars;
+ [vars release];
+ }
+ return self;
+}
+
+- (NSString *)valueForVariable:(NSString *)varName {
+ for (NSString *var in self.variables) {
+ if ([var length] > [varName length]+1 && [[var substringWithRange:NSMakeRange(0, [varName length]+1)] isEqualToString:[varName stringByAppendingString:@"="]]) {
+ NSString *varValue = [var substringFromIndex:[varName length]+1];
+ return varValue;
+ }
+ }
+ return nil;
+}
+
+- (void) dealloc{
+ self.variables = nil;
+ [super dealloc];
+}
+
+@end
41 ViewControllers/DialController/DialController.h
@@ -0,0 +1,41 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@protocol DialControllerDelegate;
+
+@interface DialController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
+ UITableView *tableView;
+ BOOL isSpinning; //refers to wether the user is spinning it
+ BOOL isAnimating; //refers to wether it is animating into position
+ NSArray *strings;
+ NSInteger selectedStringIndex;
+ NSString *selectedString;
+ id<DialControllerDelegate> delegate;
+}
+
+@property (nonatomic, retain) UITableView *tableView;
+@property (nonatomic, retain) NSArray *strings;
+
+@property (nonatomic, copy) NSString *selectedString;
+
+@property (readonly) NSInteger selectedStringIndex;
+@property BOOL isSpinning;
+
+@property (nonatomic, assign) id<DialControllerDelegate> delegate;
+
+- (id)initWithDialFrame:(CGRect)frame strings:(NSArray *)dialStrings;
+- (void)spinToRandomString;
+- (void)spinToString:(NSString *)string;
+
+@end
+
+
+@protocol DialControllerDelegate <NSObject>
+- (void)dialControllerDidSpin:(DialController *)controller;
+@required
+- (void)dialController:(DialController *)dial didSnapToString:(NSString *)string;
+@end
262 ViewControllers/DialController/DialController.m
@@ -0,0 +1,262 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import "DialController.h"
+#import "GlowLabel.h"
+
+#define NUM_ROWS 500000
+#define ROW_HEIGHT 60
+
+
+@interface DialController (PrivateMethods)
+- (void)snap;
+- (NSInteger)indexOfString:(NSString *)string;
+@end
+
+
+@implementation DialController
+
+@synthesize tableView, strings, selectedString;
+@synthesize isSpinning;
+@synthesize delegate;
+
+static NSString *CellIdentifier = @"DialCell";
+static const int kGlowLabelTag = 2011;
+
+- (void)dealloc
+{
+ self.tableView = nil;
+ self.strings = nil;
+ self.selectedString = nil;
+ [super dealloc];
+}
+
+- (id)initWithDialFrame:(CGRect)frame strings:(NSArray *)dialStrings {
+ self = [super init];
+ if (self) {
+ self.isSpinning = NO;
+ isAnimating = NO;
+
+ //validate the data
+ //check if the strings are more than 0. If they are not, create a default array
+ if (dialStrings == nil || [dialStrings count] == 0) {
+ dialStrings = [NSArray arrayWithObjects:@"0", nil];
+ }
+
+#warning this implementation does not like duplicate strings. each string in the values of the dial has to be different that the others
+ //check if the strings contain duplicates
+ //...
+
+ self.strings = dialStrings;
+
+ self.view = [[[UIView alloc] initWithFrame:frame] autorelease];
+
+ self.tableView = [[[UITableView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) style:UITableViewStylePlain] autorelease];
+ self.tableView.delegate = self;
+ self.tableView.dataSource = self;
+ self.tableView.rowHeight = ROW_HEIGHT;
+ self.tableView.showsVerticalScrollIndicator = NO;
+ self.tableView.showsHorizontalScrollIndicator = NO;
+ self.tableView.separatorColor = [UIColor colorWithRed:110.0/255.0 green:110.0/255.0 blue:110.0/255.0 alpha:1.0];
+ self.tableView.backgroundColor = [UIColor colorWithRed:88.0/255.0 green:88.0/255.0 blue:88.0/255.0 alpha:1.0];
+ [self.view addSubview:self.tableView];
+
+ //INIT
+ //select a row in the middle
+ [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:(int)(NUM_ROWS * .5) inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
+ [self snap];
+
+ //select random value
+ //[self spinToRandomValue];
+ }
+ return self;
+}
+
+- (void)didReceiveMemoryWarning
+{
+ // Releases the view if it doesn't have a superview.
+ [super didReceiveMemoryWarning];
+
+ // Release any cached data, images, etc that aren't in use.
+}
+
+#pragma mark - View lifecycle
+
+// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
+- (void)viewDidLoad {
+ [super viewDidLoad];
+}
+
+- (void)viewDidUnload
+{
+ [super viewDidUnload];
+ // Release any retained subviews of the main view.
+ // e.g. self.myOutlet = nil;
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+ // Return YES for supported orientations
+ return (interfaceOrientation == UIInterfaceOrientationPortrait);
+}
+
+- (void)spinToRandomString {
+ [self spinToString:[self.strings objectAtIndex:arc4random() % [self.strings count]]];
+}
+
+- (void)spinToString:(NSString *)string {
+ isAnimating = NO;
+ self.isSpinning = NO;
+ if ([[self.tableView visibleCells] count] == 0) {
+ return;
+ }
+ //take any visible cell, find it's value's index, compute the difference to the index of the new value and scroll to that cell
+ UITableViewCell *cell = [[self.tableView visibleCells] objectAtIndex:0];
+ GlowLabel *label = (GlowLabel *)[cell viewWithTag:kGlowLabelTag];
+ int difference = [self indexOfString:string] - [self indexOfString:label.text];
+ [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:[self.tableView indexPathForCell:cell].row + difference inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
+}
+
+- (void)snap {
+ if (isAnimating) return;
+ isAnimating = YES;
+
+ self.isSpinning = NO;
+
+ //calculate vertical padding
+ double verticalPadding = (self.tableView.frame.size.height - self.tableView.rowHeight) * .5;
+
+ //for each cell, check if it is in view and set it to selected accordingly
+ for (int i=0; i<[[self.tableView visibleCells] count]; i++) {
+ UITableViewCell *cell = [[self.tableView visibleCells] objectAtIndex:i];
+ GlowLabel *label = (GlowLabel *)[cell viewWithTag:kGlowLabelTag];
+ BOOL selected = CGRectContainsPoint(CGRectMake(0, self.tableView.contentOffset.y + verticalPadding, self.tableView.frame.size.width, self.tableView.rowHeight), cell.center);
+ [label setSelected:selected];
+ if (selected) {
+ isAnimating = YES;
+ self.isSpinning = NO;
+ //self.selectedValue = [self.values objectAtIndex:[label.text intValue]];
+ self.selectedString = label.text;
+ [self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForCell:cell] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
+
+ //check if snappin will not result in an animation. in that case, call the delegate here
+ if ([self.tableView rectForRowAtIndexPath:[self.tableView indexPathForCell:cell]].origin.y == self.tableView.contentOffset.y + (self.tableView.frame.size.height - ROW_HEIGHT) * .5) {
+ NSLog(@"snap will not animate!");
+
+ [self.delegate dialController:self didSnapToString:self.selectedString];
+ isAnimating = NO;
+ }
+ }
+ }
+}
+
+/*
+#pragma mark UITableViewDelegate methods
+
+- (void)tableView:(UITableView *)aTableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
+}
+
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+}
+*/
+
+#pragma mark UITableViewDataSource methods
+
+- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+
+ int cellNumber = indexPath.row % [self.strings count];
+
+ UITableViewCell *cell = (UITableViewCell *)[aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
+ if (cell == nil) {
+ cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, self.tableView.rowHeight) reuseIdentifier:CellIdentifier] autorelease];
+ //make the cell unselectable
+ cell.selectionStyle = UITableViewCellSelectionStyleNone;
+
+ //add the glow label
+ GlowLabel *label = [[GlowLabel alloc] initWithFrame:CGRectMake(0, -8, self.tableView.frame.size.width, ROW_HEIGHT)];
+ label.unselectedColor = [UIColor colorWithRed:180.0/255.0 green:180.0/255.0 blue:180.0/255.0 alpha:1.0];
+ label.text = [NSString stringWithFormat:@"%@", [self.strings objectAtIndex:cellNumber]];
+ label.tag = kGlowLabelTag;
+
+ //add a background label
+ UILabel *bgLabel = [[UILabel alloc] initWithFrame:label.frame];
+ bgLabel.text =@"8";
+ bgLabel.textAlignment = label.textAlignment;
+ bgLabel.font = label.font;
+ bgLabel.backgroundColor = label.backgroundColor;
+ bgLabel.textColor = [UIColor colorWithRed:110.0/255.0 green:110.0/255.0 blue:110.0/255.0 alpha:1.0];
+
+ [cell addSubview:bgLabel];
+ [bgLabel release];
+
+ [cell addSubview:label];
+ [label release];
+ }
+ else {
+ //if a cell was dequeued, populate it with the relevant info and set is as unselected
+ GlowLabel *label = (GlowLabel *)[cell viewWithTag:kGlowLabelTag];
+ label.text = [NSString stringWithFormat:@"%@", [self.strings objectAtIndex:cellNumber]];
+ [label setSelected:NO];
+ }
+ return cell;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+ return NUM_ROWS;
+}
+
+#pragma mark UIScrollViewDelegate methods
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+ self.isSpinning = YES;
+ [self.delegate dialControllerDidSpin:self];
+}
+
+- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
+ if (!decelerate) {
+ self.isSpinning = NO;
+ isAnimating = NO;
+ [self snap];
+ }
+}
+
+- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
+ self.isSpinning = NO;
+ isAnimating = NO;
+ [self snap];
+}
+
+- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
+ if (isAnimating) {
+ isAnimating = NO;
+ self.isSpinning = NO;
+ [self.delegate dialController:self didSnapToString:self.selectedString];
+ }
+ else {
+ [self snap];
+ }
+}
+
+#pragma mark Custom getter
+
+- (NSInteger)selectedStringIndex {
+ return [self indexOfString:self.selectedString];
+}
+
+#pragma mark Helper methods
+
+//return the index of a string in the values
+- (NSInteger)indexOfString:(NSString *)string {
+ if (self.strings != nil) {
+ for (NSInteger i=0; i<[self.strings count]; i++) {
+ if ([(NSString *)[self.strings objectAtIndex:i] isEqualToString:string]) {
+ return i;
+ }
+ }
+ }
+ return -1;
+}
+
+@end
BIN  ViewControllers/DialController/Example/Dial Example/Default.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  ViewControllers/DialController/Example/Dial Example/Default@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
533 ViewControllers/DialController/Example/Dial Example/Dial Example.xcodeproj/project.pbxproj
@@ -0,0 +1,533 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ B7245080134CF34D00A6146E /* bg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B724507D134CF34D00A6146E /* bg@2x.png */; };
+ B7245081134CF34D00A6146E /* overlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B724507E134CF34D00A6146E /* overlay@2x.png */; };
+ B7355A18134D2B3100E3CCE4 /* Digital-7.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B7355A17134D2B3100E3CCE4 /* Digital-7.ttf */; };
+ B7A273B6134878D70086F740 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7A273B5134878D70086F740 /* UIKit.framework */; };
+ B7A273B8134878D70086F740 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7A273B7134878D70086F740 /* Foundation.framework */; };
+ B7A273BA134878D70086F740 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7A273B9134878D70086F740 /* CoreGraphics.framework */; };
+ B7A273C0134878D70086F740 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = B7A273BE134878D70086F740 /* InfoPlist.strings */; };
+ B7A273C3134878D70086F740 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A273C2134878D70086F740 /* main.m */; };
+ B7A273C6134878D80086F740 /* Dial_ExampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A273C5134878D80086F740 /* Dial_ExampleAppDelegate.m */; };
+ B7A273C9134878D80086F740 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = B7A273C7134878D80086F740 /* MainWindow.xib */; };
+ B7A273CC134878D80086F740 /* Dial_ExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A273CB134878D80086F740 /* Dial_ExampleViewController.m */; };
+ B7A273CF134878D80086F740 /* Dial_ExampleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B7A273CD134878D80086F740 /* Dial_ExampleViewController.xib */; };
+ B7A273D6134878D80086F740 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7A273B5134878D70086F740 /* UIKit.framework */; };
+ B7A273D7134878D80086F740 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7A273B7134878D70086F740 /* Foundation.framework */; };
+ B7A273D8134878D80086F740 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7A273B9134878D70086F740 /* CoreGraphics.framework */; };
+ B7A273E0134878D80086F740 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = B7A273DE134878D80086F740 /* InfoPlist.strings */; };
+ B7A273E3134878D80086F740 /* Dial_ExampleTests.h in Resources */ = {isa = PBXBuildFile; fileRef = B7A273E2134878D80086F740 /* Dial_ExampleTests.h */; };
+ B7A273E5134878D80086F740 /* Dial_ExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A273E4134878D80086F740 /* Dial_ExampleTests.m */; };
+ B7A2740013487D0B0086F740 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = B7A273FF13487D0B0086F740 /* Default.png */; };
+ B7A2740B13487D2B0086F740 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B7A2740A13487D2B0086F740 /* Default@2x.png */; };
+ B7A2740D13487D310086F740 /* Icon@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = B7A2740C13487D300086F740 /* Icon@2x~iphone.png */; };
+ B7A2740F13487D370086F740 /* Icon~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = B7A2740E13487D370086F740 /* Icon~iphone.png */; };
+ B7A2741913487DD70086F740 /* DialController.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A2741413487DD70086F740 /* DialController.m */; };
+ B7A2741A13487DD70086F740 /* GlowLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A2741613487DD70086F740 /* GlowLabel.m */; };
+ B7A2741B13487DD70086F740 /* MultiDialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A2741813487DD70086F740 /* MultiDialViewController.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ B7A273D9134878D80086F740 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = B7A273A8134878D70086F740 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B7A273B0134878D70086F740;
+ remoteInfo = "Dial Example";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ B724507D134CF34D00A6146E /* bg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bg@2x.png"; sourceTree = "<group>"; };
+ B724507E134CF34D00A6146E /* overlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "overlay@2x.png"; sourceTree = "<group>"; };
+ B7355A17134D2B3100E3CCE4 /* Digital-7.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Digital-7.ttf"; sourceTree = "<group>"; };
+ B7A273B1134878D70086F740 /* Dial Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Dial Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ B7A273B5134878D70086F740 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+ B7A273B7134878D70086F740 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ B7A273B9134878D70086F740 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+ B7A273BD134878D70086F740 /* Dial Example-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Dial Example-Info.plist"; sourceTree = "<group>"; };
+ B7A273BF134878D70086F740 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ B7A273C1134878D70086F740 /* Dial Example-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Dial Example-Prefix.pch"; sourceTree = "<group>"; };
+ B7A273C2134878D70086F740 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ B7A273C4134878D70086F740 /* Dial_ExampleAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dial_ExampleAppDelegate.h; sourceTree = "<group>"; };
+ B7A273C5134878D80086F740 /* Dial_ExampleAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Dial_ExampleAppDelegate.m; sourceTree = "<group>"; };
+ B7A273C8134878D80086F740 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow.xib; sourceTree = "<group>"; };
+ B7A273CA134878D80086F740 /* Dial_ExampleViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dial_ExampleViewController.h; sourceTree = "<group>"; };
+ B7A273CB134878D80086F740 /* Dial_ExampleViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Dial_ExampleViewController.m; sourceTree = "<group>"; };
+ B7A273CE134878D80086F740 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/Dial_ExampleViewController.xib; sourceTree = "<group>"; };
+ B7A273D5134878D80086F740 /* Dial ExampleTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Dial ExampleTests.octest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ B7A273DD134878D80086F740 /* Dial ExampleTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Dial ExampleTests-Info.plist"; sourceTree = "<group>"; };
+ B7A273DF134878D80086F740 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ B7A273E1134878D80086F740 /* Dial ExampleTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Dial ExampleTests-Prefix.pch"; sourceTree = "<group>"; };
+ B7A273E2134878D80086F740 /* Dial_ExampleTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dial_ExampleTests.h; sourceTree = "<group>"; };
+ B7A273E4134878D80086F740 /* Dial_ExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Dial_ExampleTests.m; sourceTree = "<group>"; };
+ B7A273FF13487D0B0086F740 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
+ B7A2740A13487D2B0086F740 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = "<group>"; };
+ B7A2740C13487D300086F740 /* Icon@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon@2x~iphone.png"; sourceTree = "<group>"; };
+ B7A2740E13487D370086F740 /* Icon~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon~iphone.png"; sourceTree = "<group>"; };
+ B7A2741313487DD70086F740 /* DialController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DialController.h; path = ../../../DialController.h; sourceTree = "<group>"; };
+ B7A2741413487DD70086F740 /* DialController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DialController.m; path = ../../../DialController.m; sourceTree = "<group>"; };
+ B7A2741513487DD70086F740 /* GlowLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GlowLabel.h; path = ../../../GlowLabel.h; sourceTree = "<group>"; };
+ B7A2741613487DD70086F740 /* GlowLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GlowLabel.m; path = ../../../GlowLabel.m; sourceTree = "<group>"; };
+ B7A2741713487DD70086F740 /* MultiDialViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MultiDialViewController.h; path = ../../../MultiDialViewController.h; sourceTree = "<group>"; };
+ B7A2741813487DD70086F740 /* MultiDialViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MultiDialViewController.m; path = ../../../MultiDialViewController.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ B7A273AE134878D70086F740 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B7A273B6134878D70086F740 /* UIKit.framework in Frameworks */,
+ B7A273B8134878D70086F740 /* Foundation.framework in Frameworks */,
+ B7A273BA134878D70086F740 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B7A273D1134878D80086F740 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B7A273D6134878D80086F740 /* UIKit.framework in Frameworks */,
+ B7A273D7134878D80086F740 /* Foundation.framework in Frameworks */,
+ B7A273D8134878D80086F740 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ B724507B134CF34D00A6146E /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ B7355A17134D2B3100E3CCE4 /* Digital-7.ttf */,
+ B724507D134CF34D00A6146E /* bg@2x.png */,
+ B724507E134CF34D00A6146E /* overlay@2x.png */,
+ );
+ path = Resources;
+ sourceTree = "<group>";
+ };
+ B7A273A6134878D70086F740 = {
+ isa = PBXGroup;
+ children = (
+ B724507B134CF34D00A6146E /* Resources */,
+ B7A2741113487D510086F740 /* AppAssets */,
+ B7A273BB134878D70086F740 /* Dial Example */,
+ B7A273DB134878D80086F740 /* Dial ExampleTests */,
+ B7A273B4134878D70086F740 /* Frameworks */,
+ B7A273B2134878D70086F740 /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ B7A273B2134878D70086F740 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ B7A273B1134878D70086F740 /* Dial Example.app */,
+ B7A273D5134878D80086F740 /* Dial ExampleTests.octest */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ B7A273B4134878D70086F740 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ B7A273B5134878D70086F740 /* UIKit.framework */,
+ B7A273B7134878D70086F740 /* Foundation.framework */,
+ B7A273B9134878D70086F740 /* CoreGraphics.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ B7A273BB134878D70086F740 /* Dial Example */ = {
+ isa = PBXGroup;
+ children = (
+ B7A2741213487DC70086F740 /* Classes */,
+ B7A273C4134878D70086F740 /* Dial_ExampleAppDelegate.h */,
+ B7A273C5134878D80086F740 /* Dial_ExampleAppDelegate.m */,
+ B7A273C7134878D80086F740 /* MainWindow.xib */,
+ B7A273CA134878D80086F740 /* Dial_ExampleViewController.h */,
+ B7A273CB134878D80086F740 /* Dial_ExampleViewController.m */,
+ B7A273CD134878D80086F740 /* Dial_ExampleViewController.xib */,
+ B7A273BC134878D70086F740 /* Supporting Files */,
+ );
+ path = "Dial Example";
+ sourceTree = "<group>";
+ };
+ B7A273BC134878D70086F740 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ B7A273BD134878D70086F740 /* Dial Example-Info.plist */,
+ B7A273BE134878D70086F740 /* InfoPlist.strings */,
+ B7A273C1134878D70086F740 /* Dial Example-Prefix.pch */,
+ B7A273C2134878D70086F740 /* main.m */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ B7A273DB134878D80086F740 /* Dial ExampleTests */ = {
+ isa = PBXGroup;
+ children = (
+ B7A273E2134878D80086F740 /* Dial_ExampleTests.h */,
+ B7A273E4134878D80086F740 /* Dial_ExampleTests.m */,
+ B7A273DC134878D80086F740 /* Supporting Files */,
+ );
+ path = "Dial ExampleTests";
+ sourceTree = "<group>";
+ };
+ B7A273DC134878D80086F740 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ B7A273DD134878D80086F740 /* Dial ExampleTests-Info.plist */,
+ B7A273DE134878D80086F740 /* InfoPlist.strings */,
+ B7A273E1134878D80086F740 /* Dial ExampleTests-Prefix.pch */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ B7A2741113487D510086F740 /* AppAssets */ = {
+ isa = PBXGroup;
+ children = (
+ B7A2740E13487D370086F740 /* Icon~iphone.png */,
+ B7A2740C13487D300086F740 /* Icon@2x~iphone.png */,
+ B7A2740A13487D2B0086F740 /* Default@2x.png */,
+ B7A273FF13487D0B0086F740 /* Default.png */,
+ );
+ name = AppAssets;
+ sourceTree = "<group>";
+ };
+ B7A2741213487DC70086F740 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ B7A2741313487DD70086F740 /* DialController.h */,
+ B7A2741413487DD70086F740 /* DialController.m */,
+ B7A2741513487DD70086F740 /* GlowLabel.h */,
+ B7A2741613487DD70086F740 /* GlowLabel.m */,
+ B7A2741713487DD70086F740 /* MultiDialViewController.h */,
+ B7A2741813487DD70086F740 /* MultiDialViewController.m */,
+ );
+ name = Classes;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ B7A273B0134878D70086F740 /* Dial Example */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B7A273E8134878D80086F740 /* Build configuration list for PBXNativeTarget "Dial Example" */;
+ buildPhases = (
+ B7A273AD134878D70086F740 /* Sources */,
+ B7A273AE134878D70086F740 /* Frameworks */,
+ B7A273AF134878D70086F740 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Dial Example";
+ productName = "Dial Example";
+ productReference = B7A273B1134878D70086F740 /* Dial Example.app */;
+ productType = "com.apple.product-type.application";
+ };
+ B7A273D4134878D80086F740 /* Dial ExampleTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B7A273EB134878D80086F740 /* Build configuration list for PBXNativeTarget "Dial ExampleTests" */;
+ buildPhases = (
+ B7A273D0134878D80086F740 /* Sources */,
+ B7A273D1134878D80086F740 /* Frameworks */,
+ B7A273D2134878D80086F740 /* Resources */,
+ B7A273D3134878D80086F740 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ B7A273DA134878D80086F740 /* PBXTargetDependency */,
+ );
+ name = "Dial ExampleTests";
+ productName = "Dial ExampleTests";
+ productReference = B7A273D5134878D80086F740 /* Dial ExampleTests.octest */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ B7A273A8134878D70086F740 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ ORGANIZATIONNAME = unit9.com;
+ };
+ buildConfigurationList = B7A273AB134878D70086F740 /* Build configuration list for PBXProject "Dial Example" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = B7A273A6134878D70086F740;
+ productRefGroup = B7A273B2134878D70086F740 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ B7A273B0134878D70086F740 /* Dial Example */,
+ B7A273D4134878D80086F740 /* Dial ExampleTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ B7A273AF134878D70086F740 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B7A273C0134878D70086F740 /* InfoPlist.strings in Resources */,
+ B7A273C9134878D80086F740 /* MainWindow.xib in Resources */,
+ B7A273CF134878D80086F740 /* Dial_ExampleViewController.xib in Resources */,
+ B7A2740013487D0B0086F740 /* Default.png in Resources */,
+ B7A2740B13487D2B0086F740 /* Default@2x.png in Resources */,
+ B7A2740D13487D310086F740 /* Icon@2x~iphone.png in Resources */,
+ B7A2740F13487D370086F740 /* Icon~iphone.png in Resources */,
+ B7245080134CF34D00A6146E /* bg@2x.png in Resources */,
+ B7245081134CF34D00A6146E /* overlay@2x.png in Resources */,
+ B7355A18134D2B3100E3CCE4 /* Digital-7.ttf in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B7A273D2134878D80086F740 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B7A273E0134878D80086F740 /* InfoPlist.strings in Resources */,
+ B7A273E3134878D80086F740 /* Dial_ExampleTests.h in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ B7A273D3134878D80086F740 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ B7A273AD134878D70086F740 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B7A273C3134878D70086F740 /* main.m in Sources */,
+ B7A273C6134878D80086F740 /* Dial_ExampleAppDelegate.m in Sources */,
+ B7A273CC134878D80086F740 /* Dial_ExampleViewController.m in Sources */,
+ B7A2741913487DD70086F740 /* DialController.m in Sources */,
+ B7A2741A13487DD70086F740 /* GlowLabel.m in Sources */,
+ B7A2741B13487DD70086F740 /* MultiDialViewController.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B7A273D0134878D80086F740 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B7A273E5134878D80086F740 /* Dial_ExampleTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ B7A273DA134878D80086F740 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = B7A273B0134878D70086F740 /* Dial Example */;
+ targetProxy = B7A273D9134878D80086F740 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ B7A273BE134878D70086F740 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ B7A273BF134878D70086F740 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+ B7A273C7134878D80086F740 /* MainWindow.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ B7A273C8134878D80086F740 /* en */,
+ );
+ name = MainWindow.xib;
+ sourceTree = "<group>";
+ };
+ B7A273CD134878D80086F740 /* Dial_ExampleViewController.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ B7A273CE134878D80086F740 /* en */,
+ );
+ name = Dial_ExampleViewController.xib;
+ sourceTree = "<group>";
+ };
+ B7A273DE134878D80086F740 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ B7A273DF134878D80086F740 /* en */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ B7A273E6134878D80086F740 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ B7A273E7134878D80086F740 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_VERSION = com.apple.compilers.llvmgcc42;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ SDKROOT = iphoneos;
+ };
+ name = Release;
+ };
+ B7A273E9134878D80086F740 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "Dial Example/Dial Example-Prefix.pch";
+ INFOPLIST_FILE = "Dial Example/Dial Example-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ B7A273EA134878D80086F740 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "Dial Example/Dial Example-Prefix.pch";
+ INFOPLIST_FILE = "Dial Example/Dial Example-Info.plist";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
+ B7A273EC134878D80086F740 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Dial Example.app/Dial Example";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(SDKROOT)/Developer/Library/Frameworks",
+ "$(DEVELOPER_LIBRARY_DIR)/Frameworks",
+ );
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "Dial ExampleTests/Dial ExampleTests-Prefix.pch";
+ INFOPLIST_FILE = "Dial ExampleTests/Dial ExampleTests-Info.plist";
+ OTHER_LDFLAGS = (
+ "-framework",
+ SenTestingKit,
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUNDLE_LOADER)";
+ WRAPPER_EXTENSION = octest;
+ };
+ name = Debug;
+ };
+ B7A273ED134878D80086F740 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Dial Example.app/Dial Example";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(SDKROOT)/Developer/Library/Frameworks",
+ "$(DEVELOPER_LIBRARY_DIR)/Frameworks",
+ );
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "Dial ExampleTests/Dial ExampleTests-Prefix.pch";
+ INFOPLIST_FILE = "Dial ExampleTests/Dial ExampleTests-Info.plist";
+ OTHER_LDFLAGS = (
+ "-framework",
+ SenTestingKit,
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUNDLE_LOADER)";
+ WRAPPER_EXTENSION = octest;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ B7A273AB134878D70086F740 /* Build configuration list for PBXProject "Dial Example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B7A273E6134878D80086F740 /* Debug */,
+ B7A273E7134878D80086F740 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B7A273E8134878D80086F740 /* Build configuration list for PBXNativeTarget "Dial Example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B7A273E9134878D80086F740 /* Debug */,
+ B7A273EA134878D80086F740 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B7A273EB134878D80086F740 /* Build configuration list for PBXNativeTarget "Dial ExampleTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B7A273EC134878D80086F740 /* Debug */,
+ B7A273ED134878D80086F740 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = B7A273A8134878D70086F740 /* Project object */;
+}
7 .../DialController/Example/Dial Example/Dial Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:Dial Example.xcodeproj">
+ </FileRef>
+</Workspace>
12,090 ...ial Example.xcodeproj/project.xcworkspace/xcuserdata/dimitris.xcuserdatad/UserInterfaceState.xcuserstate
12,090 additions, 0 deletions not shown
5 ...le/Dial Example/Dial Example.xcodeproj/xcuserdata/dimitris.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Bucket
+ type = "1"
+ version = "1.0">
+</Bucket>
86 ...mple/Dial Example/Dial Example.xcodeproj/xcuserdata/dimitris.xcuserdatad/xcschemes/Dial Example.xcscheme
@@ -0,0 +1,86 @@
+<?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 = "B7A273B0134878D70086F740"
+ BuildableName = "Dial Example.app"
+ BlueprintName = "Dial Example"
+ ReferencedContainer = "container:Dial Example.xcodeproj">
+ </BuildableReference>
+ </BuildActionEntry>
+ </BuildActionEntries>
+ </BuildAction>
+ <TestAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ buildConfiguration = "Debug">
+ <Testables>
+ <TestableReference
+ skipped = "NO">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "B7A273D4134878D80086F740"
+ BuildableName = "Dial ExampleTests.octest"
+ BlueprintName = "Dial ExampleTests"
+ ReferencedContainer = "container:Dial Example.xcodeproj">
+ </BuildableReference>
+ </TestableReference>
+ </Testables>
+ </TestAction>
+ <LaunchAction
+ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.GDB"
+ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.GDB"
+ displayScaleIsEnabled = "NO"
+ displayScale = "1.00"
+ launchStyle = "0"
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Debug">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "B7A273B0134878D70086F740"
+ BuildableName = "Dial Example.app"
+ BlueprintName = "Dial Example"
+ ReferencedContainer = "container:Dial Example.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ <AdditionalOptions>
+ </AdditionalOptions>
+ </LaunchAction>
+ <ProfileAction
+ displayScaleIsEnabled = "NO"
+ displayScale = "1.00"
+ shouldUseLaunchSchemeArgsEnv = "YES"
+ savedToolIdentifier = ""
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release">
+ <BuildableProductRunnable>
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "B7A273B0134878D70086F740"
+ BuildableName = "Dial Example.app"
+ BlueprintName = "Dial Example"
+ ReferencedContainer = "container:Dial Example.xcodeproj">
+ </BuildableReference>
+ </BuildableProductRunnable>
+ </ProfileAction>
+ <AnalyzeAction
+ buildConfiguration = "Debug">
+ </AnalyzeAction>
+ <ArchiveAction
+ buildConfiguration = "Release"
+ revealArchiveInOrganizer = "YES">
+ </ArchiveAction>
+</Scheme>
27 ...e/Dial Example/Dial Example.xcodeproj/xcuserdata/dimitris.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,27 @@
+<?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>Dial Example.xcscheme</key>
+ <dict>
+ <key>orderHint</key>
+ <integer>0</integer>
+ </dict>
+ </dict>
+ <key>SuppressBuildableAutocreation</key>
+ <dict>
+ <key>B7A273B0134878D70086F740</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ <key>B7A273D4134878D80086F740</key>
+ <dict>
+ <key>primary</key>
+ <true/>
+ </dict>
+ </dict>
+</dict>
+</plist>
55 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial Example-Info.plist
@@ -0,0 +1,55 @@
+<?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>CFBundleDocumentTypes</key>
+ <array/>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIconFiles</key>
+ <array>
+ <string>Icon@2x~iphone.png</string>
+ <string>Icon~iphone.png</string>
+ </array>
+ <key>CFBundleIdentifier</key>
+ <string>com.locus-delicti.example.${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>CFBundleURLTypes</key>
+ <array/>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>NSMainNibFile</key>
+ <string>MainWindow</string>
+ <key>UIAppFonts</key>
+ <array>
+ <string>Digital-7.ttf</string>
+ </array>
+ <key>UIStatusBarHidden</key>
+ <true/>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ </array>
+ <key>UTExportedTypeDeclarations</key>
+ <array/>
+ <key>UTImportedTypeDeclarations</key>
+ <array/>
+</dict>
+</plist>
14 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial Example-Prefix.pch
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'Dial Example' target in the 'Dial Example' project
+//
+
+#import <Availability.h>
+
+#ifndef __IPHONE_3_0
+#warning "This project uses features only available in iPhone SDK 3.0 and later."
+#endif
+
+#ifdef __OBJC__
+ #import <UIKit/UIKit.h>
+ #import <Foundation/Foundation.h>
+#endif
18 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial_ExampleAppDelegate.h
@@ -0,0 +1,18 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class Dial_ExampleViewController;
+
+@interface Dial_ExampleAppDelegate : NSObject <UIApplicationDelegate> {
+
+}
+
+@property (nonatomic, retain) IBOutlet UIWindow *window;
+
+@property (nonatomic, retain) IBOutlet Dial_ExampleViewController *viewController;
+
+@end
72 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial_ExampleAppDelegate.m
@@ -0,0 +1,72 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import "Dial_ExampleAppDelegate.h"
+
+#import "Dial_ExampleViewController.h"
+
+@implementation Dial_ExampleAppDelegate
+
+
+@synthesize window=_window;
+
+@synthesize viewController=_viewController;
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ // Override point for customization after application launch.
+
+ 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:.
+ */
+}
+
+- (void)dealloc
+{
+ [_window release];
+ [_viewController release];
+ [super dealloc];
+}
+
+@end
20 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial_ExampleViewController.h
@@ -0,0 +1,20 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "MultiDialViewController.h"
+
+@interface Dial_ExampleViewController : UIViewController <MultiDialViewControllerDelegate> {
+ MultiDialViewController *multiDialController;
+}
+
+@property (nonatomic, retain) IBOutlet UILabel *selectedStringLabel;
+@property (nonatomic, retain) IBOutlet UITextView *presetStringsView;
+
+- (IBAction)switchPresetStrings:(id)sender;
+- (IBAction)spinToRandom:(id)sender;
+
+@end
87 ViewControllers/DialController/Example/Dial Example/Dial Example/Dial_ExampleViewController.m
@@ -0,0 +1,87 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import "Dial_ExampleViewController.h"
+
+#import "MultiDialViewController.h"
+
+@implementation Dial_ExampleViewController
+
+@synthesize selectedStringLabel, presetStringsView;
+
+- (void)dealloc
+{
+ [multiDialController release];
+ multiDialController = nil;
+
+ self.selectedStringLabel = nil;
+ self.presetStringsView = nil;
+
+ [super dealloc];
+}
+
+- (void)didReceiveMemoryWarning
+{
+ // Releases the view if it doesn't have a superview.
+ [super didReceiveMemoryWarning];
+
+ // Release any cached data, images, etc that aren't in use.
+}
+
+#pragma mark - View lifecycle
+
+
+// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
+- (void)viewDidLoad
+{
+ [super viewDidLoad];
+
+ multiDialController = [[MultiDialViewController alloc] init];
+ multiDialController.delegate = self;
+ multiDialController.view.frame = CGRectOffset(multiDialController.view.frame, 0.0, 340.0);
+ [self.view addSubview:multiDialController.view];
+
+ //init
+ [self switchPresetStrings:nil];
+}
+
+
+- (void)viewDidUnload
+{
+ [super viewDidUnload];
+
+ [multiDialController release];
+ multiDialController = nil;
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+ // Return YES for supported orientations
+ return (interfaceOrientation == UIInterfaceOrientationPortrait);
+}
+
+#pragma mark IBActions
+
+- (void)switchPresetStrings:(id)sender {
+ if ([(UISwitch *)sender isOn]) {
+ multiDialController.presetStrings = [[[NSArray alloc] initWithObjects:@"000A", @"111A", @"222B", @"333C", @"360D", nil] autorelease];
+ }
+ else {
+ multiDialController.presetStrings = nil;
+ }
+ self.presetStringsView.text = [NSString stringWithFormat:@"%@", multiDialController.presetStrings];
+}
+
+- (void)spinToRandom:(id)sender {
+ [multiDialController spinToRandomString:YES];
+}
+
+#pragma mark MultiDialViewControllerDelegate methods
+
+- (void)multiDialViewController:(MultiDialViewController *)controller didSelectString:(NSString *)string {
+ self.selectedStringLabel.text = string;
+}
+
+@end
504 ViewControllers/DialController/Example/Dial Example/Dial Example/en.lproj/Dial_ExampleViewController.xib
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1056</int>
+ <string key="IBDocument.SystemVersion">10J869</string>
+ <string key="IBDocument.InterfaceBuilderVersion">1305</string>
+ <string key="IBDocument.AppKitVersion">1038.35</string>
+ <string key="IBDocument.HIToolboxVersion">461.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="NS.object.0">300</string>
+ </object>
+ <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>IBProxyObject</string>
+ <string>IBUIImageView</string>
+ <string>IBUILabel</string>
+ <string>IBUISwitch</string>
+ <string>IBUIButton</string>
+ <string>IBUITextView</string>
+ <string>IBUIView</string>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="dict.values" ref="0"/>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <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>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBUIImageView" id="222818038">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">274</int>
+ <string key="NSFrameSize">{320, 480}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="473387883"/>
+ <bool key="IBUIUserInteractionEnabled">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <object class="NSCustomResource" key="IBUIImage">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">bg@2x.png</string>
+ </object>
+ </object>
+ <object class="IBUIButton" id="473387883">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{14, 21}, {293, 198}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="158740742"/>
+ <bool key="IBUIOpaque">NO</bool>
+ <float key="IBUIAlpha">0.30000001192092896</float>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <bool key="IBUIEnabled">NO</bool>
+ <int key="IBUIContentHorizontalAlignment">0</int>
+ <int key="IBUIContentVerticalAlignment">0</int>
+ <object class="NSFont" key="IBUIFont" id="144096479">
+ <string key="NSName">Helvetica-Bold</string>
+ <double key="NSSize">15</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <int key="IBUIButtonType">1</int>
+ <object class="NSColor" key="IBUIHighlightedTitleColor" id="398333792">
+ <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="1059368241">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC41AA</bytes>
+ </object>
+ </object>
+ <object class="IBUILabel" id="525387105">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{20, 273}, {280, 31}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView"/>
+ <bool key="IBUIOpaque">NO</bool>
+ <bool key="IBUIClipsSubviews">YES</bool>
+ <int key="IBUIContentMode">4</int>
+ <bool key="IBUIUserInteractionEnabled">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <string key="IBUIText">Label</string>
+ <object class="NSFont" key="IBUIFont">
+ <string key="NSName">Helvetica</string>
+ <double key="NSSize">24</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <object class="NSColor" key="IBUITextColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MCAwIDAAA</bytes>
+ </object>
+ <nil key="IBUIHighlightedColor"/>
+ <int key="IBUIBaselineAdjustment">1</int>
+ <float key="IBUIMinimumFontSize">10</float>
+ <int key="IBUITextAlignment">1</int>
+ </object>
+ <object class="IBUILabel" id="980172187">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{20, 249}, {280, 31}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="525387105"/>
+ <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">Selected String</string>
+ <object class="NSFont" key="IBUIFont" id="132576779">
+ <string key="NSName">Helvetica</string>
+ <double key="NSSize">17</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <object class="NSColor" key="IBUITextColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC4yNzE3MzkxMzA0IDAuMjcxNzM5MTMwNCAwLjI3MTczOTEzMDQAA</bytes>
+ </object>
+ <nil key="IBUIHighlightedColor"/>
+ <int key="IBUIBaselineAdjustment">1</int>
+ <float key="IBUIMinimumFontSize">10</float>
+ <int key="IBUITextAlignment">1</int>
+ </object>
+ <object class="IBUILabel" id="757709330">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{28, 28}, {121, 31}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="461165200"/>
+ <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">Snap to presets</string>
+ <reference key="IBUIFont" ref="132576779"/>
+ <object class="NSColor" key="IBUITextColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC4yOTg5MTMwNDM1IDAuMjk4OTEzMDQzNSAwLjI5ODkxMzA0MzUAA</bytes>
+ </object>
+ <nil key="IBUIHighlightedColor"/>
+ <int key="IBUIBaselineAdjustment">1</int>
+ <float key="IBUIMinimumFontSize">10</float>
+ </object>
+ <object class="IBUISwitch" id="461165200">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{203, 30}, {94, 27}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="433086029"/>
+ <bool key="IBUIOpaque">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <int key="IBUIContentHorizontalAlignment">0</int>
+ <int key="IBUIContentVerticalAlignment">0</int>
+ </object>
+ <object class="IBUITextView" id="158740742">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{20, 54}, {280, 152}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="757709330"/>
+ <object class="NSColor" key="IBUIBackgroundColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MSAxIDEgMAA</bytes>
+ </object>
+ <bool key="IBUIClipsSubviews">YES</bool>
+ <bool key="IBUIMultipleTouchEnabled">YES</bool>
+ <bool key="IBUIUserInteractionEnabled">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <bool key="IBUIEditable">NO</bool>
+ <string key="IBUIText">Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.</string>
+ <object class="IBUITextInputTraits" key="IBUITextInputTraits">
+ <int key="IBUIAutocapitalizationType">2</int>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ </object>
+ </object>
+ <object class="IBUIButton" id="433086029">
+ <reference key="NSNextResponder" ref="774585933"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{225, 180}, {72, 30}}</string>
+ <reference key="NSSuperview" ref="774585933"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="980172187"/>
+ <bool key="IBUIOpaque">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <int key="IBUIContentHorizontalAlignment">0</int>
+ <int key="IBUIContentVerticalAlignment">0</int>
+ <reference key="IBUIFont" ref="144096479"/>
+ <int key="IBUIButtonType">1</int>
+ <string key="IBUINormalTitle">spin</string>
+ <reference key="IBUIHighlightedTitleColor" ref="398333792"/>
+ <object class="NSColor" key="IBUINormalTitleColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MC4wNzU5MTU4NzcwNyAwLjEyMjM2ODQ0NjEgMC4yMDY1MjE3MzkxAA</bytes>
+ </object>
+ <reference key="IBUINormalTitleShadowColor" ref="1059368241"/>
+ </object>
+ </object>
+ <string key="NSFrameSize">{320, 480}</string>
+ <reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="222818038"/>
+ <object class="NSColor" key="IBUIBackgroundColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC43NQA</bytes>
+ <object class="NSColorSpace" key="NSCustomColorSpace">
+ <int key="NSID">2</int>
+ </object>
+ </object>
+ <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <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="IBCocoaTouchOutletConnection" key="connection">
+ <string key="label">selectedStringLabel</string>
+ <reference key="source" ref="372490531"/>
+ <reference key="destination" ref="525387105"/>
+ </object>
+ <int key="connectionID">14</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchOutletConnection" key="connection">
+ <string key="label">presetStringsView</string>
+ <reference key="source" ref="372490531"/>
+ <reference key="destination" ref="158740742"/>
+ </object>
+ <int key="connectionID">15</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchEventConnection" key="connection">
+ <string key="label">switchPresetStrings:</string>
+ <reference key="source" ref="461165200"/>
+ <reference key="destination" ref="372490531"/>
+ <int key="IBEventType">13</int>
+ </object>
+ <int key="connectionID">16</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchEventConnection" key="connection">
+ <string key="label">spinToRandom:</string>
+ <reference key="source" ref="433086029"/>
+ <reference key="destination" ref="372490531"/>
+ <int key="IBEventType">7</int>
+ </object>
+ <int key="connectionID">19</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <reference key="object" ref="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"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="222818038"/>
+ <reference ref="525387105"/>
+ <reference ref="461165200"/>
+ <reference ref="757709330"/>
+ <reference ref="158740742"/>
+ <reference ref="980172187"/>
+ <reference ref="473387883"/>
+ <reference ref="433086029"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">8</int>
+ <reference key="object" ref="222818038"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">9</int>
+ <reference key="object" ref="525387105"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">10</int>
+ <reference key="object" ref="461165200"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">11</int>
+ <reference key="object" ref="757709330"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="158740742"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="980172187"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">17</int>
+ <reference key="object" ref="473387883"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">18</int>
+ <reference key="object" ref="433086029"/>
+ <reference key="parent" ref="774585933"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.CustomClassName</string>
+ <string>-2.CustomClassName</string>
+ <string>10.IBPluginDependency</string>
+ <string>11.IBPluginDependency</string>
+ <string>12.IBPluginDependency</string>
+ <string>13.IBPluginDependency</string>
+ <string>17.IBPluginDependency</string>
+ <string>18.IBPluginDependency</string>
+ <string>6.IBEditorWindowLastContentRect</string>
+ <string>6.IBPluginDependency</string>
+ <string>8.IBPluginDependency</string>
+ <string>9.IBPluginDependency</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>Dial_ExampleViewController</string>
+ <string>UIResponder</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>{{239, 654}, {320, 480}}</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <reference key="dict.values" ref="0"/>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <reference key="dict.values" ref="0"/>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">19</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">Dial_ExampleViewController</string>
+ <string key="superclassName">UIViewController</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>spinToRandom:</string>
+ <string>switchPresetStrings:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>id</string>
+ <string>id</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>spinToRandom:</string>
+ <string>switchPresetStrings:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">spinToRandom:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">switchPresetStrings:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>presetStringsView</string>
+ <string>selectedStringLabel</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>UITextView</string>
+ <string>UILabel</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>presetStringsView</string>
+ <string>selectedStringLabel</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">presetStringsView</string>
+ <string key="candidateClassName">UITextView</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">selectedStringLabel</string>
+ <string key="candidateClassName">UILabel</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">./Classes/Dial_ExampleViewController.h</string>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
+ <integer value="3100" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+ <string key="NS.key.0">bg@2x.png</string>
+ <string key="NS.object.0">{640, 960}</string>
+ </object>
+ <string key="IBCocoaTouchPluginVersion">300</string>
+ </data>
+</archive>
2  ViewControllers/DialController/Example/Dial Example/Dial Example/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
444 ViewControllers/DialController/Example/Dial Example/Dial Example/en.lproj/MainWindow.xib
@@ -0,0 +1,444 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1024</int>
+ <string key="IBDocument.SystemVersion">10D571</string>
+ <string key="IBDocument.InterfaceBuilderVersion">786</string>
+ <string key="IBDocument.AppKitVersion">1038.29</string>
+ <string key="IBDocument.HIToolboxVersion">460.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string key="NS.object.0">112</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="10"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBProxyObject" id="841351856">
+ <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ </object>
+ <object class="IBProxyObject" id="427554174">
+ <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ </object>
+ <object class="IBUICustomObject" id="664661524">
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ </object>
+ <object class="IBUIViewController" id="943309135">
+ <string key="IBUINibName">Dial_ExampleViewController</string>
+ <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+ <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
+ <int key="interfaceOrientation">1</int>
+ </object>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <bool key="IBUIHorizontal">NO</bool>
+ </object>
+ <object class="IBUIWindow" id="117978783">
+ <nil key="NSNextResponder"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrameSize">{320, 480}</string>
+ <object class="NSColor" key="IBUIBackgroundColor">
+ <int key="NSColorSpace">1</int>
+ <bytes key="NSRGB">MSAxIDEAA</bytes>
+ </object>
+ <bool key="IBUIOpaque">NO</bool>
+ <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
+ <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+ <bool key="IBUIResizesToFullScreen">YES</bool>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchOutletConnection" key="connection">
+ <string key="label">delegate</string>
+ <reference key="source" ref="841351856"/>
+ <reference key="destination" ref="664661524"/>
+ </object>
+ <int key="connectionID">4</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchOutletConnection" key="connection">
+ <string key="label">viewController</string>
+ <reference key="source" ref="664661524"/>
+ <reference key="destination" ref="943309135"/>
+ </object>
+ <int key="connectionID">11</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBCocoaTouchOutletConnection" key="connection">
+ <string key="label">window</string>
+ <reference key="source" ref="664661524"/>
+ <reference key="destination" ref="117978783"/>
+ </object>
+ <int key="connectionID">14</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <reference key="object" ref="0"/>
+ <reference key="children" ref="1000"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="841351856"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">3</int>
+ <reference key="object" ref="664661524"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Dial_Example App Delegate</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="427554174"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">10</int>
+ <reference key="object" ref="943309135"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="117978783"/>
+ <reference key="parent" ref="0"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>-1.CustomClassName</string>
+ <string>-2.CustomClassName</string>
+ <string>10.CustomClassName</string>
+ <string>10.IBEditorWindowLastContentRect</string>
+ <string>10.IBPluginDependency</string>
+ <string>12.IBEditorWindowLastContentRect</string>
+ <string>12.IBPluginDependency</string>
+ <string>3.CustomClassName</string>
+ <string>3.IBPluginDependency</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>UIApplication</string>
+ <string>UIResponder</string>
+ <string>Dial_ExampleViewController</string>
+ <string>{{234, 376}, {320, 480}}</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>{{525, 346}, {320, 480}}</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ <string>Dial_ExampleAppDelegate</string>
+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">15</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIWindow</string>
+ <string key="superclassName">UIView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">Dial_ExampleAppDelegate</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>viewController</string>
+ <string>window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>Dial_ExampleViewController</string>
+ <string>UIWindow</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>viewController</string>
+ <string>window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">viewController</string>
+ <string key="candidateClassName">Dial_ExampleViewController</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">window</string>
+ <string key="candidateClassName">UIWindow</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">Dial_ExampleAppDelegate.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">Dial_ExampleAppDelegate</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBUserSource</string>
+ <string key="minorKey"/>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">Dial_ExampleViewController</string>
+ <string key="superclassName">UIViewController</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">Dial_ExampleViewController.h</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSError.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="356479594">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIApplication</string>
+ <string key="superclassName">UIResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UIApplication.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIResponder</string>
+ <string key="superclassName">NSObject</string>
+ <reference key="sourceIdentifier" ref="356479594"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UISearchBar</string>
+ <string key="superclassName">UIView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UISearchDisplayController</string>
+ <string key="superclassName">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIView</string>
+ <string key="superclassName">UIResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UIView.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIViewController</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIViewController</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIViewController</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIViewController</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIViewController</string>
+ <string key="superclassName">UIResponder</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">UIWindow</string>
+ <string key="superclassName">UIView</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBFrameworkSource</string>
+ <string key="minorKey">UIKit.framework/Headers/UIWindow.h</string>
+ </object>
+ </object>
+ </object>
+ </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>
+ <integer value="1024" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
+ <integer value="3100" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <string key="IBDocument.LastKnownRelativeProjectPath">Dial Example.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ <string key="IBCocoaTouchPluginVersion">112</string>
+ </data>
+</archive>
14 ViewControllers/DialController/Example/Dial Example/Dial Example/main.m
@@ -0,0 +1,14 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+int main(int argc, char *argv[])
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ int retVal = UIApplicationMain(argc, argv, nil, nil);
+ [pool release];
+ return retVal;
+}
22 ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/Dial ExampleTests-Info.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>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>com.locus-delicti.example.dial.${PRODUCT_NAME:rfc1034identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>BNDL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+</dict>
+</plist>
7 ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/Dial ExampleTests-Prefix.pch
@@ -0,0 +1,7 @@
+//
+// Prefix header for all source files of the 'Dial ExampleTests' target in the 'Dial ExampleTests' project
+//
+
+#ifdef __OBJC__
+ #import <UIKit/UIKit.h>
+#endif
17 ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/Dial_ExampleTests.h
@@ -0,0 +1,17 @@
+//
+// Dial_ExampleTests.h
+// Dial ExampleTests
+//
+// Created by Dimitris on 03/04/2011.
+// Copyright 2011 unit9.com. All rights reserved.
+//
+
+#import <SenTestingKit/SenTestingKit.h>
+
+
+@interface Dial_ExampleTests : SenTestCase {
+@private
+
+}
+
+@end
33 ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/Dial_ExampleTests.m
@@ -0,0 +1,33 @@
+//
+// Dial_ExampleTests.m
+// Dial ExampleTests
+//
+// Created by Dimitris on 03/04/2011.
+// Copyright 2011 unit9.com. All rights reserved.
+//
+
+#import "Dial_ExampleTests.h"
+
+
+@implementation Dial_ExampleTests
+
+- (void)setUp
+{
+ [super setUp];
+
+ // Set-up code here.
+}
+
+- (void)tearDown
+{
+ // Tear-down code here.
+
+ [super tearDown];
+}
+
+- (void)testExample
+{
+ STFail(@"Unit tests are not implemented yet in Dial ExampleTests");
+}
+
+@end
2  ViewControllers/DialController/Example/Dial Example/Dial ExampleTests/en.lproj/InfoPlist.strings
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
BIN  ViewControllers/DialController/Example/Dial Example/Icon@2x~iphone.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  ViewControllers/DialController/Example/Dial Example/Icon~iphone.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  ViewControllers/DialController/Example/Dial Example/Resources/Assets.fla
Binary file not shown
BIN  ViewControllers/DialController/Example/Dial Example/Resources/Digital-7.ttf
Binary file not shown
BIN  ViewControllers/DialController/Example/Dial Example/Resources/bg@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
BIN  ViewControllers/DialController/Example/Dial Example/Resources/overlay@2x.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 ViewControllers/DialController/GlowLabel.h
@@ -0,0 +1,22 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface GlowLabel : UILabel {
+ BOOL selected;
+ UIColor *selectedColor;
+ UIColor *unselectedColor;
+}
+
+@property (nonatomic, retain) UIColor *selectedColor;
+@property (nonatomic, retain) UIColor *unselectedColor;
+
+- (void)setSelected:(BOOL)isSelected;
+- (BOOL)selected;
+
+
+@end
57 ViewControllers/DialController/GlowLabel.m
@@ -0,0 +1,57 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import "GlowLabel.h"
+
+#define GLOW_OFFSET CGSizeZero
+#define GLOW_RADIUS 10
+
+
+@implementation GlowLabel
+
+@synthesize selectedColor, unselectedColor;
+
+- (void)dealloc {
+ self.selectedColor = nil;
+ self.unselectedColor = nil;
+ [super dealloc];
+}
+
+- (id)initWithFrame:(CGRect)frame {
+ self = [super initWithFrame:frame];
+ if (self) {
+ self.textAlignment = UITextAlignmentCenter;
+ self.font = [UIFont fontWithName:@"Digital-7" size:60];
+ self.backgroundColor = [UIColor clearColor];
+
+ //initialize with default colors
+ self.selectedColor = [UIColor greenColor];
+ self.unselectedColor = [UIColor grayColor];
+ //init as unselected
+ selected = NO;
+ }
+ return self;
+}
+
+- (void)setSelected:(BOOL)isSelected {
+ selected = isSelected;
+ self.textColor = (selected ? self.selectedColor : self.unselectedColor);
+ [self setNeedsDisplay];
+}
+
+- (BOOL)selected {
+ return selected;
+}
+
+- (void)drawTextInRect:(CGRect)rect
+{
+ if (selected) {
+ CGContextRef context = UIGraphicsGetCurrentContext();
+ CGContextSetShadowWithColor(context, GLOW_OFFSET, GLOW_RADIUS, [self.selectedColor CGColor]);
+ }
+ [super drawTextInRect:rect];
+}
+
+@end
39 ViewControllers/DialController/MultiDialViewController.h
@@ -0,0 +1,39 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "DialController.h"
+
+@protocol MultiDialViewControllerDelegate;
+
+@interface MultiDialViewController : UIViewController <UIAccelerometerDelegate, DialControllerDelegate> {
+ id<MultiDialViewControllerDelegate> delegate;
+
+ DialController *dial1;
+ DialController *dial2;
+ DialController *dial3;
+ DialController *dial4;
+
+ //optional array of preset values
+ NSArray *presetStrings;
+}
+
+@property (nonatomic, assign) id<MultiDialViewControllerDelegate> delegate;
+
+@property (nonatomic, retain) DialController *dial1;
+@property (nonatomic, retain) DialController *dial2;
+@property (nonatomic, retain) DialController *dial3;
+@property (nonatomic, retain) DialController *dial4;
+
+@property (nonatomic, retain) NSArray *presetStrings;
+
+- (void)spinToRandomString:(BOOL)preset;
+
+@end
+
+
+@protocol MultiDialViewControllerDelegate
+- (void)multiDialViewController:(MultiDialViewController *)controller didSelectString:(NSString *)string;
+@end
152 ViewControllers/DialController/MultiDialViewController.m
@@ -0,0 +1,152 @@
+//
+// Created by Dimitris Doukas on 25/03/2011.
+// Copyright 2011 doukasd.com. All rights reserved.
+//
+
+#import "MultiDialViewController.h"
+#import "GlowLabel.h"
+#import "DialController.h"
+
+#define DIAL_OFFSET_X 40
+#define DIAL_OFFSET_Y 0
+#define DIAL_WIDTH 60
+#define DIAL_HEIGHT 100
+
+
+@implementation MultiDialViewController
+
+@synthesize presetStrings, delegate;
+@synthesize dial1, dial2, dial3, dial4;
+
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ //subscribe to accelerometer calls
+ [[UIAccelerometer sharedAccelerometer] setDelegate:self];
+ [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0/60.0];
+
+ //add dials and populate with these values...
+ NSArray *numbers = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", nil];
+ NSArray *letters = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", nil];
+ int dialCount = 0;
+
+ self.dial1 = [[[DialController alloc] initWithDialFrame:CGRectMake(DIAL_OFFSET_X + dialCount++ * DIAL_WIDTH, DIAL_OFFSET_Y, DIAL_WIDTH, DIAL_HEIGHT) strings:numbers] autorelease];
+ self.dial1.delegate = self;
+ [self.view addSubview:self.dial1.view];
+
+ self.dial2 = [[[DialController alloc] initWithDialFrame:CGRectMake(DIAL_OFFSET_X + dialCount++ * DIAL_WIDTH, DIAL_OFFSET_Y, DIAL_WIDTH, DIAL_HEIGHT) strings:numbers] autorelease];
+ self.dial2.delegate = self;
+ [self.view addSubview:self.dial2.view];
+
+ self.dial3 = [[[DialController alloc] initWithDialFrame:CGRectMake(DIAL_OFFSET_X + dialCount++ * DIAL_WIDTH, DIAL_OFFSET_Y, DIAL_WIDTH, DIAL_HEIGHT) strings:numbers] autorelease];
+ self.dial3.delegate = self;
+ [self.view addSubview:self.dial3.view];
+
+ self.dial4 = [[[DialController alloc] initWithDialFrame:CGRectMake(DIAL_OFFSET_X + dialCount++ * DIAL_WIDTH, DIAL_OFFSET_Y, DIAL_WIDTH, DIAL_HEIGHT) strings:letters] autorelease];
+ self.dial4.delegate = self;
+ [self.view addSubview:self.dial4.view];
+
+ //add on overlay image
+ UIImageView *overlayView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"overlay.png"]] autorelease];
+ overlayView.center = CGPointMake(self.dial2.view.frame.origin.x + self.dial2.view.frame.size.width, self.dial1.view.center.y);
+ [self.view addSubview:overlayView];
+
+ //select initial value
+ [self spinToRandomString:NO];
+}
+
+- (void)viewDidUnload {
+ self.presetStrings = nil;
+ self.delegate = nil;
+ [[UIAccelerometer sharedAccelerometer] setDelegate:nil];
+ [super viewDidUnload];
+}
+
+//spin to random string
+//is "preset" is true, spin to random preset string
+- (void)spinToRandomString:(BOOL)preset {
+ if (preset && self.presetStrings != nil) {
+ //spin to preset
+ int selectedStringIndex = random() % [self.presetStrings count];
+ NSString *selectedString = [self.presetStrings objectAtIndex:selectedStringIndex];
+ NSLog(@"autoselecting string %@", selectedString);
+
+ //call all the dials
+ [self.dial1 spinToString:[selectedString substringWithRange:NSMakeRange(0, 1)]];
+ [self.dial2 spinToString:[selectedString substringWithRange:NSMakeRange(1, 1)]];
+ [self.dial3 spinToString:[selectedString substringWithRange:NSMakeRange(2, 1)]];
+ [self.dial4 spinToString:[selectedString substringWithRange:NSMakeRange(3, 1)]];
+ }
+ else {
+ //spin to random
+ [self.dial1 spinToRandomString];
+ [self.dial2 spinToRandomString];
+ [self.dial3 spinToRandomString];
+ [self.dial4 spinToRandomString];
+ }
+}
+
+#pragma mark DialControllerDelegate methods
+
+- (void)dialControllerDidSpin:(DialController *)dial {
+ //...
+}
+
+- (void)dialController:(DialController *)dial didSnapToString:(NSString *)value {
+ NSLog(@"%@>%@", [self class], NSStringFromSelector(_cmd));
+
+ if (!self.dial1.isSpinning && !self.