나는 네비게이션 컨트롤러를 가지고 있는데, 루트 뷰 컨트롤러의 타입은 CollectionViewControllerA
입니다. 항목을 선택하면, I는 페이드를 갖고 통화 다음 애니메이션을 확장하면 스택에 입력 CollectionVewControllerB
의 제보기 컨트롤러 밀어 :UICollectionView scrollViewDidScroll을 호출 할 때 : 탐색 스택에서 튀어 나올 때
CollectionViewControllerB *b = ... // construction of the view controller to be pushed
[UIView animateWithDuration:.3
animations:^{
self.collectionView.transform = CGAffineTransformMakeScale(1.5, 1.5);
self.collectionView.alpha = 0;
}
completion:^(BOOL s){
[self.navigationController pushViewController:b animated:NO];
}];
는 I 유사한 방법
[UIView animateWithDuration:.3
animations:^{
self.collectionView.transform = CGAffineTransformMakeScale(.3, .3);
self.collectionView.alpha = 0;
}
completion:^(BOOL s){
[self.navigationController popViewControllerAnimated:NO];
}];
의보기 제어기 팝
여기에서 문제는보기 컨트롤러를 터뜨릴 때 앱이 충돌한다는 것입니다. 이유 :
*** -[CollectionViewControllerB scrollViewDidScroll:]: message sent to deallocated instance
나는 튀어 뷰 컨트롤러가 파괴되기 때문에 문제가 있음을 이해하지만 왜 scrollViewDidScroll:
가 처음에 호출되는 하는가? 코드에서 collectionView
의 contentOffset
을 변경하지 않으며 사용자 상호 작용도 없습니다. transform
속성을 변경하지 않으면 메서드가 호출되기 시작합니다.
CollectionViewControllerB
구현 나는 수직 스크롤을 중지해야 scrollViewDidScroll:
때문이다.
self.collectionView.delegate = nil;
이 호출하기의 방법을 중지 추가합니다. 그러나 더 좋은 방법이 있어야합니다.
누군가 scrollViewDidScroll:
이 호출 된 이유와 중지 방법에 대해 알아 보았습니까?
저는 같은 문제에 봉착 했습니다만, segues를 사용했습니다. 내 솔루션은 당신과 동일했습니다. viewWillDisappear에 델리게이트가 없습니다. 왜 이런 일이 일어날 지 모르겠다. 어떻게 든 튀어 나오는 것은 contentOffset을 변경하는 경우 일 것임에 틀림 없지만, 어떻게 또는 왜 나는 모르겠습니다. –
나는 델리게이트를 nil-ing하는 것이 어떤 솔루션이라도 좋다고 생각합니다 ... 어쨌든 객체가 파괴 될 것임을 알았습니다. –