IOS 循环添加UIImageView到滚动视图上,点击某个图片

2020-04-23  本文已影响0人  本客

问题抛出:自定义继承于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];

        }

    }

}

这样就达到了想要的效果,如果还有什么更加简洁的方法,欢迎大家留言

上一篇下一篇

猜你喜欢

热点阅读