MacOS开发-带有动画的窗口内容切换

MacOS开发-带有动画的窗口内容切换

1.切换窗口内容效果

根据需求,窗口内容需要切换,且要求带有动画效果。实现效果如下图所示:

在这里插入图片描述

2.实现

思路:程序只有一个window,通过在window的contentview上添加和移除子视图实现页面内容切换,添加动画效果,使之具有视觉切换过程。

2.1 mainMenu.xib部分

在mainMenu.xib中拖入NSView,与窗口通大小,然后在AppDelegate中添加IBOutlet属性,此处我们将该view命名为windowBackView。

在这里插入图片描述

在windowBackView上添加按钮,并将IBAction拖入AppDelegate.m, 按钮动作名为

- (IBAction)showViewController1:(id)sender;

2.2 新建ViewController类

新建ViewController类,继承自NSViewController。

在这里插入图片描述

添加控件,以示区别。

2.3 代码部分

在AppDelegate.m中添加属性如下:

@interface AppDelegate ()<ViewControllerDelegate> {
    
    ViewController *_viewController;
}

@property (weak) IBOutlet NSView *windowBackView;
@property (weak) IBOutlet NSWindow *window;

@end

applicationDidFinishLaunching:(NSNotification *)aNotification方法中,添加如下代码

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    
    self.window.contentView.wantsLayer = YES;
    self.window.contentView.layer.backgroundColor = [[NSColor blueColor] CGColor];
    
    _viewController = [[ViewController alloc] initWithDelegate:self];
    _viewController.delegate = self;//设置代理,返回按钮使用
}

实现按钮点击切换内容方法- (IBAction)showViewController1:(id)sender

- (IBAction)showViewController1:(id)sender {
    //控制main Window中页面动画退出
    NSRect windowFrame = [self.window contentView].frame;
    NSRect rect = NSMakeRect(-windowFrame.size.width, 0, windowFrame.size.width, windowFrame.size.height);
    [self moveAnimationWithView:self.windowBackView location:rect];
    
    //控制viewController的view页面进入
    NSRect viewFrame = NSMakeRect(windowFrame.size.width, 0, windowFrame.size.width, windowFrame.size.height);
    [[self.window contentView] addSubview:_viewController.view];
    [_viewController.view setFrame:viewFrame];
    [self moveAnimationWithView:_viewController.view location:windowFrame];
}

其中,- (void)moveAnimationWithView:(NSView *)view location:(NSRect)rect方法如下:

/**
 * @brief 对view执行frame方面的动画,从原始位置移动到rect
 * @param view 需要被执行动画的view
 * @param rect view动画结束后的rect
 */
- (void)moveAnimationWithView:(NSView *)view location:(NSRect)rect{
    [[NSAnimationContext currentContext] setDuration:0.75];
    [[view animator] setFrame:rect];
    [NSAnimationContext endGrouping];
}

Viewcontroller中返回按钮执行动作,通过动画方式移除Viewcontroller的view。Viewcontroller.m中代码如下:

- (instancetype)init {
    return [self initWithDelegate:nil];
}

- (instancetype)initWithDelegate:(id)delegate {
    if (self = [super initWithNibName:@"ViewController" bundle:nil]){
        _delegate = delegate;
        self.view.wantsLayer = YES;
        [self.view.layer setBackgroundColor:[[NSColor cyanColor] CGColor]];
    }
    return self;
}



- (IBAction)backAction:(id)sender {
    if (self.delegate != nil && [self.delegate respondsToSelector:@selector(viewControllerWillClose:)]) {
        [self.delegate viewControllerWillClose:self];
    }
}

在AppDelegate.m中实现返回按钮点击的代理方法:

#pragma mark - ViewController1Delegate
- (void)viewControllerWillClose:(ViewController *)viewController {
    NSLog(@"LOG_viewControllerWillClose");
    NSRect windowFrame =self.window.contentView.frame;
    NSRect viewNewFrame = NSMakeRect(windowFrame.size.width, 0, windowFrame.size.width, windowFrame.size.height);
    [self moveAnimationWithView:_viewController.view location:viewNewFrame];
    [self moveAnimationWithView:self.windowBackView location:windowFrame];
}

Demo地址:

