swift - NSSplitViewItem.isCollapsed 忽略动画持续时间

标签 swift macos cocoa

我正在尝试像这样折叠 NSSplitViewItem

NSAnimationContext.runAnimationGroup({ context in
    context.duration = 0.1
    context.allowsImplicitAnimation = true
    searchItem.isCollapsed = collapsed
}, completionHandler: {
    // do stuff
})

无论我设置什么持续时间,折叠动画的动画持续时间都不会改变。

设置 CATransaction 的持续时间也不起作用。

检查头文件,它提到了这一点:

The exact animation used can be customized by setting it in the -animations dictionary with a key of "collapsed".

这引发了更多问题。我什么时候设置这个动画?我用什么键路径来制作这个动画?它期望什么值?等等...我想做的就是改变它的持续时间。

解决方案:

根据 @Loengard 的回答,这就是我所选择的

NSAnimationContext.runAnimationGroup { _ in
    let animation = CABasicAnimation(keyPath: nil)
    animation.duration = 0.1

    searchItem.animations["collapsed"] = animation
    searchItem.animator().isCollapsed = collapsed
}

最佳答案

头文件引用的字典是searchItem.animations。您不需要指定 fromValue 或 toValue,只需自定义持续时间,如下所示:

    NSAnimationContext.runAnimationGroup({ context in
        context.duration = 0.1
        context.allowsImplicitAnimation = true

        let collapseAnimation = CABasicAnimation(keyPath: "collapsed")
        collapseAnimation.duration = 0.1

        var existingAnimations = searchItem.animations
        existingAnimations["collapsed"] = collapseAnimation
        searchItem.animations = existingAnimations

        searchItem.isCollapsed = !searchItem.isCollapsed

    }) {  }

关于swift - NSSplitViewItem.isCollapsed 忽略动画持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55570683/

相关文章:

swift - 任何碰撞游戏结束 - Swift Spritekit

ios - 为什么我收到错误 EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

macos - 如何检查窗口是否相交?

objective-c - 在多个线程中执行任务怎么会比在主线程上顺序执行慢 100 倍呢?

objective-c - 重复的 NSLog 条目

iphone - 如何从基于 Storyboard的应用程序将参数传递给 UIViewController?

ios - ProgressHUD.showSuccess ("Success") 给出链接错误

swift - 对 AnyObject 感到沮丧?

c++ - SecVerifyTransformCreate 内存泄漏?

ios - iPhone 上设置的电子邮件签名在其他客户端中呈现为更大的字体大小