2012-08-24 62 views
1

有人能告訴我爲什麼這段代碼沒有刪除被動畫的子視圖嗎?視圖疊加起來,第二次關閉視圖時,視圖不會生成動畫,現在有兩個帶有標記99的subView實例。第一次沒有發佈視圖。SubViews沒有被刪除

for (UIView *subview in [self.smallView subviews]) { 
    NSLog(@"view:%@",subview); 
    if (subview.tag == 99) { 

     [UIView animateWithDuration:.5 
         animations:^{ 
          subview.alpha = 0; 
         } 
         completion:^(BOOL finished){ 
          subview.alpha = 0; 
          [subview removeFromSuperview]; 
         }]; 
    } 
} 

下面是如何添加子視圖,viewVC是一個視圖控制器子類和smallView是我加我的地圖,是所有視圖的容器。

@property (nonatomic, retain) CustomViewController *viewVC; 

viewVC = [self.storyboard instantiateViewControllerWithIdentifier:@"VIEWVC"]; 
viewVC.view.frame = CGRectMake(20, 20, 280, 371); 

viewVC.view.layer.cornerRadius = 15; 
viewVC.view.tag = 99; 
viewVC.view.alpha = 0; 
[self.smallView addSubview:viewVC.view]; 

[UIView animateWithDuration:.5 
       animations:^{ 
        viewVC.view.alpha = 1; 

       } 
       completion:^(BOOL finished){ 
        viewVC.view.alpha = 1; 

       }]; 
+0

您能否澄清爲什麼您要檢查subview.tag的值爲99? – Monkeyanator

+1

我很確定你正在做你想用這個代碼做什麼。你能建立一個迭代子視圖的小方法嗎?用標籤== 99計數子視圖並打印計數?在循環外調用它,然後在完成塊中調用它。我的猜測是在removeFromSuperview之後計數將是正確的。我想你是在其他地方重新添加視圖。 – danh

+0

添加視圖並調出alpha後,您不需要完成塊,但這不是問題所在。 – danh

回答

1

我認爲這個問題可能是你正在從要迭代的數組中移除一個對象,這會導致問題。試試這個:

NSArray *subviews = [NSArray arrayWithArray:[self.smallView subviews]]; 
for (UIView *subview in subviews) { 
    NSLog(@"view:%@",subview); 
    if (subview.tag == 99) { 

     [UIView animateWithDuration:.5 
         animations:^{ 
          subview.alpha = 0; 
         } 
         completion:^(BOOL finished){ 
          subview.alpha = 0; 
          [subview removeFromSuperview]; 
         }]; 
    } 
} 

這樣,你不再從正在迭代的數組中移除一個對象。

+0

@sch,你說得對,我不在這裏。我根據你的捕獲修改了我的代碼。 Eric,請參閱sch的回答。 – James

+0

我已經添加了如何添加子視圖的代碼 – Eric

+0

而且您確定if語句正在調用?在這裏,我正在處理一些事情,所以我會盡力在完成後回覆你(這將是幾個小時)。 – Monkeyanator

0

您能否澄清爲什麼您要檢查subview.tag的值爲99? if語句中的代碼是否完全沒有被調用?拋出一些NSLog調用,看看你的代碼是否在執行。如果是,那麼你應該檢查你在if語句中調用的方法,並確保它們都可以。

+0

我已經添加了如何添加子視圖的代碼 – Eric