OS X Yosemite 中 ViewController 的动画自定义呈现

2023-11-24

我想实现新方法,我在 Google 和 Stack Overflow 上搜索了很多,但没有找到示例。

- (void)presentViewController:(NSViewController *)viewController animator:(id <NSViewControllerPresentationAnimator>)animator

此方法在 OSX 10.10 中可用,此方法需要实现协议NSViewControllerPresentationAnimator其中有这两个方法

- (void)animatePresentationOfViewController:(NSViewController *)viewController fromViewController:(NSViewController *)fromViewController 

- (void)animateDismissalOfViewController:(NSViewController *)viewController fromViewController:(NSViewController *)fromViewController 

这些方法允许我们在两个 NSViewController 之间进行自定义动画 我需要一个实现示例,我有以下代码:

- (IBAction)openTask:(id)sender {
    
    NSStoryboard *storyboard = [NSStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    Tasks *task = [storyboard instantiateControllerWithIdentifier:@"tasks"];
    [self presentViewController:task animator:self];
 
}

- (void)animatePresentationOfViewController:(NSViewController *)viewController
                         fromViewController:(NSViewController *)fromViewController
{
    
    
}

- (void)animateDismissalOfViewController:(NSViewController *)viewController
                      fromViewController:(NSViewController *)fromViewController
{
    
    
}

谁能帮我举例说明如何实现这一转变?


这是一个简单的版本(Swift),它在新视图控制器的视图中淡入淡出。 我相信你可以将其翻译成 Objective-C。

您将希望实际使用自动布局,而不仅仅是更改框架,但这会使示例更长一些(不是太难。只需在添加视图后添加约束即可)

我不确定您是否也需要视图控制器遏制。然后需要进行适当的调用添加ChildViewController等等。也许有人可以阐明何时需要这样做,或者在任何情况下这是否实际上是良好的做法。

class MyTransitionAnimator: NSObject, NSViewControllerPresentationAnimator {

    func animatePresentationOfViewController(viewController: NSViewController, fromViewController: NSViewController) {

        let bottomVC = fromViewController
        let topVC = viewController

        // make sure the view has a CA layer for smooth animation
        topVC.view.wantsLayer = true

        // set redraw policy
        topVC.view.layerContentsRedrawPolicy = .OnSetNeedsDisplay

        // start out invisible
        topVC.view.alphaValue = 0

        // add view of presented viewcontroller
        bottomVC.view.addSubview(topVC.view)

        // adjust size
        topVC.view.frame = bottomVC.view.frame

        // Do some CoreAnimation stuff to present view
        NSAnimationContext.runAnimationGroup({ (context) -> Void in

            // fade duration
            context.duration = 2
            // animate to alpha 1
            topVC.view.animator().alphaValue = 1

        }, completionHandler: nil)

    }

    func animateDismissalOfViewController(viewController: NSViewController, fromViewController: NSViewController) {

        let bottomVC = fromViewController
        let topVC = viewController

        // make sure the view has a CA layer for smooth animation
        topVC.view.wantsLayer = true

        // set redraw policy
        topVC.view.layerContentsRedrawPolicy = .OnSetNeedsDisplay

        // Do some CoreAnimation stuff to present view
        NSAnimationContext.runAnimationGroup({ (context) -> Void in

            // fade duration
            context.duration = 2
            // animate view to alpha 0
            topVC.view.animator().alphaValue = 0

        }, completionHandler: {

            // remove view
            topVC.view.removeFromSuperview()
        })

    }
}

希望这能让您开始!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OS X Yosemite 中 ViewController 的动画自定义呈现 的相关文章

  • 如何在 UILabel.text 中添加制表符空间

    我有一个 UILabel 实例 比如 mylabel 我想做的是这样的 mylabel text Age tLimit tYear instead of mylabel text Age Limit Year 但当我尝试时 t 未被识别 如
  • 导出 iPhone 地址簿数据库的可能方法

    我想将 Phone s Address Book sqlite db 导出到我的 iPhone 应用程序中 我在网上搜索过 但一切似乎都在 ABAddressBook 上迭代 但我想知道是否可以以编程方式将 Phone s Address
  • for 循环内存不足

    嘿 所以我认为如果我制作一个生成随机密码的小应用程序 然后让该应用程序运行所有可能性并尝试查看密码是什么 告诉我它尝试了多少次 那会很酷 有时应用程序可以工作 有时会崩溃 具体取决于密码是什么 我想知道是否可以采取任何措施来防止它因占用大量
  • UIButton 图像未更改/更新

    首先 我对 Objective C 还很陌生 并且仍在尝试尽可能多地学习 所以请耐心等待 现在我有一个以编程方式创建的 UIButton 按下按钮时 将显示一个 UIActionSheet 其中包含 相机 选择照片 或 取消 选项 然后 按
  • UISegmentedControl 中的自定义字体禁用调整FontSizeToFitWidth

    我已经为我的 UISegmentedControl 设置了自定义字体 但它似乎禁用了默认字体自动调整字体大小以适合宽度范围 Before After 这是我用来设置自定义字体的代码 UISegmentedControl segmentedC
  • 保存录制的 AVAudioRecorder 声音文件:现在怎么办? (iOS、Xcode 4)

    在我的应用程序中 我希望用户能够录制一个声音文件并播放它 然后保存该声音文件以供以后使用 我用了本教程 http www techotopia com index php Recording Audio on an iPhone with
  • 从视频创建缩略图 - 提高速度性能 - AVAsset - iPhone [重复]

    这个问题在这里已经有答案了 我正在使用基于以下线程中的代码的代码来生成视频缩略图 从 iPhone SDK 中的视频 URL 或数据获取缩略图 https stackoverflow com questions 1347562 gettin
  • NSHTTPCookieStorage 是否跨应用程序持续存在?

    所以我只是好奇 NSHTTPCookieStorage 是否跨应用程序持久存在 或者仅在当前应用程序本地 我希望在另一个应用程序中收集的一些 cookie 可以在搜索应用程序中访问 是这样的吗 谢谢 PS 这是在 iPhone 或 iPad
  • 释放 Core Foundation 对象引用

    我是否需要释放 Core Foundation 对象来清理内存 如果是这样 怎么办 例如 在代码中 ABAddressBookRef addressBook ABAddressBookCreate CFArrayRef peopleArra
  • Objective-C:在哪里定义宏以便随处可用?

    我有一个 iOS 应用程序 它在许多视图控制器中使用相同的字符串 数字等 所以我认为最好在一个文件中定义这些常量并在所有视图控制器实现中使用它 优点是更改一个数字 我只需要做一次 而不是在所有视图控制器中都使用该数字 实际上 我的 h 文件
  • Mac OS X 下的 JavaFX:系统菜单和模态窗口

    我目前面临 Mac OS X 下的 JavaFX 菜单和模式对话框的问题 我正在使用该方法 MenuBar setUseSystemMenuBar true 为了将系统菜单栏用于我的应用程序菜单 这工作正常 但如果模式对话框打开 菜单不会被
  • 将第 3 方库 ZXing 导入 Xcode

    我尝试了多种方法将第 3 方库 ZXing 导入我的 iOS 应用程序 但所有方法都很痛苦 或者根本不起作用 如果有人可以建议我做错了什么 或者提出导入 ZXing 等库的更好方法 我将非常感激 一定比这个容易 这就是我所做的 结果是 My
  • iPad 照片选择器崩溃

    我正在使用以下函数根据 UIActionSheet 的结果激活设备相机或图像选择器 如果 fromCamera YES 那么它适用于 iPhone 和 iPad 如果 fromCamera NO 那么它可以在 iPhone 上运行并出现图像
  • 您是否标记 UIView 或将它们保留为属性?

    这主要是一个风格问题 但自从我开始为 iPhone 编程以来 我一直很好奇其他人的想法是什么 当您的 iPhone 应用程序中有一个 UIView 并且需要在应用程序的其他位置访问它时 通常在视图控制器中的另一个函数中 您是否喜欢用整数标记
  • 卸载我安装的所有 Python 包及其依赖项,而不用破坏我的 Mac

    有很多问题 但正确的方法似乎是手动卸载不需要的所有内容 pip 在卸载时不会卸载包的依赖项 https stackoverflow com questions 7915998 does uninstalling a package with
  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • UIPanGestureRecognizer 对坐标的限制

    我在主 UIView 中添加了一个子视图 称为panel 并且我向其中添加了gestureRecognizer 因为我希望它只能在Y轴上拖动并且只能在某些限制下 即160 300 超过300它不能拖动 我以这种方式实现了手势处理 IBAct
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr

随机推荐

  • INSERT 语句与 FOREIGN KEY 约束冲突错误

    您好 我收到此错误 INSERT 语句与 FOREIGN KEY 约束 FK dbo AspNetUsers dbo Contacts ContactID 冲突 冲突发生在数据库 aspnet COGMakati 2014011901555
  • TextView 超链接不起作用?

    Why TextView超链接不起作用 使用超链接作为自定义内部dialog box 超链接未出现 我哪里弄错了 怎么解决呢 给我指导 XML 代码是
  • 如何在一个图中绘制“多个箱形图”?

    我有以下格式的数据 repetition packet route energy level 1 1 1 10 0 1 1 2 12 3 1 1 3 13 8 1 2 1 9 2 1 2 2 10 1 1 2 3 11 2 50 99 3
  • 有人对“阅读时间算法”有任何线索吗?

    只是好奇如何计算某人阅读包含 x 个字符和 或 y 个单词的段落所需的时间长度 对此有什么想法吗 假设它有 938 个单词 或者如果你使用 JavaScript 你可以这样做 const blogPost article or blog p
  • 解决后承诺值未放入模板

    我对 javascript 和 Promise 相当陌生 所以我可能无法理解所有基本概念 但我正在尝试 我的模型中有一个函数可以检查友谊状态 friendShipStatus function var self this return Em
  • 如何按字母顺序排序,同时忽略大小写?

    我有这个代码 但仅适用于小写字母 我希望它对列表进行排序 同时忽略大写字母 package sortarray com import java util ArrayList import java util List import andr
  • 如何使用 AngularJS $resource 自定义操作?

    我一直在一些存储库中使用自定义操作 到目前为止 我只需要指定 url 和方法 例如 updatePassword url ENV NITRO PROJECT REST URL admins adminId password method P
  • 使用 File.Encrypt 加密文件,然后将其解密到内存流

    我需要实现一个简单的文件加密 然后在需要时将其解密到内存流 最简单的方法似乎是使用 File Encrypt 来做到这一点 但是是否可以将文件解密到内存流 而不是在将文件读取到内存流之前解密文件 从而将其暴露一段时间 如果 File Enc
  • Xcode 4.3 和 iPhone 模拟器 4.2

    有没有办法在 Xcode 中安装 iPhone Simulator 4 24 3为了狮子 我只能找到如何在 Xcode 4 2 中安装它 但不能找到 Xcode 4 3 for Lion 中的安装方法 我找到了一种将iPhone模拟器4 2
  • Spotify API 非法的redirect_uri

    我正在尝试完成 Spotify 开发人员 API 教程 但当我尝试访问用户登录页面时 出现此错误 我已经三次检查代码中的 URI 是否与 MyApplications 页面上的 URI 匹配 但它仍然无法工作 这是脚本 var expres
  • Python Eyed3 警告

    我的一些 mp3 文件似乎有非标准流派 当我循环遍历它们时 我必须在程序中执行此操作 我收到大量如下警告 eyed3 id3 WARNING Non standard genre name Rock Punk Pop Punk Rock A
  • django-simple-history 中 ManyToManyField 的历史

    简而言之 我需要在历史记录中保存对我的模型之一的多对多字段所做的更改 我可以从 https github com Kyruus django simple history commit 5ba8d2b4d72819f154a11f29779
  • 使用 automake 设置每个文件的标志

    有没有办法使用 automake 在每个文件的基础上设置标志 特别是 如果我有一个 C 项目 并且想要使用 W 编译除我想要禁用特定警告的文件之外的所有文件 我该怎么办 我尝试过类似的东西 CXXFLAGS WAll bin PROGRAM
  • Thread.suspend() 和 .resume() 的替代方法

    我有一大段代码不是循环 只是一个发生一次但需要一些时间的命令列表 我需要它根据不断变化的布尔值随时暂停或终止此操作 我可以使用不同的线程来挂起 恢复和停止此代码 但这些方法已被弃用 因此我想避免使用它们 我可以检查每行代码之间的布尔值 但我
  • PHP表单验证函数

    我目前正在编写一些 PHP 表单验证 我已经验证了客户端 并且有一些重复的代码 我认为这些代码在一个不错的 PHP 小函数中可以很好地工作 但是我很难让它工作 我确信这只是语法问题 但我无法确定它 任何帮助表示赞赏 Validate pho
  • 如何记录所有 Django 表单验证错误?

    在我的 Django 应用程序中 我有一个 forms py 文件 在其中定义了与表单输入屏幕对应的类负载 这些类中的每一个都在该属性 字段特定的 clean 函数中或在表单类的整体 clean 函数中进行一些验证 如果这些 clean 函
  • 清理整数数据库输入

    我有一个通过 POST 请求获取数据的应用程序 我正在使用这些数据将新行插入数据库 我知道使用mysql real escape string 加上删除 和 是处理字符串的方法 但是整数值呢 现在 我正在使用 PHP 函数intval 在他
  • Gradle 同步失败:com/intellij/openapi/util/io/FileUtil.toSystemIndependentName 的 @NotNull 参数“aFileName”的参数不能为 null

    我将我的项目导入到Android Studio 1 3 2现在显示错误 Gradle sync started Gradle sync failed Argument for NotNull parameter aFileName of c
  • git 构建期间“无法在 @INC 中找到 ExtUtils/MakeMaker.pm”

    我正在建造git在一个非常小的系统 Ubuntu 16 04 docker 镜像 上 不使用包管理器 除了wget xz utils make and gcc 因此 我安装先决条件如下 apt get update apt get inst
  • OS X Yosemite 中 ViewController 的动画自定义呈现

    我想实现新方法 我在 Google 和 Stack Overflow 上搜索了很多 但没有找到示例 void presentViewController NSViewController viewController animator id