问题抛出:自定义继承于UIScrollView的类,在类中写了循环添加图片到UIScrollView上,然后给每张图片都加了一个单击手势,最后实现点击手势的方法。
这个问题看起来非常的普通,但是,我相信任何人的项目需求应该不会这么简单,就像我们的项目需求似的,需要点击某张图片,然后改变该图片的边框颜色,那么问题来了,你怎么能获取到点击的是哪个图片呢,就算得到了点击的是哪张图片,那么循环添加的UIImageView,对象名字都一样,你怎么改变点击的对应图片呢?
请看代码解析:
for( int i = 0; i < arr.count; i++) {
//循环创建手势
UITapGestureRecognizer * tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];
//循环创建相同对象名的图片
UIImageView* imgv =[[UIImageView alloc]initWithFrame:CGRectMake(ScreenWidth*i,0, ScreenWidth,CTHeight)];
//打开图片的用户交互(这个必须写,因为UIImageView继承的UIView,是无法触发点击事件的)
imgv.userInteractionEnabled=YES;
//循环给UIImageView添加图片,arr是保存图片名称的数组
imgv.image=[UIImage imageNamed:arr[ i ] ];
//给UIImageView设置tag值为i的值
[imgv setTag:i];
//把单击手势添加到UIImageView上
[imgv addGestureRecognizer:tap];
//把UIImageView添加到滚动视图上
[self.scrollView addSubview:imgv];
}
这样就已经创建好了,基本的滚动视图加图片,下面是关键的代码解析
//实现点击图片的单击手势方法
-(void)tap:(UITapGestureRecognizer *)sender{
//创建一个单击手势对象,把单击手势的sender赋值给新对象
UITapGestureRecognizer * tap =(UITapGestureRecognizer *)sender;
//创建一个UIImageView的对象,用UIImageView代理取出UIImageView对应的tag下标值
UIImageView * imgv = (UIImageView *)tap.view;
//遍历出UIScrollView上所有的子视图,赋值给UIImageView
for(UIImageView* firstImagv in self.scrollView.subviews) {
//如果该UIImageView的tag下标值等于选中的图片的下标值,没错,就是他了,接下来就是改变了图片了,这里我是给选中的图片设置了一个边框的颜色。
if(firstImagv.tag== imgv.tag){
firstImagv.layer.borderColor=[[UIColorcolorWithRed:193/255.0green:143/255.0blue:76/255.0alpha:1.0]CGColor];
}else{
firstImagv.layer.borderColor=[[UIColor lightGrayColor]CGColor];
}
}
}
这样就达到了想要的效果,如果还有什么更加简洁的方法,欢迎大家留言
网友评论