将 ViewController 缩小为圆形过渡 - swift

Posted

技术标签:

【中文标题】将 ViewController 缩小为圆形过渡 - swift【英文标题】:Shrink ViewController to circular shape transition - swift 【发布时间】:2019-06-10 22:02:17 【问题描述】:

我正在尝试按照此项目中的示例创建展开/缩小视图控制器转换。在我的例子中,正在呈现的视图控制器将具有与按钮本身相同的背景颜色,因此这个动画本质上只是按钮扩展以覆盖整个屏幕而不会消失。

https://github.com/AladinWay/TransitionButton

我已将我的按钮放在屏幕的右下角,并设法使用以下功能使其展开:

private func expand(completion:(()->Void)?, revertDelay: TimeInterval) 

    let expandAnim = CABasicAnimation(keyPath: "transform.scale")
    let expandScale = (UIScreen.main.bounds.size.height/self.frame.size.height)*2
    expandAnim.fromValue            = 1.0
    expandAnim.toValue              = max(expandScale,26.0)
    expandAnim.timingFunction       = expandCurve
    expandAnim.duration             = 0.3
    expandAnim.fillMode             = .forwards
    expandAnim.isRemovedOnCompletion  = false

    CATransaction.setCompletionBlock 
        completion?()
        // We return to original state after a delay to give opportunity to custom transition
        DispatchQueue.main.asyncAfter(deadline: .now() + revertDelay) 
            self.setOriginalState(completion: nil)
            self.layer.removeAllAnimations() // make sure we remove all animation
        
    

    layer.add(expandAnim, forKey: expandAnim.keyPath)

    CATransaction.commit()

现在我正在尝试创建动画以关闭视图控制器,这将基本上反转初始动画并将整个屏幕缩小回屏幕底部的圆形按钮。我不确定如何调整上面的代码来扭转这种情况。

【问题讨论】:

【参考方案1】:

您可以尝试使用完全相同的块,除了切换fromValuetoValue

expandAnim.fromValue            = max(expandScale,26.0)
expandAnim.toValue              = 1.0

【讨论】:

以上是关于将 ViewController 缩小为圆形过渡 - swift的主要内容,如果未能解决你的问题,请参考以下文章

新活动的圆形展示过渡

在显示之前将 ViewController 加载到 ContainerView 中,因此没有可见的过渡

将 Nivo Slider 更改为仅淡入淡出过渡

如何popToRootViewController在navigationController堆栈上有多个viewController,并且只显示一个过渡?

Android 共享元素转换:将 ImageView 从圆形转换为矩形,然后再转换回来

将矩形 UIImageView 变成圆形