iPad用のKid's Book Appで作業しています。 UIImageViewをロードしてUIImages(JPEG)を表示するUIViewがあり、ユーザーが画像をスワイプしてページをブラウズできるようになりました。今度は、いくつかのページにいくつかのインタラクティブ機能を追加したいのですが、別のUIImageViewを追加してPNGファイルをロードし、Tapジェスチャーでアニメーションを作成したいと思います...UIImageViewタグとタップジェスチャーの問題
Tap viewDidLoad内のUIViewにジェスチャーします。 viewDidLoadはloadPageとloadPageを呼び出します。PNGファイルを含むUIImageView(imageAnimation)をプログラムで追加し、handleTapルーチン内のタグに基づいてアニメーションを再生できるようにタグを割り当てています。なんらかの理由で、handleTapのswitch文はcase 1に対してのみ実行され、他の場合にはhandleTapルーチンは呼び出されません。私は何をしていますか?
#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;
//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
ジェスチャ認識を追加するイメージビュー(imageAnimation)へのrは、行くためにeasistルートを直接聞きます。スイッチが機能し、どこから来たのか把握する必要はありません(tapRecognizer.viewの使用以外)。 – Sam
Thx Nekto&Sam、画像ビュー(imageAnimation)に直接ジェスチャ認識機能を追加しようとしましたが、その場合は1ページだけで動作しますが、他のページでは機能しません。それは私が解放したり、正しく追加したりしていないからでしょうか? imageAnimationをさまざまなPNGで再利用し、多くのページでさまざまなアニメーションを処理したいと考えています。 – Alex
各ページ(**各imageAnimation.tag **)に一意のタグを割り当てましたか?はいの場合は、コードの更新版を投稿できますか?または、詳細を教えてください。 – Nekto