场景是我有一个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
}
请分享您的建议。
答案 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用于单个视图。 您的问题的另一个解决方案如下 -
您必须全局声明点按手势。
var singleTap:UITapGestureRecognizer!
在这一步中,我们创建了一个函数,它接受UIimageView并在其顶部添加手势。
func setGesture(img_View:UIImageView) {
singleTap = UITapGestureRecognizer.init(target: self, action: Selector("resignResponder"))
singleTap.numberOfTapsRequired = 1
view.addGestureRecognizer(singleTap)
}
现在创建手势的动作。
func resignResponder() {
}
这是解决问题的三个步骤。呼叫 &#34; setGesture&#34;对于每个imageView。你可以成功识别出来 点按每个图片。