I defined a class named Bubble, and there's a function named CreateBubbleView and I add an tapGestureRecognizer to it.But it is not working. Here's my code.
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)
}
and in viewController I coded
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!)
}
let bubbleView_0 = bubble_0.bubbleView
view.addSubview(bubbleView_0!)
I notice you created bubble_0, but only add its bubbleView. bubble_0 will be released(according to ARC). So your tap will no longer have a target. To fix this, you can hold bubble_0 in your view controller.
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!)
}