【问题标题】:Replacing a NSSplitView subview with Core Animation用 Core Animation 替换 NSSplitView 子视图
【发布时间】:2011-09-05 05:54:43
【问题描述】:

我试图弄清楚如何在垂直配置的 2 视图 NSSplitView 中为切换(替换)子视图设置动画。我在我的 NSSplitView 子类中使用以下方法使其半工作:

设置动画:

- (void)awakeFromNib {
    // set delegate
    [self setWantsLayer:YES];
    CATransition *transition = [CATransition animation];
    [transition setType:kCATransitionPush];
    [transition setSubtype:kCATransitionFromBottom];
    [transition setDuration:1.0];
    [self setAnimations:[NSDictionary dictionaryWithObject:transition
                                                    forKey:@"subviews"]];
}

并执行它:

- (void)replaceRightView:(NSView *)newView animated:(BOOL)animate {
    NSRect currentSize = [[[self subviews] objectAtIndex:1] frame];
    [newView setFrame:currentSize];

    if (animate) {
        [[self animator] replaceSubview:[[self subviews] objectAtIndex:1]
                                   with:newView];
    } else {
        [self replaceSubview:[[self subviews] objectAtIndex:1]
                        with:newView];
    }
}

但是,这段代码的效果是关闭整个 NSSplitView,而不仅仅是拆分右侧的子视图。

有没有办法只为子视图过渡设置动画?也许我使用了错误的动画键(“子视图”)?其他动画方法也可以。

谢谢!

【问题讨论】:

    标签: objective-c cocoa core-animation nssplitview


    【解决方案1】:

    这可能不是最干净的方式,但我最终使用了带有自定义 addSubview:replaceSubview:withView: 方法的 NSView 'container' 子类,它们修改新子视图的框架以匹配容器视图的框架,然后将其结构化为NSSplitView 子视图我想动画。然后我在容器视图上设置 CATransition,一切都按我的意愿工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多