2012-03-30 62 views
1

我使用兩個塊動態地在子視圖上繪製一些按鈕。一個計算縱向模式的幀,另一個計算橫向。它運作良好,但是當我旋轉時,它會覆蓋舊的。因此,我的一些按鈕來了兩次。這是我的代碼檢測oriantation:如何在繪製前清除子視圖的內容

//i have defined blocks in viewDidLoad: and everything is ok till here 
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
     if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) 
     { 
      dispatch_async(dispatch_get_main_queue(), PortraitBlock);   
     }  
     else 
     { 
      dispatch_async(dispatch_get_main_queue(), LandscapeBlock); 
       } 
     return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || 
       interfaceOrientation == UIInterfaceOrientationPortrait || 
       interfaceOrientation == UIInterfaceOrientationLandscapeLeft || 
       interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown); 
    } 

現在,我該如何清理視圖我添加按鈕?

注:我補充一個UIView對象上的按鈕,而該對象也就是一個UIScrollView對象

+0

@illis如果按鈕被添加了兩次,然後給按鈕添加標籤並檢查按鈕是否存在然後dnt添加它 – Leena 2012-03-30 13:45:45

+0

每次旋轉設備時都不需要重新繪製按鈕。只要將它們移動到合適的位置並在需要時改變外觀。 – SVGreg 2012-03-30 13:55:30

+0

@SVGreg我該怎麼做,? – ilhnctn 2012-03-30 14:03:32

回答

5

喜,

試試下面的代碼與此你所有你認爲 ALLOC將刪除按鈕。

for(UIButton *view in yourview.subviews) 
    { 
     [view removeFromSuperview]; 
    } 
+0

我確實嘗試了這個塊,後來在旋轉方法。但它會刪除所有的滾動視圖。出現空白屏幕 – ilhnctn 2012-03-30 13:47:51

+0

這將從您的視圖中刪除所有子視圖。 – SVGreg 2012-03-30 16:58:04

+0

用某個標記值標記按鈕的視圖以找到它們。 – SVGreg 2012-03-30 16:58:54

1

不要添加新的按鈕都上。只要改變舊的框架。

如果你需要添加新的按鈕。只刪除舊的!?要刪除所有子視圖,你可以使用:

for(UIView* view in self.view.subviews) 
{ 
    [view removeFromSuperview]; 
} 
+0

我試過了,但第二次旋轉後崩潰 – ilhnctn 2012-03-30 13:30:17

+0

任何UI更改都必須在主線程上完成,爲什麼要異步調用這些塊?什麼是崩潰!?任何日誌? – calimarkus 2012-03-30 13:33:30

+0

我嘗試了你的代碼在我的塊內,但空的屏幕出現。沒有崩潰,但沒有結果 – ilhnctn 2012-03-30 13:36:22

2

從您的視圖中刪除的意見,先檢查類,然後將其刪除之前。之後,您可以根據方向在屏幕上添加按鈕。

for(UIView *view in [View to add buttons].subviews) 
{ 
    if ([view isKindOfClass:[UIButton class]]) [view removeFromSuperview]; 
} 

如果你使用任何customButton中提到你customButtonClassName代替UIButton