在多个imageview内点击手势滚动视图内没有触发事件,只有第一个imageview点击手势工作?

时间:2016-03-30 21:04:38

标签: ios swift uiimageview uitapgesturerecognizer

场景是我有一个imageview,我已经在一个scrollview中添加了,然后在每个imageview上添加了tapgesture,但只有第一个imageview触发事件。

尝试了以下内容:

1。创建了imageview的扩展

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

2。在循环中添加了点按手势(在scrollview上添加了相同方式添加了图像视图的方式)

//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
}

请分享您的建议。

3 个答案:

答案 0 :(得分:0)

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

以下是代码段:

 //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)

答案 1 :(得分:0)

  

您可以使用UIButton而不是使用UIImageView来设置   背景图像到按钮并设置标题“”。那你没有   需要添加UIImageView和UIButton。 UIButton很容易得到   通过UIScrollView点击事件。

答案 2 :(得分:0)

这不是UIScrollView的问题。我们可以将Gesture用于单个视图。 您的问题的另一个解决方案如下 -

  1. 您必须全局声明点按手势。

    var  singleTap:UITapGestureRecognizer!
    
  2. 在这一步中,我们创建了一个函数,它接受UIimageView并在其顶部添加手势。

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

    }

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

    func resignResponder()  {
    
    }
    
  4.   

    这是解决问题的三个步骤。呼叫   &#34; setGesture&#34;对于每个imageView。你可以成功识别出来   点按每个图片。