0

UIScrollview 内の TTImagViews に問題があります。私は高低を検索しましたが、本当に解決策を見つけることができませんでした. 興味深いことに、タップ ジェスチャは、スクロール ビュー内の最後の TTImageview で機能します。たとえば、ユーザーがスクロールでき、タッチジェスチャがページ2の10番目の画像または最後の画像でのみ機能する10個の画像があります。これは私のコードです。助言がありますか?

 UIScrollView *imageScroll=[[UIScrollView alloc] initWithFrame:CGRectMake(70, postMessageLabel.frame.size.height+10, 250, 78)];
    [imageScroll setContentSize:CGSizeMake(70 * ([[images objectAtIndex:0]count])+10,64)];        
    int startAtX=5;
    for(int i=0;i<[[images objectAtIndex:0]count];i++){
        if([[GlobalFunctions sharedGlobalFunctions] isValidURL:[[images objectAtIndex:0] objectAtIndex:i]]){
            TTImageView *imageView=[[TTImageView alloc] initWithFrame:CGRectMake(startAtX, 5, 64, 64)] ;
            imageView.userInteractionEnabled=YES;  
            [imageView addGestureRecognizer:thumbnailTap];                 
            imageView.urlPath=[[images objectAtIndex:0] objectAtIndex:i];
            imageView.autoresizesToImage=NO;
            imageView.defaultImage=nil;
            imageView.delegate=self;    
            [imageView setBackgroundColor:[UIColor blackColor]];
            [imageScroll addSubview:imageView];
            [imageView release];

        }
            startAtX+=70;            
    }

    [imageScroll setBounces:YES];
    [imageScroll setDelaysContentTouches:YES];
    [imageScroll setCanCancelContentTouches:NO];
    [self.view addSubview:imageScroll];
    [imageScroll release];

はい、uiscrollview 内に ttimageview が 1 つしかない場合、タップ ジェスチャは完全に機能します。理由がわかりません!

4

2 に答える 2

0

UIView 内にイメージ ビューを追加し、その UIView にタップ ジェスチャを追加します。これは私にとってはうまくいきましたが、あなたにとってもうまくいきます。以下を試してください。

UIScrollView *imageScroll=[[UIScrollView alloc] initWithFrame:CGRectMake(70, postMessageLabel.frame.size.height+10, 250, 78)];
    [imageScroll setContentSize:CGSizeMake(70 * ([[images objectAtIndex:0]count])+10,64)];        
    int startAtX=5;
    for(int i=0;i<[[images objectAtIndex:0]count];i++){
        if([[GlobalFunctions sharedGlobalFunctions] isValidURL:[[images objectAtIndex:0] objectAtIndex:i]]){
            TTImageView *imageView=[[TTImageView alloc] initWithFrame:CGRectMake(0, 0, 64, 64)] ;
            imageView.userInteractionEnabled=YES;  
            [imageView addGestureRecognizer:thumbnailTap];                 
            imageView.urlPath=[[images objectAtIndex:0] objectAtIndex:i];
            imageView.autoresizesToImage=NO;
            imageView.defaultImage=nil;
            imageView.delegate=self;    
            [imageView setBackgroundColor:[UIColor blackColor]];

UIView *viewWithImg=[[UIView alloc] initWithFrame:CGRectMake(startAtX, 5, 64, 64)];
        [viewWithImg addSubview:imgView];
        viewWithImg.tag=i;
        UITapGestureRecognizer *tapGesture2 =
        [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured2:)];        
        tapGesture2.numberOfTapsRequired = 1;
        tapGesture2.numberOfTouchesRequired=1;
        [viewWithImg addGestureRecognizer:tapGesture2];

            [imageScroll addSubview: viewWithImg];
            [imageView release];

        }
            startAtX+=70;            
    }

    [imageScroll setBounces:YES];
    [imageScroll setDelaysContentTouches:YES];
    [imageScroll setCanCancelContentTouches:NO];
    [self.view addSubview:imageScroll];
    [imageScroll release];

および singleTapGestureCaptured2 メソッドで

-(void)singleTapGestureCaptured2:(UITapGestureRecognizer *)gesture
{
    NSLog(@"image tag or arr index from images array: %d",[[gesture view] tag]);    
}
于 2012-05-20T05:54:43.167 に答える
0

まあ、私のコードには何も問題がないように見えます。唯一の違いは、ジェスチャ認識エンジンを取り付ける方法です。修正したとしても、なぜうまくいかなかったのかわかりません。これが起こったことです

  1. 典型的な alloc init を使用して、viewdidload でジェスチャ認識エンジンを宣言しました。
  2. したがって、ジェスチャ認識機能はビュー全体で利用できると思います。画像のループに追加し続けました。

ステップ2; が問題のようでした。すべての画像に対してジェスチャ認識エンジンを宣言し、割り当てた後に解放すると、問題はなくなりました。

技術的には各画像について

---Create a gesture recognizer
   |-Attach it to the TTImageView
---Release the gesture recognizer

これで問題は解決しました。しかし、ジェスチャ認識機能が単一の画像に割り当てられたときに機能し、複数の画像ビューに割り当てたときに失敗するのはなぜですか。

試してくれたAbdullahに感謝しますが、あなたの解決策はどこにも行きませんでした。

于 2012-05-21T08:29:50.720 に答える