点击多个imageview内的scrollview不滚动事件,只有第一个imageview轻拍手势工作?

情景是我有我已经添加一个滚动视图,然后tapgesture每个imageview添加,但只有第一个imageview射击事件添加imageview。

试过了:

1.创build了imageview的扩展

extension UIImageView { public func openMenu() { let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:Selector("handleTapGesture:")) //mImg.addGestureRecognizer() self.addGestureRecognizer(tapGestureRecognizer) print("open") } } 

2.在循环中添加轻击手势(添加滚动视图的方式与添加的方式相同)

 //the loop go till all images will load for var index = 0; index < imagesName.count; index++ { let mImg: UIImageView = UIImageView() let pDict = homePageProductArr[index] as NSDictionary //Create a UIVIEW let containerView:UIView = UIView(frame: CGRect(x: 0, y: 0, width: 80, height: 100)) let nameLabel:UILabel = UILabel(frame:CGRect(x: xOffset+20, y: 85, width: 100, height: 20)) nameLabel.text = (pDict.objectForKey("CategoryName") as! String) nameLabel.font = UIFont(name: "Helvetica Neue", size: 10.0) containerView.addSubview(nameLabel) let tapMenuCategoryImageTGR = UITapGestureRecognizer(target: self, action: Selector("handleTapGesture:")) containerView.addGestureRecognizer(tapMenuCategoryImageTGR) // make the imageview object because in scrollview we need image mImg.frame = CGRectMake(5 + xOffset, 0, 80, 80) // the offset represent the values, used so that topleft for each image will // change with(5+xOffset, 0)and the bottomright(160, 110) //mImg.image = UIImage(named: imagesName[index]) mImg.imageFromUrl(imagesName[index]) //mImg.imageFromServerURL(imagesName[index]) //Creating Circular Image //mImg.layer.borderWidth = 1 mImg.layer.masksToBounds = true mImg.layer.borderColor = UIColor.whiteColor().CGColor mImg.layer.cornerRadius = mImg.frame.height/2 mImg.clipsToBounds = false mImg.openMenu() mImg.userInteractionEnabled = true mImg.addGestureRecognizer = tapMenuCategoryImageTGR // The image will put on the img object images.insert(mImg, atIndex: index) //Put the img object at the images array which is mutable array scrollview.contentSize = CGSizeMake(120 + xOffset, 110) //scroll view size show after 125 width the scroll view enabled scrollview.addSubview(images[index] as! UIView) //set images on scroll view xOffset += 100 } 

请分享你的build议。

最后通过在imageview上添加button解决,并使其背景颜色清晰,标题为“”:

这里是代码片段:

  //print(mDict.objectForKey("ImageURL")) //var scrollWidth: Int = 120 scrollview.contentSize = CGSizeMake(120.0, 80.0) var xOffset: CGFloat = 5 //the loop go till all images will load for index in 0 ..< imagesName.count { let mImg: UIImageView = UIImageView() //set placeholder image mImg.image = UIImage(named: "lazyload_icon.png") let pDict = homePageProductArr[index] as NSDictionary //Create a UIVIEW let containerView:UIView = UIView(frame: CGRect(x: 0, y: 0, width: 80, height: 120)) let nameLabel:UILabel = UILabel(frame:CGRect(x: xOffset+20, y: 95, width: 100, height: 20)) nameLabel.text = (pDict.objectForKey("CategoryName") as! String) nameLabel.font = UIFont(name: "Helvetica Neue", size: Constant().HomeLabelFontSize) nameLabel.textColor = UIColor.colorWithHexString(Constant().HomeLabelHexColorCode) //set line and wrap text nameLabel.numberOfLines = 0 nameLabel.sizeToFit() containerView.addSubview(nameLabel) containerView.userInteractionEnabled = false // make the imageview object because in scrollview we need image mImg.frame = CGRectMake(xOffset , 0, 90, 90) // the offset represent the values, used so that topleft for each image will // change with(5+xOffset, 0)and the bottomright(160, 110) //mImg.image = UIImage(named: imagesName[index]) mImg.imageFromUrl(imagesName[index]) //mImg.imageFromServerURL(imagesName[index]) //Creating Circular Image mImg.layer.masksToBounds = true mImg.layer.borderColor = UIColor.whiteColor().CGColor mImg.layer.cornerRadius = mImg.frame.height/2 mImg.clipsToBounds = false mImg.userInteractionEnabled = false // The image will put on the img object images.insert(mImg, atIndex: index) // Put the img object at the images array which is mutable array scrollview.contentSize = CGSizeMake(120 + xOffset, 110) //scroll view size show after 125 width the scroll view enabled containerView.addSubview(images[index] as! UIView) scrollview.addSubview(containerView)//images[index] as! UIView) // set images on scroll view xOffset += 100 //Adding button to fire event let touchButton:UIButton = UIButton() touchButton.frame = mImg.frame touchButton.backgroundColor = UIColor.clearColor() touchButton.tag = index touchButton.addTarget(self, action: Selector("touchCategoryAction:"), forControlEvents: UIControlEvents.TouchUpInside) touchButton.setTitle("", forState: UIControlState.Normal) scrollview.addSubview(touchButton) scrollview.bringSubviewToFront(touchButton) 

而不是使用UIImageView,您可以使用UIButton并将背景图像设置为button,并设置标题“”。 那么你不需要同时添加UIImageView和UIButton。 UIButton可以轻松地通过UIScrollView获取Tapped事件。

这不是UIScrollView的问题。 我们可以使用手势来一个单一的观点。 你的问题的另一个解决scheme如下 –

  1. 您必须在全局中声明轻击手势。

     var singleTap:UITapGestureRecognizer! 
  2. 在这一步中,我们创build一个函数,它将UIimageView添加到顶部。

      func setGesture(img_View:UIImageView) { singleTap = UITapGestureRecognizer.init(target: self, action: Selector("resignResponder")) singleTap.numberOfTapsRequired = 1 view.addGestureRecognizer(singleTap) 

    }

  3. 现在创build手势的动作。

     func resignResponder() { } 

这是解决你的问题的三个步骤。 为每个imageView调用“setGesture”。 您可以成功识别每个imageView的水龙头。