4

我一直沒能找到這個在線的任何例子。我怎樣才能達到以下效果?輕敲錶行的時候,而不是標準的幻燈片到左的效果,我想視圖控制器過渡動畫看起來像下面這樣:自定義UIViewController轉換UITableViewCell增長到全屏和返回?

  1. 用戶點擊一個細胞的表
  2. 電池開始越來越多地填滿屏幕,將其他行上下推到「屏幕外」。
  3. 隨着細胞生長,細胞元素(文本,圖像等)交叉衰落到新的視圖的內容,直到新的視圖完全填充屏幕。

我希望能夠通過從底部邊緣向上拖動來交互式地切換回表格視圖,從而實現上述的相反。即隨着「屏外」單元重新移動到位置,視圖開始縮回到正常的桌子視圖單元中。

我想過走表的快照,並在點上方和下方的細胞分裂起來,和動畫這些快照屏幕外的自定義視圖控制器過渡的一部分。有沒有更好的辦法?理想情況下,我不希望拍攝快照,因爲我可能想要動畫等,它們在淡出屏幕時仍然在表格視圖行中發生。

+0

你可以看看這個https://github.com/aberger/ABMExpandingTableViewCells – mownier

回答

0

第一件事,第一,我已經看到您的文章現在和他是寫在迅速的編程語言。 的follwing代碼是所選擇的小區擴展到整個屏幕,其中,所述子視圖將淡出和背景圖像將膨脹。

第一個完整的cellForRowAtIndexPath,然後在didSelectRowAtIndexPath方法,

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

    isSelected = true 
    selectedCellIndex = indexPath.row 

    tableView.beginUpdates() 

    var cellSelected: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)! 
    cellSelected.frame = tableCities.rectForRowAtIndexPath(indexPath) 

    println("cell frame: \(cellSelected) and center: \(cellSelected.center)") 
    let newCell = cellSelected.frame.origin.y - tableOffset 
    println("new cell origin: \(newCell)") 

    var tempFrame: CGRect = cellSelected.frame 
    variableHeight = cellSelected.frame.origin.y - tableOffset 
    tempFrame.size.height = self.view.frame.height 

    println("contentoffset: \(tableView.contentOffset)") 
    let offset = tableView.contentOffset.y 
    println("cell tag: \(cellSelected.contentView.tag)") 
    let viewCell: UIView? = cellSelected.contentView.viewWithTag(cellSelected.contentView.tag) 
    println("label: \(viewCell)") 
    viewCell!.alpha = 1 

    UIView.animateWithDuration(5.0, delay: 0.1, options: UIViewAnimationOptions.BeginFromCurrentState, animations: { 

     tableView.setContentOffset(CGPointMake(0, offset + self.variableHeight), animated: false) 
     tableView.contentInset = UIEdgeInsetsMake(0, 0, self.variableHeight, 0) 
     tableView.endUpdates() 
     cellSelected.frame = tempFrame 
     viewCell!.alpha = 0 
     println("contentoffset: \(tableView.contentOffset)") 



    }, completion: nil) 


} 

然後更新您的heightForRowAtIndexPath,如

 func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    if isSelected && (selectedCellIndex == indexPath.row) { 
     return self.view.frame.height 

    }else { 
     return 100 
    } 

} 

忽略這一點,如果已經解決了。這可能對其他人有幫助。