0

我在 UIScrollview 中遇到了 TTImagViews 的问题。我搜索了高低,但真的找不到解决方案。有趣的是,点击手势适用于滚动视图内的最后一个 TTImageview。例如,我有 10 张图像,用户可以滚动,并且触摸手势仅适用于第 2 页的第 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,那么点击手势可以完美运行。我不知道为什么!

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 回答