мой UITapGestureRecognizer не работает - PullRequest
0 голосов
/ 04 мая 2018

Я определил класс с именем Bubble, и есть функция с именем CreateBubbleView, и я добавляю к нему tapGestureRecognizer. Но он не работает. Вот мой код.

var frame: CGRect = CGRect.zero
var shapeLayer = CAShapeLayer()
var bubbleView: UIView!

func CreateBubbleView(arcCenter: CGPoint,radius: CGFloat) {
    bubbleView = UIView(frame: frame)
    bubbleView.backgroundColor = UIColor.black

    shapeLayer = CAShapeLayer()
    let bubblePath = UIBezierPath(arcCenter: .zero, radius: radius, startAngle: 0, endAngle: 2 * CGFloat.pi, clockwise: true)
    shapeLayer.path = bubblePath.cgPath
    shapeLayer.position = arcCenter
    shapeLayer.fillColor = UIColor(red: 1, green: 0.8, blue: 0.09, alpha: 0.5).cgColor

    bubbleView.layer.addSublayer(shapeLayer)
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(HandleTap))
    bubbleView.addGestureRecognizer(tapGestureRecognizer)

}

@objc func HandleTap() {
    print(123)
}

и в viewController я кодировал

override func viewDidLoad() {
    super.viewDidLoad()

    let bubble_0 = Bubble()
    bubble_0.frame = view.frame
    bubble_0.CreateBubbleView(arcCenter: view.center, radius: 80)
    let bubbleView_0 = bubble_0.bubbleView
    view.addSubview(bubbleView_0!)
}

1 Ответ

0 голосов
/ 04 мая 2018
let bubbleView_0 = bubble_0.bubbleView
view.addSubview(bubbleView_0!)

Я заметил, что вы создали bubble_0, но добавили только его bubbleView. bubble_0 будет выпущен (согласно ARC). Таким образом, у вашего крана больше не будет цели. Чтобы это исправить, вы можете удерживать bubble_0 в вашем контроллере представления.

var bubble_0: Bubble!    
override func viewDidLoad() {
    super.viewDidLoad()

    bubble_0 = Bubble()
    bubble_0.frame = view.frame
    bubble_0.CreateBubbleView(arcCenter: view.center, radius: 80)
    let bubbleView_0 = bubble_0.bubbleView
    view.addSubview(bubbleView_0!)
}
...