 	///- Parameter hostView: The menu's hostView, to calculate the positions
 	///- Parameter isTraversingView: Should the indicator traverse the hostView, and stick to the opposite edge ?
 	func show(edge: UIRectEdge, hostView: UIView, isTraversingView: Bool) {
-		guard let superView = self.superview else { return }
+		guard let superView = self.superview, state != .showing else { return }
+		self.state = .showing
 		self.edge = edge
 		self.setNeedsDisplay()
 		let positions = positionValues(hostView)

				 initialPosition: CGFloat,
				 firstStepDuration: Double,
				 firstStepDone: @escaping (_ boomerang: Bool) -> Void) {
		let hasBoomerang = boomerang == .vertical || boomerang == .verticalHorizontal
		let positions = positionValues(hostView)
		var positionOne: CGFloat, mustSwitchEdge = false //Will the indicator switch of edge ?

						self.topConstraint.constant = self.verticalConstant(for: initialPosition,
																			hostHeight: hostView.frame.height,
																			height: self.frame.height)
						self.state = .onHold
						self.show(edge: edgeToShow, hostView: hostView, isTraversingView: false)
					} else {
						self.animation(self.superview!, constraint: self.horizontalConstraint,
									   constant: positions.start, timing: timingAnim2, options: [.curveEaseOut], finished: {
										firstStepDone(hasBoomerang)
										self.state = .onHold
						})
					}
		})
