如何在通过代码创建的自定义视图上以编程方式添加UIGestureRecongnizer?

时间:2019-07-13 17:15:24

标签: swift uigesturerecognizer

我想将UITapGestureRecognizer添加到名为SetView的视图中。我的setview是在另一个名为GridView的自定义视图上以编程方式创建的。

到目前为止,这是我尝试过的操作,但是在点击子视屏时看不到任何动作。

import UIKit

@IBDesignable
class GridView: UIView {
    private(set) lazy var deckOfCards = createDeck()

    lazy var grid = Grid(layout: Grid.Layout.fixedCellSize(CGSize(width: 128.0, height: 110.0)), frame: CGRect(origin: CGPoint(x: bounds.minX, y: bounds.minY), size: CGSize(width: bounds.width, height: bounds.height)))

    lazy var listOfSetCard = createSetCards()

    private func createDeck() -> [SetCard] {
        var deck = [SetCard]()
        for shape in SetCard.Shape.allShape {
            for color in SetCard.Color.allColor {
                for content in SetCard.Content.allContent {
                    for number in SetCard.Number.allNumbers {
                        deck.append(SetCard(shape: shape, color: color, content: content, rank: number))
                    }
                }
            }
        }
        deck.shuffle()
        return deck
    }

    private func createSetCards() -> [SetView] {
        var cards = [SetView]()
        for _ in 0..<cardsOnScreen {
            let card = SetView()
            let contentsToBeDrawn = deckOfCards.removeFirst()
            card.combinationOnCard.shape = contentsToBeDrawn.shape
            card.combinationOnCard.color = contentsToBeDrawn.color
            card.combinationOnCard.content = contentsToBeDrawn.content
            card.combinationOnCard.rank = contentsToBeDrawn.rank
            /* print(contentsToBeDrawn.color) */
            addSubview(card)
            cards.append(card)
        }
        return cards
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        for index in listOfSetCard.indices {
            let card = listOfSetCard[index]
            if let rect = grid[index] {
                card.frame = rect.insetBy(dx: 2.5, dy: 2.5)
                card.frame.origin = rect.origin
                print(card.frame.origin)
            }
        }
    }

这是我在SetView上编写的didTap(sender:UITapGestureRecognizer)函数:

@objc func didTap(sender: UITapGestureRecognizer) {
    switch sender.state {
    case .changed,.ended:
        let rect = UIBezierPath(rect: bounds)
        fillBoundingRect(inRect: rect, color: UIColor.gray)
    default:
        break
    }

和ViewController:

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        for _ in 1...12 {
            let card = game.drawModelCard()
            game.deck.append(card)
        }

    }
    lazy var game = SetGame()

    weak var setView : SetView! {
        didSet {
            let tapGestureRecognizer = UITapGestureRecognizer(target: 
            setView, action: #selector(SetView.didTap(sender:)))
            setView.isUserInteractionEnabled = true
            setView.addGestureRecognizer(tapGestureRecognizer)

        }
    }
}

我的子视图(SetViews)一旦点击就会更改背景颜色。

0 个答案:

没有答案