2013-04-15 51 views
1

這4個文件是有關這個帖子:如何留住一個UIView控制器(ARC)

的FirstViewController有一個按鈕(而不是導航欄上,一個單獨的按鈕),當它被按下時,頁面應該蜷縮到現在的FilterViewController。

FirstViewController.h

- (IBAction)searchOptions:(id)sender; 

FirstViewController.m:

- (IBAction)searchOptions:(id)sender { 
    FilterViewController *ctrl = [[FilterViewController alloc] initWithNibName:@"FilterViewController" bundle:nil]; 
    [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil]; 

    [self.navigationController pushViewController:ctrl animated:NO]; 
} 

在FilterViewController它有一些UI的東西,你按下一個按鈕,這樣可以節省用戶界面的東西,然後將卷頁回落顯示FirstViewController。

FilterViewController.h:

- (IBAction)backToMap:(id)sender; 

FilterViewController.m:

- (IBAction)backToMap:(id)sender { 
    FirstViewController *ctrl = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
     [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:nil]; 

     [self.navigationController popViewControllerAnimated:YES]; 
} 

這裏的問題是UIView的保留。我怎樣才能保留UIView?

當我點擊FirstViewController按鈕的動畫作品和頁面呈現。然而在FilterViewController當我點擊它崩潰與錯誤調試器按鈕:

EXC_BAD_ACCESS(代碼= 2,地址= 0x8中)

在它說的輸出控制檯:(lldb)

後頁面蜷縮起來我有一個步進器,當我點擊步進器時,在調試器中出現同樣的錯誤。

更新:我已經跟蹤的內存位置錯誤:http://i.imgur.com/dL18H9Z.png

感謝。

+0

「這裏的問題是UIView的保留」:這是**真的* *模糊..嘗試精簡你的問題。你的應用崩潰了嗎?你是否收到警告?預計什麼?實際發生了什麼? – rdurand

+0

嗨,對不起,模糊 - 更新,希望底部部分解釋更好 –

回答

3

有一兩件事我注意到的是,你推一個視圖控制器,然後推的語法「背」另一個視圖控制器。這可能是問題:導航堆棧是一個堆棧。如果您從視圖0開始,則按下視圖1,如果您想回到視圖0,則可以「彈出」視圖1,而不是再次按視圖0。

所以在:

- (IBAction)backToMap:(id)sender { 
     FirstViewController *ctrl = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
     [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:nil]; 

     [self.navigationController popViewControllerAnimated:YES]; 
} 
+0

嗨艾薩克,感謝您的評論。我對obj-c仍然陌生,所以這些術語不容易。我更新了我的問題,但它的內存管理。當我做'殭屍'的事情,它說,在輸出中,我得到了'(lldb)' –

+0

@JoshBoothe我已經更新了答案。我相信你的問題是,當你應該彈出時你正在推視圖控制器。 – isaac

+0

感謝您的更新。它說:'沒有可見的@interface爲'UINavigationController聲明選擇器'popViewController:animated''不太確定這意味着 –

0

這裏的問題是,你儘量使視圖控制器之間的動畫與UIView的過渡方法。

根據文檔:

fromView 
    The starting view for the transition. By default, this view is removed 
from its superview as part of the transition. 
toView 
    The ending view for the transition. By default, this view is added 
to the superview of fromView as part of the transition. 

所以,當你調用這個方法,你的ViewController的看法與動畫另一種觀點所取代,並在堆後放在旁邊的ViewController沒有動畫,所以它看起來像沒事(但您的第一個控制器的視圖已被替換)。

但是當你試圖返回產生了某種錯誤的行爲 - 你更換視圖控制器,將被刪除。

所以,我想說,我必須更仔細地做,有幾種不同的方法來使viewControllers之間進行自定義轉換。

例如,你可以看到下一個解決方案(這類似於你) - http://www.vigorouscoding.com/2011/05/custom-uiviewcontroller-transitions/

https://gist.github.com/jeksys/1507490

相關問題