Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Objective c 用核心动画替换NSSplitView子视图_Objective C_Cocoa_Core Animation_Nssplitview - Fatal编程技术网

Objective c 用核心动画替换NSSplitView子视图

Objective c 用核心动画替换NSSplitView子视图,objective-c,cocoa,core-animation,nssplitview,Objective C,Cocoa,Core Animation,Nssplitview,我试图弄清楚如何在垂直配置的2视图NSSplitView中设置切换(替换)子视图的动画。我在NSSplitView子类中使用以下方法使其半工作: 要设置动画,请执行以下操作: - (void)awakeFromNib { // set delegate [self setWantsLayer:YES]; CATransition *transition = [CATransition animation]; [transition setType:kCATrans

我试图弄清楚如何在垂直配置的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推离,而不仅仅是拆分右侧的子视图

是否有一种方法可以仅为子视图过渡设置动画?也许我使用了错误的动画关键点(“子视图”)?其他动画方法也可以


谢谢

这可能不是最干净的方法,但我最终使用了一个NSView“container”子类,该子类具有自定义的
addSubview:
replaceSubview:withView:
方法,这些方法修改新子视图的帧以匹配容器视图的帧,然后将其结构化到我想要设置动画的NSSplitView子视图中。然后,我在容器视图上设置了CATTransition,一切都按照我的要求进行了。

这可能不是最干净的方法,但我最终使用了一个NSView“container”子类,它带有自定义的
addSubview:
replaceSubview:withView:
方法,可以修改新子视图的框架以匹配容器视图的框架,然后将其结构化到我想要设置动画的NSSplitView子视图中。然后我在container视图上设置了CATTransition,一切都按照我的要求进行了