Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 静态表视图动画_Ios_Swift_Uitableview_Animation - Fatal编程技术网

Ios 静态表视图动画

Ios 静态表视图动画,ios,swift,uitableview,animation,Ios,Swift,Uitableview,Animation,我最近一直在努力复制一个动画,但是尽管进行了所有的测试和研究,我还是找不到一个合适的解决方案来处理这种动画 我已经制作了一个我正在谈论的动画的GIF(取自“Captain Train”iOS应用程序): 基本上,它所做的是用各种视图替换tableView,并且非常漂亮地设置导航栏项目的动画 到目前为止我所做的: 我通过创建如下类创建了一个自定义转换控制器: class TransitionManager: NSObject, UIViewControllerAnimatedTransitioni

我最近一直在努力复制一个动画,但是尽管进行了所有的测试和研究,我还是找不到一个合适的解决方案来处理这种动画

我已经制作了一个我正在谈论的动画的GIF(取自“Captain Train”iOS应用程序):

基本上,它所做的是用各种视图替换tableView,并且非常漂亮地设置导航栏项目的动画

到目前为止我所做的:

我通过创建如下类创建了一个自定义转换控制器:

class TransitionManager: NSObject, UIViewControllerAnimatedTransitioning, UIViewControllerTransitioningDelegate  {

// MARK: UIViewControllerAnimatedTransitioning protocol methods
var openingFrame: CGRect?

func animateTransition(transitionContext: UIViewControllerContextTransitioning) {

    let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!
    let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!
    if let containerView = transitionContext.containerView() {

        let animationDuration = self .transitionDuration(transitionContext)

        let snapshotView = toViewController.view.resizableSnapshotViewFromRect(toViewController.view.frame, afterScreenUpdates: true, withCapInsets: UIEdgeInsetsZero)
        snapshotView.frame = openingFrame!
        containerView.addSubview(snapshotView)

        toViewController.view.alpha = 0.0
        containerView.addSubview(toViewController.view)

        UIView.animateWithDuration(animationDuration, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 1.0, options: .TransitionNone,
            animations: { () -> Void in
                snapshotView.frame = fromViewController.view.frame
            }, completion: { (finished) -> Void in
                snapshotView.removeFromSuperview()
                toViewController.view.alpha = 1.0

                transitionContext.completeTransition(finished)
        })

    }
}

// return how many seconds the transiton animation will take
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
    return 0.45
}

// MARK: UIViewControllerTransitioningDelegate protocol methods
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    return self
}

// return the animator used when dismissing from a viewcontroller
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    return self
}

}
这种转换是有效的,我可以点击一个表视图项目,并进行动画转换到另一个,使我的新视图符合单元格的边界,然后全屏显示

用户单击单元格时触发的函数如下所示:

    func presentDetailViewAnimated() {
        let transitionManager = TransitionManager()
        transitionManager.openingFrame = placeTableViewCell.frame

       let controller = self.storyboard?.instantiateViewControllerWithIdentifier("testAnimation")
    controller?.transitioningDelegate = transitionManager
       self.presentViewController(controller!, animated: true, completion: nil)   
    }
这很好,但它会替换视图。我正在寻找的动画发生在tableView中,以某种方式替换了内容,这就是我丢失的地方

我对IOS动画不是很有经验,所以我不知道从哪里开始才能达到这样的效果。我甚至不知道这个视图真的是一个表视图,或者如果他们只是伪造它,所有的事情都是以自定义的方式处理的


我希望我的帖子足够清晰,如有任何意见/想法,将不胜感激。:)

显示动画的代码。如果不放慢速度,就很难准确地看到发生了什么,但我会从点击tableviewCell的大小开始。拍摄目标控制器的快照,并将其缩小到单元格的帧中,然后将其添加到transitionContext containerView中,然后在uiview动画块中,将其扩展到全尺寸。正如我所说,这是一个快速浏览的方法。@MDB983我添加了完整的类,但我认为我所做的根本不是一个好的解决方案。事实上,当我把它转换成GIF时,我看到了所有的图片,我可以清楚地看到更多的动画,而不仅仅是一个矩形。比如表格视图单元格被推开之类的。我不认为这是另一个视图,我只是意识到它很可能是一个容器视图,带有交叉溶解等过渡动画。快照视图是目标控制器,alpha设置为0。你所看到的只是逐渐消失的目的地视图。您需要获取TableViewCell的框架。将框架应用于快照视图,并转换为containerView坐标系。这将使destinationViewController完全覆盖在tableViewCell上。在动画块中,将快照视图的帧设置为destinationViewControler的帧。这将从tableViewCell开始,将快照扩展到全尺寸,给人的印象是快照从tableViewCell“增长”。