Firebase의 사용자 게시물을 나타내는 버튼이 있습니다.NotificationCenter 작업이 서로 ontop을 스태킹합니까?
뷰가 나타나면 정보를 최신 상태로 유지하기 위해 서클을 다시 그려 보겠습니다. 그러나 원을 다시 그릴 때마다 액션이 호출 된 횟수에 1을 더하여 버튼과 연관된 액션을 엉망으로 만든다.
버튼에 작업을 추가하는 클래스가 있습니다.
override init(frame: CGRect) {
super.init(frame: frame)
let doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapAction(sender:)))
self.addGestureRecognizer(doubleTap)
}
func doubleTapAction(sender : UIButton) {
print("Double tapped")
NotificationCenter.default.post(name: .didDoubleTap , object: nil, userInfo: ["tagTapped" : self.tag])
}
이렇게 코드는 모두 내 "buttonPost"클래스에서 완료됩니다.
그런 다음 내 mainVC에 나는
NotificationCenter.default.addObserver(self, selector: #selector(self.didDoubleTapOnACircle(sender:)), name: .didDoubleTap , object: nil)
있는 viewDidLoad
에 .didDoubleTap에 대한 NotificationCenter에 대한 관측을 추가 해요 그리고 마지막으로 나는 그것을 할 꿔 무엇을 처리하는 기능을 가지고 :func didDoubleTapOnACircle(sender: Notification) {
print("double tapped action called")
}
무슨 일이 일어나는지는 처음으로 페이지 버튼을로드하고 그려야하는 시점입니다. 원에서 더블 탭하면 클래스 기능에서 "두 배 탭"되고 내 관찰자 기능에서 "두 번 탭 동작"이라고 표시됩니다.
문제는 원 그리기를 담당하는 viewcontroller를 떠나서 "didDoubleTapOnCircle"이 두 번 호출되면 "double tap 작업"이 두 번 인쇄되지만 "double tapped"는 가져옵니다 한 번 인쇄 해. 나가서 메인 페이지 (원으로 10 번 다시 그려 넣기)로 돌아 가면 "더블 탭 작업"이 10 번 인쇄되고 "더블 탭"은 한 번 호출됩니다.
이 문제의 원인은 무엇입니까? 왜 뷰 컨트롤러를 떠나 다시 돌아와서 이전 버튼의 겹쳐서 오버랩 된 중복 버튼을 얻지 못하는지 이해할 수 없지만 제스처 인식기 동작은 마지막으로 그려진 시점부터 서로 겹치기 시작합니다.
그래서, tl; dr은 프론트 페이지에서 더블 탭 될 수있는 버튼으로 firebase의 사용자 게시물을 나타냅니다. 처음에 버튼을로드 할 때 완벽하게 작동하면 doubletapp 액션이 한 번 호출됩니다. 버튼 페이지로 돌아올 때마다 didDoubleTapOnCircle 함수가 호출 된 횟수가 1 씩 증가합니다.