窗口动画切换demo

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: macOS是苹果公司开发的一款操作系统,而Arm-Linux是一款基于Arm架构的Linux操作系统。MacOS Arm-Linux指的是在Mac电脑上运行基于Arm架构的Linux系统。 苹果公司宣布将在不久的将来改变Mac电脑的芯片架构,从之前使用的Intel处理器转变为自家研发的Arm架构处理器。这意味着未来的Mac电脑将可以运行使用Arm架构编译的软件。 在这种背景下,Mac电脑将具备运行Arm-Linux操作系统的能力。Arm-Linux是Linux操作系统的一个分支,被广泛应用于嵌入式设备和移动设备等领域。将Arm-Linux移植到Mac电脑上,用户可以通过在Mac上运行Linux,获得更多的软件和应用选择。 MacOS Arm-Linux的引入将为用户提供更多的自由和灵活性。Arm-Linux操作系统具有良好的兼容性和可定制性,用户可以根据个人需求进行自定义设置,进行系统优化和调试等操作。同时,对于开发者来说,Arm-Linux也提供了更多的开发工具和环境,使他们能够更方便地进行软件开发和调试。 总之,MacOS Arm-Linux的结合将为用户带来更广阔的选择和更多的可能性,使Mac电脑成为一款更加强大和多功能的设备。用户可以享受到更多的软件和应用,同时也能更灵活地进行系统设置和软件开发等操作。这对于个人和开发者来说都是一种积极的变化,有助于提升用户体验和系统的可定制性。 ### 回答2: macOS是苹果公司自主开发的操作系统,主要运行于苹果的个人电脑和服务器上。而arm-linux是一种基于ARM架构的Linux操作系统。 macOS使用的是x86架构,而arm-linux则是基于ARM架构的操作系统。这两种架构在硬件和指令集上存在差异,因此软件在不同架构上运行时需要进行编译和适配。 最近,苹果公司宣布将在将来的Mac电脑上使用自家研发的ARM架构芯片。这一决定的背后有很多原因,其中包括更好的性能、能效和统一化等。换句话说,未来的Mac电脑将会运行基于ARM架构的芯片,并适配macOS操作系统。 对于软件开发者和用户来说,这个转变意味着一些软件可能需要重新编写或适配以在新的硬件和操作系统上运行。macOS上原本运行良好的x86架构软件需要重新编译为ARM架构版本,以确保兼容性和性能。 然而,这个转变也给开发者带来了新的机会。ARM架构在移动设备上已经得到广泛应用,移植到Mac电脑上有望带来更好的性能和能效。此外,将来的Mac电脑和iOS设备将共享更多的软件和生态系统,有助于提升跨设备的一体化体验。 总之,macOS将转向ARM架构的决定对于苹果公司和用户来说都是一个重要的里程碑。它将带来更好的性能、能效和统一化,并为开发者带来新的机遇。也许,未来的Mac电脑将更加强大和多样化。 ### 回答3: macOS是苹果公司的操作系统,它最初是基于PowerPC架构的,后来转向了x86架构。而ARM架构是一种使用更低功耗的处理器架构,被广泛应用于手机、平板电脑和嵌入式系统等领域。 近年来,ARM架构的处理器性能不断提升,开始逐渐应用于个人电脑领域。所以有人开始猜测苹果是否会将ARM架构引入其Mac电脑产品线。 然而,直到2020年底,苹果才正式发布了基于ARM架构的Mac电脑。这代表着苹果公司将逐渐适应ARM架构,并且未来的Mac电脑将会更加高效、节能。 对于开发者和用户来说,macOS转向ARM架构意味着一些程序和应用可能需要重新编译和优化,以适应新架构的要求。同时,用户也将享受到更长续航时间、更流畅的系统操作和更低的功耗。 对于整个行业来说,macOS转向ARM架构也体现了ARM架构的不断演进和扩大应用领域。它有望推动ARM架构在电脑领域的发展,进一步加强ARM与x86架构的竞争。特别是在移动办公、云计算和物联网等领域,ARM架构有望发挥更大的优势。 总之,macOS转向ARM架构是苹果公司顺应时代发展趋势的举措。它将为用户带来更好的系统体验,也为整个行业的发展带来新的机遇和挑战。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jarlen John

谢谢你给我一杯咖啡的温暖

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值