在ios中使用点击手势选择另一个图像时如何取消选择上一个选择的图像?

Posted

技术标签:

【中文标题】在ios中使用点击手势选择另一个图像时如何取消选择上一个选择的图像?【英文标题】:how to deselect the previous selected image when another image is selected using tap gesture in ios? 【发布时间】:2013-10-02 14:54:18 【问题描述】:

我有一个包含许多图像的滚动视图。我选择使用点击手势。

选择图像是这样设置的。这部分已成功完成!

但我的问题是当我点击另一个时它给了我多个选择。我想删除以前的选择。

我想要这样的东西,当我选择下一张图片时,前一张被取消选择。

抱歉,解释不好。

提前致谢。

创建滚动视图的代码

//below code are for create scroll view 



-(void)viewDidLoad   
    scrollView.delegate = self;
 scrollView.scrollEnabled = YES;
 int scrollWidth = 70;
 scrollView.contentSize = CGSizeMake(scrollWidth,50);

    int xOffset = 0;

 for(int index=0; index < [imagesName count]; index++)
 

  img = [[UIImageView alloc] init];
        [img setUserInteractionEnabled:YES];
  img.bounds = CGRectMake(0, 0, 60, 40);
  img.frame = CGRectMake(5+xOffset, 5, 60, 40);

        //below line add here
        img.image = [UIImage imageNamed:[imagesName objectAtIndex:index]];

        img.tag = 303 + index;

      //  [img.layer setBorderColor:[UIColor whiteColor].CGColor];
       // [img.layer setBorderWidth:2.0f];

        [Scrollimages insertObject:img atIndex:index];

        scrollView.contentSize = CGSizeMake(scrollWidth+xOffset,50);
        [scrollView addSubview:[Scrollimages objectAtIndex:index]];

       //xOffset += 170;

        xOffset += 70;
 


    for (UIImageView *scrollimage in Scrollimages) 

           UITapGestureRecognizer *singleTapRecognizerInScroll = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewsingleTappedInScrollMethod:)];

        singleTapRecognizerInScroll.delegate = self;

        singleTapRecognizerInScroll.numberOfTapsRequired = 1;
        singleTapRecognizerInScroll.numberOfTouchesRequired = 1;


        [scrollimage  addGestureRecognizer:singleTapRecognizerInScroll];

             
    
 -(void)scrollViewsingleTappedInScrollMethod:(UITapGestureRecognizer *)recognizer

       scrollimageview = (UIImageView *)recognizer.view;

      //we select the image using tag.(contain many images)
    if ([scrollimageview tag] == 303) 

        selectLimitSet = 3;

        

        

【问题讨论】:

确定这不是一个集合视图,您能否提供一些代码如何将状态设置为选中? 是的,它是滚动视图而不是集合视图。 【参考方案1】:

当您选择图像时,将其引用保存到所选图像。选择下一个时,取消选择当前图像视图并选择新的点击手势。 1.创建一个属性来记住当前选中的图像视图标签@property (nonatomic, assign) NSInteger currentTag;

-(void)onTapGesture(id)sender
    if(self.currentTag == sender.tag)
     //tap on previously selected image
     //you can deselect same image or any thing else you want to do.
     return;
    
    UIImageView *prevImageView = [self.view viewWithTag:self.currentTag];
    //deselect prevImageView, if you want to change image do it now
    UIImageView *selectedImageView = (UIImageView*)sender; 
    self.currentTag = selectedImageView.tag;
   //select selectedImageView now, change image now.

【讨论】:

我有很多图片,这些图片是使用 TAG 触摸的。您进入很难管理的方式。 是的,这是一种可以遵循的方法来完成这项工作。我们可以使用相同的当前标签和上一个标签来选择和取消选择图像视图。您可以为此目的使用 UICollectioView 或 UITableView,现在这取决于您的方法和需要。:) 但是如何取消选择前一个标签,是我的问题吗?我找到当前标签并将其设置为图像视图 alpha。 当您选择新图像时,此时您的当前标签指向先前选择的标签。所以首先取消选择之前选择的图像(这是当前标签),现在选择新的后选择发件人(你接触到的地方),将 currentTag 的值更改为 sender.tag(现在这将指向新的,当你触摸时其他一些当时它将用于取消选择以前的图像)。希望你明白我的意思,如果不是解释,我会尝试解释更多。 +1,如果你有演示代码,请发给我,非常感谢。这里只发布选择和取消选择逻辑。【参考方案2】:
   scrollView.delegate = self;
        scrollView.scrollEnabled = YES;
        int scrollWidth = 70;
        scrollView.contentSize = CGSizeMake(scrollWidth,50);

        int xOffset = 0;

        for(int index=0; index < [imagesName count]; index++)
        

            img = [[UIImageView alloc] init];
            [img setUserInteractionEnabled:YES];
            img.bounds = CGRectMake(0, 0, 60, 40);
            img.frame = CGRectMake(5+xOffset, 5, 60, 40);

            //below line add here
            img.image = [UIImage imageNamed:[imagesName objectAtIndex:index]];

            img.tag = 303 + index;

            //add below code is here


//take A UIView * displayView make it global (create Instance).

            displayView = img;
            img.alpha = 1.0;


            [Scrollimages insertObject:img atIndex:index];

            scrollView.contentSize = CGSizeMake(scrollWidth+xOffset,50);
            [scrollView addSubview:[Scrollimages objectAtIndex:index]];

            //xOffset += 170;

            xOffset += 70;


        

-(void)scrollViewsingleTappedInScrollMethod:(UITapGestureRecognizer *)recognizer

    //selectedImageInScrollView it's a integer value

    selectedImageInScrollView = recognizer.view.tag;

// set your instance displayView Alpha & set tag them. 

//displayView is first deselect your first view then select next image

    displayView.alpha = 1.0;
    displayView =recognizer.view;

    recognizer.view.alpha = 0.5;


    if (selectedImageInScrollView == 303) 

        selectLimitSet = 3;
        NSLog(@"selectLimitSet : %i",selectLimitSet);

    

【讨论】:

【参考方案3】:

使用 UICollectionView。它会为您完成所有工作。

【讨论】:

一个有用的答案是带有一些源代码的答案。如果可能,请阿蒙提供一些源代码。 我不同意,这是一个非常有用的答案:)

以上是关于在ios中使用点击手势选择另一个图像时如何取消选择上一个选择的图像?的主要内容,如果未能解决你的问题,请参考以下文章

使用向后滑动手势以交互方式取消选择选定单元格

iOS - 忽略点击手势

如何在MKAnnotationView图像上注册点击手势?

当点击另一个按钮时,取消选择表格视图单元格中的按钮

滑动手势取消编辑模式后 UITableViewCell 刷新不良

ios10自定手势有啥用