Ios 如何在icarousel swift代码中将UIGestureRecognitor附加到项目视图

Ios 如何在icarousel swift代码中将UIGestureRecognitor附加到项目视图,ios,swift,uitapgesturerecognizer,icarousel,Ios,Swift,Uitapgesturerecognizer,Icarousel,有人能帮我在icarousel中为中心图像添加双击识别器吗?在下面的swift代码中,您可以看到识别器已编程,但它在屏幕上的任何位置都会做出反应,而不仅仅是在中央图像上。我想我必须把这个手势和newView联系起来,但我尝试了几件事,但都没有解决问题。Objective-C中有很多例子,但是很快就很难在论坛上找到解决方案。希望有人能告诉我如何正确编码 import UIKit let image0 = UIImage(named: "Afrojack") let image1 = UIImag

有人能帮我在icarousel中为中心图像添加双击识别器吗?在下面的swift代码中,您可以看到识别器已编程,但它在屏幕上的任何位置都会做出反应,而不仅仅是在中央图像上。我想我必须把这个手势和newView联系起来,但我尝试了几件事,但都没有解决问题。Objective-C中有很多例子,但是很快就很难在论坛上找到解决方案。希望有人能告诉我如何正确编码

import UIKit

let image0 = UIImage(named: "Afrojack")
let image1 = UIImage(named: "Calvin Harris")
let image2 = UIImage(named: "Martin Garrix")

var imageArray = [image0, image1, image2]


class ViewController: UIViewController, iCarouselDataSource, iCarouselDelegate
{
var items: [Int] = []

@IBOutlet weak var carousel: iCarousel!

override func awakeFromNib()
{
    super.awakeFromNib()
    for i in 0...2
    {
        items.append(i)
    }
}

override func viewDidLoad()
{
    super.viewDidLoad()
    carousel.type = .CoverFlow2
}


//show message when screen is tapped twice
func message(){
    let alertView = UIAlertView(title: "Oops!", message: "Something happened...", delegate: nil, cancelButtonTitle: "OK")
    alertView.show()
}


func numberOfItemsInCarousel(carousel: iCarousel!) -> Int
{
    return items.count
}


@objc func carousel(carousel: iCarousel!, viewForItemAtIndex index: Int, reusingView view: UIView!) -> UIView! {
    var newView = view
    var label: UILabel! = nil

    if newView == nil {
        //create new view

        //don't do anything specific to the index within
        //this `if (view == nil) {...}` statement because the view will be
        //recycled and used with other index values later
        newView = UIImageView(frame:CGRectMake(0, 0, 200, 200))
        //(newView as! UIImageView).image = UIImage(named: "page")
        newView.contentMode = .Center

        // set label properties
        label = UILabel(frame:newView.bounds)
        label.backgroundColor = UIColor.clearColor()
        label.textAlignment = .Center
        label.font = label.font.fontWithSize(50)
        label.tag = 1
        newView.addSubview(label)
    }
    else
    {
        //get a reference to the label in the recycled view
        label = newView.viewWithTag(1) as! UILabel!
    }

    //set item label
    //remember to always set any properties of your carousel item
    //views outside of the `if (view == nil) {...}` check otherwise
    //you'll get weird issues with carousel item content appearing
    //in the wrong place in the carousel

    //label.text = "\(items[index])"

    (newView as! UIImageView).image = imageArray[items[index]]

    newView.userInteractionEnabled = true

    let tapGesture = UITapGestureRecognizer(target: self , action: "message")
    tapGesture.numberOfTapsRequired = 2
    newView.addGestureRecognizer(tapGesture)

    return newView
}
}


func carousel(carousel: iCarousel!, valueForOption option: iCarouselOption, withDefault value: CGFloat) -> CGFloat
{

    if (option == .Spacing)
    {
        return value * 1.1
    }

    return value

}

您是否尝试过将此代码放在
newView
初始化下面

let tapGesture = UITapGestureRecognizer(target: self , action: "message")
tapGesture.numberOfTapsRequired = 2
newView.addGestureRecognizer(tapGesture)
您还应该在
viewDidLoad()
中删除该手势

编辑

您应该将识别器放在
newView
为100%非零后,因为此时,
newView
可以为
nil
(如果newView==nil,则为

因此,将所有
if
语句放在下面。它应该工作。

所以你只想在中心点,或者它可以在图像上的任何地方双击?我想在覆盖流中间的图像(NeVIEW)上有一个双标签。当图像被双击时,我将切换到另一个屏幕,在那里我使用被点击的图像编号来显示属于该图像的信息。认为代码必须像标签一样放在@obj fun carousel方法的if语句中(我不使用)。解决了上面的代码工作起来就像我看到它工作一样!FabKremer,谢谢你的耐心和帮助!!!很高兴成功了,伙计!不客气:)我已经尝试过了,但是在模拟器中代码崩溃了。代码在行newView上崩溃了。addgestureerecognizer(tapperstate)致命错误:在展开可选值时意外发现nil认为newView DU不知道addgestureerecognizer命令。但它应该知道。您是否已将cose放在newView初始化下面?下面您可以看到正在崩溃的完整代码。无法将代码作为注释放置,因此我在问题中替换了上面的原始代码。当模拟器进入带有视图的屏幕时,它正在崩溃。可能是因为用于滚动图片的手势导致该手势不起作用吗?我在某个地方读到,不允许有两个手势处于活动状态?我使用了nick lockwood/icarousel的swift示例,在icarousel.m文件中还提供了一个UITapgestureRecognitor。当我点击一张不在中间的图片时,这张图片就会移到中间。