I am working on a Kid's Book App for iPad. It has a UIView which loads UIImageView to display UIImages (JPEG's), user can swipe on images to browse through pages - everything works fine. Now I wanted to add some interactivity to some of the pages by adding another UIImageView which would load a PNG file and on Tap Gesture I want to animate them... Below is the code snippet...
I added a Tap Gesture to UIView inside viewDidLoad. viewDidLoad calls loadPage and inside loadPage I am programatically adding a UIImageView (imageAnimation) containing a PNG file and also assigning a tag to it so that I can play animations based on tags inside handleTap routine. For some reason, the switch statement in handleTap execute ONLY for case 1, for other cases handleTap routine is NEVER called. What wrong am I doing?
I added a Tap Gesture to UIView inside viewDidLoad. viewDidLoad calls loadPage and inside loadPage I am programatically adding a UIImageView (imageAnimation) containing a PNG file and also assigning a tag to it so that I can play animations based on tags inside handleTap routine. For some reason, the switch statement in handleTap execute ONLY for case 1, for other cases handleTap routine is NEVER called. What wrong am I doing?
Code:
#import "KidsViewController.h"
@implementation KidsViewController
@synthesize imageAnimation;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UISlider class]] || [touch.view isKindOfClass:[UIButton class]])
{
return NO;
}
return YES;
}
- (void)handleTap:(UITapGestureRecognizer *)recognizer {
NSLog(@"KidsViewController ==> handleTap.");
switch (((UIGestureRecognizer *)recognizer).view.tag)
{
case 1:
//...
NSLog(@"KidsViewController ==> handleTap. Switch Case: %d", 1);
break;
case 2:
//...
NSLog(@"KidsViewController ==> handleTap. Switch Case: %d", 2);
break;
case 3:
//...
NSLog(@"KidsViewController ==> handleTap. Switch Case: %d", 3);
break;
default:
NSLog(@"KidsViewController ==> handleTap. Switch Case: DEFAULT");
break;
}
}
- (void)viewDidLoad {
pageCount=12;
pageNum=1; // *** pageNum gets incremented/decremented when user swipes left or right on the screen
//put imageviews in place
imageNext.frame=CGRectMake(0,0-crop,screenwidth,screenheight+(crop*2));
imageCurrent.frame=CGRectMake(0,0-crop,screenwidth,screenheight+(crop*2));
[self loadPage];
imageCurrent.image = [UIImage imageWithContentsOfFile:[self filePathForLanguage:language pageNumber:pageNum fileType:@"jpg"]];
//TAP GESTURE
UITapGestureRecognizer *tapRecognizer;
tapRecognizer=[[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleTap:)];
tapRecognizer.numberOfTapsRequired=1;
tapRecognizer.numberOfTouchesRequired=1;
[self.imageAnimation addGestureRecognizer:tapRecognizer];
tapRecognizer.delegate = self;
[tapRecognizer release];
}
-(void)loadPage{
imageNext.image = [UIImage imageWithContentsOfFile:[self filePathForLanguage:language pageNumber:pageNum fileType:@"jpg"]]; //[UIImage imageWithContentsOfFile:pathFilename];
switch (pageNum)
{
case 1:
//...
NSLog(@"KidsViewController ==> loadPage. Switch Case: %d", pageNum);
UIImage *image = [UIImage imageNamed:@"P3-stilts_00000.png"];
CGRect frame = CGRectMake(0, 0, image.size.width, image.size.height);
imageAnimation = [[UIImageView alloc] initWithFrame:frame];
imageAnimation.userInteractionEnabled = YES;
imageAnimation.image = image;
imageAnimation.tag = pageNum;
[self.view addSubview:imageAnimation];
[image release];
break;
case 2:
//...
NSLog(@"KidsViewController ==> loadPage. Switch Case: %d", pageNum);
imageAnimation.image = nil;
[imageAnimation setCenter:CGPointMake(-100,-100)];
break;
case 3:
//...
NSLog(@"KidsViewController ==> loadPage. Switch Case: %d", pageNum);
UIImage *image3 = [UIImage imageNamed:@"bug.png"];
CGRect bugFrame = CGRectMake(0, 0, image3.size.width, image3.size.height);
imageAnimation = [[UIImageView alloc] initWithFrame:bugFrame];
imageAnimation.userInteractionEnabled = YES;
imageAnimation.image = image3;
imageAnimation.tag = pageNum;
[self.view addSubview:imageAnimation];
[image3 release];
break;
default:
NSLog(@"KidsViewController ==> loadPage. Switch Case: DEFAULT");
[imageAnimation setCenter:CGPointMake(-100,-100)];
break;
}
}
- (void)dealloc {
[setupViewController release];
[imageCurrent release];
[imageNext release];
[imageShadow release];
[imageMenuBar release];
[imageAnimation release];
[super dealloc];
}
@end
Last edited: