如何在UITableViewCell内向UIViews添加动画?

时间:2016-06-21 05:39:06

标签: ios swift uitableview caanimation

我目前正在使用swift开发iOS应用程序,并且在尝试向单元格内的UIViews添加动画时遇到了一些问题。

这是一个使用UITableView的菜单。 通过按下单元格中的按钮,可以扩展一些单元格。 按钮是一个箭头,如">"但是指向底部,按下它时应该向上并且细胞膨胀。再次按下箭头再次指向底部,单元格缩小。我想为其添加动画。

动画

extension UIView{
    func addAnimation_rotation_x (from : Double , to : Double){
        let rotationAnimation = CABasicAnimation()
        rotationAnimation.keyPath = "transform.rotation.x"
        rotationAnimation.duration = 0.3
        rotationAnimation.removedOnCompletion = false
        rotationAnimation.fillMode = kCAFillModeForwards
        rotationAnimation.fromValue = from
        rotationAnimation.toValue = to
        self.layer.addAnimation(rotationAnimation, forKey: nil)
    }   
}

的ViewController

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if index_of_expandedRow.contains(indexPath){
        let height = CGFloat(self.total_dishArray[indexPath.section][indexPath.row].expanded_rows.count) * 60 + 150
        return height
    }else{
        return 150
    }
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    let cell = tableView.dequeueReusableCellWithIdentifier("DishTableViewCell") as! DishTableViewCell
    if isFinishedLoadingDishes{
//setting cells
        cell.btn_expand.addTarget(self, action: #selector(OrderViewController.expand(_:)), forControlEvents: UIControlEvents.TouchUpInside)
        if index_of_expandedRow.contains(indexPath){
            cell.btn_expand.addAnimation_rotation_y(0, to: M_PI)
        }else{
            cell.btn_expand.addAnimation_rotation_y(M_PI, to: 0)    
        }
    }
    return cell
}

func expand (sender :UIButton){
    let cell  = sender.superview!.superview as! UITableViewCell
    let indexpath = tableView_right.indexPathForCell(cell)!
    if self.index_of_expandedRow.contains(indexpath){
        let index = self.index_of_expandedRow.indexOf(indexpath)!
        self.index_of_expandedRow.removeAtIndex(index)
    }else{
        self.index_of_expandedRow.append(indexpath)  
    }
    tableView_right.reloadRowsAtIndexPaths([indexpath], withRowAnimation: UITableViewRowAnimation.None)

//if the expanded content is not visible then make it visible

        let frame = self.tableView_right.cellForRowAtIndexPath(indexpath)!.frame
        if frame.origin.y + frame.height > tableView_right.frame.height + tableView_right.contentOffset.y  {
            tableView_right.setContentOffset(CGPointMake(0, tableView_right.contentOffset.y + ((frame.origin.y + frame.height) - (tableView_right.frame.height + tableView_right.contentOffset.y))) ,animated:  true)
        }
    }

我通过改变它们的高度来扩展行。 第一次按下按钮时动画效果很好,但之后失败了。

任何建议都将不胜感激。

0 个答案:

没有答案