Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #import "SlideViewer.h"
00012
00013 @interface SlideViewer()
00014
00015 -(void)initSlides;
00016 -(void)initNavButtons;
00017 -(void)onPreviousNavButtonPressed;
00018 -(void)onNextNavButtonPressed;
00019 -(void)updateNavButtons;
00020
00021 @end
00022
00023 @implementation SlideViewer
00024
00025 #pragma mark -
00026 #pragma mark Memory Allocation
00027
00031 -(void)dealloc
00032 {
00033 [slides release];
00034 [super dealloc];
00035 }
00036
00037 #pragma mark -
00038 #pragma mark Initialisation
00039
00044 -(id)initWithSlides:(CCArray*)_slides
00045 {
00046 self = [super init];
00047
00048 if (self != nil)
00049 {
00050 slides = [[CCArray alloc] initWithArray:_slides];
00051 slideNumber = 0;
00052
00053 CGSize winSize = [CCDirector sharedDirector].winSize;
00054 centrePosition = ccp(winSize.width/2, winSize.height/2);
00055 leftPosition = ccp(0-winSize.width/2, winSize.height/2);
00056 rightPosition = ccp(winSize.width*1.5, winSize.height/2);
00057 slideAnimationDuration = 0.75f;
00058
00059 [self initSlides];
00060 [self initNavButtons];
00061 [self updateNavButtons];
00062 }
00063 return self;
00064 }
00065
00066 #pragma mark -
00067
00071 -(void)initSlides
00072 {
00073 for (int i = 0; i < [slides count]; i++)
00074 {
00075 Slide* slide = [slides objectAtIndex:i];
00076 [self addChild:slide];
00077 [slide update];
00078
00079 if(i == 0)
00080 {
00081 currentSlide = slide;
00082 slide.position = centrePosition;
00083 }
00084 else slide.position = rightPosition;
00085 }
00086 }
00087
00091 -(void)initNavButtons
00092 {
00093 CGSize winSize = [CCDirector sharedDirector].winSize;
00094
00095
00096 previousButton = [CCMenuItemImage itemFromNormalImage:@"Previous.png" selectedImage:@"Previous_down.png" disabledImage:nil target:self selector:@selector(onPreviousNavButtonPressed)];
00097 nextButton = [CCMenuItemImage itemFromNormalImage:@"Next.png" selectedImage:@"Next_down.png" disabledImage:nil target:self selector:@selector(onNextNavButtonPressed)];
00098
00099
00100 navButtons = [CCMenu menuWithItems:previousButton, nextButton, nil];
00101
00102
00103 [nextButton setPosition:ccp(nextButton.position.x+420, nextButton.position.y)];
00104 [navButtons setPosition: ccp(30, winSize.height/2)];
00105
00106
00107 [self addChild:navButtons];
00108 }
00109
00110 #pragma mark -
00111 #pragma mark Event Handling
00112
00116 -(void)onPreviousNavButtonPressed
00117 {
00118 if([currentSlide numberOfRunningActions] > 0) return;
00119
00120 slideNumber--;
00121
00122
00123 id animateOutAction = [CCMoveTo actionWithDuration:slideAnimationDuration position:rightPosition];
00124 [currentSlide runAction:animateOutAction];
00125
00126 currentSlide = [slides objectAtIndex:slideNumber];
00127
00128
00129 id animateInAction = [CCMoveTo actionWithDuration:slideAnimationDuration position:centrePosition];
00130 [currentSlide runAction:animateInAction];
00131
00132 [self updateNavButtons];
00133 }
00134
00138 -(void)onNextNavButtonPressed
00139 {
00140 if([currentSlide numberOfRunningActions] > 0) return;
00141
00142 slideNumber++;
00143
00144
00145 id animateOutAction = [CCMoveTo actionWithDuration:slideAnimationDuration position:leftPosition];
00146 [currentSlide runAction:animateOutAction];
00147
00148 currentSlide = [slides objectAtIndex:slideNumber];
00149
00150
00151 id animateInAction = [CCMoveTo actionWithDuration:slideAnimationDuration position:centrePosition];
00152 [currentSlide runAction:animateInAction];
00153
00154 [self updateNavButtons];
00155 }
00156
00157 -(void)updateNavButtons
00158 {
00159 int disabledOpacity = 50;
00160
00161
00162 BOOL previousEnabled = (slideNumber > 0) ? YES : NO;
00163 [previousButton setIsEnabled:previousEnabled];
00164 [previousButton setOpacity:(previousEnabled) ? 255 : disabledOpacity];
00165
00166
00167 BOOL nextEnabled = (slideNumber < [slides count]-1) ? YES : NO;
00168 [nextButton setIsEnabled:nextEnabled];
00169 [nextButton setOpacity:(nextEnabled) ? 255 : disabledOpacity];
00170 }
00171
00172 @end