我很努力地理解爲什麼下面的第一種方法可以隱藏和刪除視圖的子視圖。在這第一種方法中,我通過引用傳遞指針。在第二種方法中,我不太一般,我有一個用於刪除特定視圖的委託方法。我想使用第一種方法,因爲我有幾個我想要應用的視圖。我應該提到,只要第一種方法在實現類中被調用,第一種方法就不會失敗。當我從視圖控制器中調用它時,它會失敗,我想解僱它。當第一個方法失敗時,我在removeFromSuperview行上得到EXC_BAD_ACCESS。從超級景觀中刪除視圖iOS
-(void)closeView:(UIViewController **)viewController
{
[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
[[*viewController view] setAlpha:0.0];
}
completion:^(BOOL finished)
{
[[*viewController view] removeFromSuperview];
[*viewController release], *viewController = nil;
}];
}
-(void)closeButtonClicked
{
[delegate closeView:&self];
}
//
// This method works without fail:
//
-(void)closeView
{
[UIView transitionWithView:self.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationOptionCurveLinear
animations:^
{
// In this context viewController is defined in the class interface
[[viewController view] setAlpha:0.0];
}
completion:^(BOOL finished)
{
[[viewController view] removeFromSuperview];
[viewController release], viewController = nil;
}];
}
-(void)closeButtonClicked
{
[delegate closeView];
}
謝謝你關於不需要alpha的建議。這是個好消息。讓我再解釋一下我的推理,讓你明白我爲什麼要發佈正在被刪除的視圖。我這樣做是爲了將操作的處理從正在顯示的子視圖中分離出來。我希望父母的看法決定如何處理孩子。我不希望此操作的默認操作是刪除和取消子視圖。據說,我不明白爲什麼父母從視圖中刪除一個孩子並使其失效,這是有問題的。你能解釋一下:) – banDedo 2012-01-06 21:36:44
就像一個額外的評論,removefromsuperview沒有在塊中動畫。我仍然必須將它放入帶有alpha動畫的完成塊中,才能按照需要工作。難道我做錯了什麼? – banDedo 2012-01-07 00:44:22
@PatrickHogan對不起,我應該適當地修改你的代碼。對於選項:您需要選擇其中一個UIViewAnimationOptionTransition選項,以使動畫適用於已移除的視圖。 CrossDissolve可能是你想要的。我將調整代碼以表明這一點。 – fishinear 2012-01-07 02:13:26