2016-12-16 50 views
1

我試圖添加子視圖,但所有添加的子視圖僅顯示for循環結束時,我想知道是否有方法使每個子視圖出現時已經添加,這是我的代碼使用for循環添加子視圖直到循環結束時才顯示圖像

for colum in 0 ... colums-1 { 
     xPos = colum * seatWidth 
     for row in 0 ... rows-1 { 
      yPos = row * seatWidth 

      let seatImageView = dataSource?.seatsView(sender: self, seatImageViewForRow: row, andColum: colum) 
      if seatImageView?.state != .empty { 
       seatImageView?.delegate = self 
       seatImageView!.frame = CGRect(x: xPos, y: yPos, width: seatWidth, height: seatWidth) 

       containerView?.addSubview(seatImageView!) 
      } 
     } 
     xPos = 0 
    } 
+1

請說明。正如所寫,在循環完成後,所有視圖都會很快出現在一起。你想要發生什麼呢?你想讓每一個在每一個之間都會有一些延遲嗎? – rmaddy

+0

這可能是性能問題,但由於您需要在主線程中執行此操作,因此您可以在view.addSubview()之後添加view.layoutIfNeeded()調用。 (我**不是**推薦這個,只是說它應該可以工作。) – dfd

+0

我想在for循環中的每個addSubview之後顯示在屏幕中添加的每個視圖,我試圖調用setNeedsDisplay()並且不起作用,我不相信layoutIfNeeded做的工作,因爲沒有約束的添加視圖 –

回答

0

如果直接添加視圖之後添加Runloop.main.run(until: Date.distantPast)。直到下一次runloop正常纔會更新UI,並且添加此代碼將確保它運行一次,因此它已更新。

+0

:(這不起作用,我猜所有的視圖出現很快,但隨後就像他們再次添加;我想顯示每個同時查看addSubview代碼在for循環中執行 –