iPad 용 Kid 's Book App에서 작업 중입니다. UIImageView (JPEG)를 표시하기 위해 UIImageView를로드하는 UIView가 있습니다. 사용자가 이미지를 스 와이프하여 페이지를 탐색 할 수 있습니다. 모든 것이 제대로 작동합니다. 이제 일부 페이지에 PNG 파일을로드 할 다른 UIImageView를 추가하고 탭 제스처에서 애니메이션을 적용하려는 대화 형 작업을 추가하고 싶습니다. 아래 코드 조각이 있습니다 ...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)로 이동하면 easist 라우트가 직접 들립니다. 스위치가 작동하고 tapRecognizer.view 사용 이외의 어디서 왔는지 파악할 필요가 없습니다. – Sam
Thx Nekto & Sam, 제스처 인식기를 imageview (imageAnimation)에 직접 추가하려고 시도했습니다.이 경우 한 페이지에서만 작동하지만 다른 페이지에서는 작동하지 않습니다. 그게 내가 풀어주지 않고 다시 제대로 추가하지 않기 때문일 수 있니? imageAnimation을 다른 PNG로 다시 사용하고 여러 페이지에서 다른 애니메이션을 처리하려고합니다. – Alex
각 ** imageAnimation.tag **에 대해 각 페이지마다 고유 한 태그를 할당 했습니까? 그렇다면 업데이트 된 버전의 코드를 게시 할 수 있습니까? 아니면, 우리에게 더 많은 세부 사항을주십시오. – Nekto