自定义UIViewController转换,其中UITableViewCell增长到全屏并返回?

时间:2014-04-18 01:19:15

标签: ios objective-c uitableview uiviewcontroller uicollectionview

我还没能在网上找到任何这方面的例子。我怎样才能达到以下效果?点击表格行时,我不想使用标准的从左到右的标准效果,我希望视图控制器转换动画如下所示:

  1. 用户点击表格中的单元格
  2. 细胞开始生长以填满屏幕,推动其上方和下方的其他行"屏幕外#34;。
  3. 随着细胞的增长,细胞元素(文本,图像等)交叉淡入新视图的内容,直到新视图完全填满屏幕。
  4. 我希望能够通过从底部边缘向上拖动来交互地转换回表格视图,从而实现上述相反的操作。即视图开始收缩回正常的表格视图单元格作为" offscreen"细胞动画回到原位。

    我已经想过拍摄桌子的快照并将其分割到单元格上方和下方的点,并将这些快照设置为屏幕外的自定义视图控制器转换的一部分。有没有更好的办法?理想情况下,我不想拍摄快照,因为我可能想要动画等等,当它们在屏幕外消失时仍然会在表格视图行中发生。

1 个答案:

答案 0 :(得分:0)

首先,我今天看到了你的帖子,他用快速的编程语言编写。 以下代码是将所选单元格扩展到全屏,子视图将淡出,背景图像将会扩展。

首先完成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
    }

}

如果已经解决,请忽略它。这可能对其他人有所帮助。