在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中使用点击手势选择另一个图像时如何取消选择上一个选择的图像?的主要内容,如果未能解决你的问题,请参考以下文章