2015-10-22 67 views
0

刪除我創建相同的名稱下的多個對象和將它們添加到子視圖(變量是德語)。斯威夫特:所有的子視圖

wandX = (screenBreite - ((felderAnzX - 0) * feldBreite)) 
    wandY = (screenHoehe - ((felderAnzY - 5) * feldBreite)) 

    for(var i = 0; i < 6; i++){ 
     wand1 = UIImageView(frame: CGRectMake(wandX, wandY, feldBreite, feldBreite)) 
     wand1.image = wand 
     self.addSubview(wand1) 
     wandXarray.insert(wandX, atIndex: i) 
     wandYarray.insert(wandY, atIndex: i) 
     wandX = wandX + feldBreite 
    } 

(創建牆壁的一排)

但是,如果我想與wand1.removeFromSuperview()刪除它們,只刪除它添加的對象。我發現一個可能的解決方案是將另一個對象放在頂部並刪除所有引用。許多對象和許多階段的問題是CPU使用率。

編輯:使用方法self.view.subviews.removeAll()是讓我以下錯誤:

Cannot use mutating member on immutable value: 'subviews' is a get-only property

+0

'self.add.Subview(wand1) '。這條線如何運行? – t4nhpt

+0

謝謝。我在複製代碼時犯了一個錯誤。 –

回答

2

wand1 =的UIImageView(...被一遍又一遍地重寫你的參考,所以你將永遠無法刪除任何東西,但最後。從上海華創建的項目你要麼將不得不使用數組或詞典:

class Class 
{ 
    var array = [UIImageView](); 
    ... 
    func something() 
    { 
    ... 
    for(var i = 0; i < 6; i++){ 
    let wand1 = UIImageView(); 
    wand1.image = wand 
    array.append(UIImageView(frame: CGRectMake(wandX, wandY, feldBreite, feldBreite))) 
    self.add.Subview(wand1)//Dunno how this works but it is your code 
    wandXarray.insert(wandX, atIndex: i) 
    wandYarray.insert(wandY, atIndex: i) 
    wandX = wandX + feldBreite 
    } 
    ... 
    func removeThisImage(index : Int) 
    { 
     array[index].removeFromSuperView(); 
    } 

或者你可以爲你創建的每一個圖像創建對象的引用,每一個獨特的名字

//不再允許 如果你只是想從一個視圖中刪除所有子視圖,而不是關注消除細節,只是稱self.subviews.removeAll()其中自是包含您的子視圖的視圖。 //

看起來你將不得不編寫您自己的擴展方法來處理這個問題:

extension UIView 
{ 
    func clearSubviews() 
    { 
     for subview in self.subviews as! [UIView] { 
      subview.removeFromSuperview(); 
     } 
    } 
} 

然後使用它,它只是self.view.clearSubviews();

+0

這兩個都是好的提示。對於我的問題,第二個'self.subviews.removeAll()'完全適合。如果我使用它,我確實有問題。 「類型'ViewController'的值沒有成員'子視圖'」是錯誤消息。 –

+0

如果你是在視圖控制器內,那麼它是self.view.subviews – Knight0fDragon

+0

比我得到一個不同的錯誤仍然在同一行。 「不能在不可變的值上使用變異成員:'subview'是一個只讀屬性」 –