2013-09-26 1 views
1

iOS7 앱을 만들고 있는데 새로운 useLayoutToLayoutNavigationTransitions 효과를 사용하려고합니다. 나는 2 UICollectionViewControllers을 가지고 다음과 같은 처리를 할 때 나는 전환 효과useLayoutToLayoutNavigation iOS7 충돌시 전환

SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
secondVC.useLayoutToLayoutNavigationTransitions = YES; 
[self.navigationController pushViewController:secondVC animated:YES]; 

이 잘 작동하지만 내가 원하는 것은 API 호출을하고 다음 완료 블록에서 나는 탐색 스택에 푸시 할을 얻을 그래서

[webAPI getDetailsWithParams:params andCompletionBlock:^(id dict) { 

    //some work on the result 

    SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    secondVC.useLayoutToLayoutNavigationTransitions = YES; 
    [self.navigationController pushViewController:secondVC animated:YES]; 


} andErrorBlock:^(NSError *error) { 

}]; 

처럼 그러나 이것은 다음 MSG와마다 충돌

-[UICollectionView _invalidateLayoutWithContext:]: message sent to deallocated instance 0x17a26400 

사람이 내가이 경우 잘못된 뭐하는 거지 말해 줄 수? 완료 블록에서 푸시 할 때 어떻게 전환 효과를 얻을 수 있습니까?

편집 : 다음과 같이 변경하여 두 번째 viewcontroller로 전환 할 수있었습니다.

MyLayout *layout = [[MyLayout alloc] init]; 
SecondViewController *expandedVC = [[SecondViewController alloc] initWithCollectionViewLayout:layout]; 

그리고 파일과 함께 제공된 nib 파일도 삭제했습니다. nib 파일은 콜렉션 뷰로 구성되었으며 파일 소유자보기였습니다. 전환 할 수있는 동안 블록에서 이전 코코아 콩 메서드를 사용할 수없는 이유는 아직도 이해할 수 없습니다. 누군가가 저를 위해 빛을 비출 수 있다면 고맙겠습니다.

답변

0

난 당신이 UIKit이 전환을 할 UICollectionViewController의 useLayoutToLayoutNavigationTransitions을 사용하기 위해서는 메인 스레드

+0

아니요 위의 Forcing 블록을 주 스레드로 만들려고했는데 initWithCollectionViewLayout을 사용할 때만 작동합니다 : 레이아웃 및 initWithNibName – glogic

+0

콜렉션 뷰를 네비게이션 컨트롤러 애니메이션으로 통합하는 것이 작동한다고 생각합니다. 초기화 장치; 모든 푸시 된 nav 컨트롤러의 콜렉션 뷰를 기본 뷰 컨트롤러 (콜렉션 뷰 컨트롤러)에 연결하고 펜촉을 사용하지 않습니다. – Vazzyb

1

아니었다 스레드에서 호출을하고 있었다의 SecondViewController의 레이아웃을 알고 있어야합니다 생각합니다. 그러나 initWithNibName : bundle : initializer를 사용하면 레이아웃이 내부적으로 준비되지 않으므로 원하는 전환을 수행 할 수 없습니다. 편집 한 질문에서 언급했듯이 [UICollectionViewController initWithCollectionViewLayout :]을 사용하여 두 번째 UICollectionViewController를 초기화해야합니다. xib 파일의 클래스 이름이 같기 때문에 SecondViewController.xib는 UICollectionViewController의 수퍼 클래스 인 UIViewController에 의해 자동으로로드됩니다.