如何使图像旋转(动画)

2023-12-20

我有一个正方形的图像,我知道如何让它旋转。但不知道如何让它像这个动画一样旋转:

注意它是如何旋转的...然后稍微停下来...然后再次旋转...等等。

我所拥有的只是一个基本的旋转,但看起来不像上面的 gif:

extension UIView {
    func rotate360Degrees(duration: CFTimeInterval = 3) {
        let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
        rotateAnimation.fromValue = 0.0
        rotateAnimation.toValue = CGFloat(M_PI * 2)
        rotateAnimation.isRemovedOnCompletion = false
        rotateAnimation.duration = duration
        rotateAnimation.repeatCount=Float.infinity
        self.layer.add(rotateAnimation, forKey: nil)
    }
}

关于如何做到这一点有什么想法吗?


您需要使用加速和减速的计时函数,也称为缓入缓出计时函数。

我已经修改了您的函数以使用核心动画的标准缓入缓出计时函数:

extension UIView {
    func rotate360Degrees(duration: CFTimeInterval = 0.8) {
        let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
        rotateAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        let radians = CGFloat.pi / 4
        rotateAnimation.fromValue = radians
        rotateAnimation.toValue = radians + .pi
        rotateAnimation.isRemovedOnCompletion = false
        rotateAnimation.duration = duration
        rotateAnimation.repeatCount=Float.infinity
        self.layer.add(rotateAnimation, forKey: nil)
    }
}

Result:

请注意,在您的图像中,盒子看起来每 180 度暂停一次,因此我将函数更改为仅旋转 180 度。由于盒子具有 90 度径向对称性,因此它看起来仍然像一直在旋转,在 180 度和 360 度处有停顿。

如果您需要在没有任何径向对称的情况下对图像进行动画处理,则需要使用CAKeyframeAnimation实现 180 度和 360 度的缓入缓出。

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

如何使图像旋转(动画) 的相关文章

  • 有关 Swift 编译器选项的文档

    您好 我想开始在 Apple Swift 语言上运行一些微基准测试 然而 我觉得很难找到有关编译器优化的不同选项的适当文档 我读过很多关于其他人的语言微基准的问题和文章 但是如果能有一些关于该主题的可靠文档那就太好了 在最新的测试版中 使用
  • 无法在 Swift 中对闭包进行弱引用

    Update 我试着不弱化地写一下 好像也没有漏的情况 所以也许这个问题已经没有必要了 在 Objective C ARC 中 当你想让一个闭包能够在闭包内部使用它自己时 该块不能捕获对自身的强引用 否则它将是一个保留循环 因此您可以使闭包
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • 使用未解析的标识符“FlurryAdInterstitial”

    我正在尝试整合Flurry Interstitial Ads使用cocoapods in Swift and Xcode 7 1 1 我正在关注开发人员雅虎网站上的此文档 https developer yahoo com flurry d
  • Cocoa 应用程序菜单栏不可点击

    我正在我的可可应用程序中构建一个菜单栏 其中包含以下代码 implementation我的自定义应用程序CustomApplication void setUpMenuBar CustomApplication sharedApplicat
  • Swift - 元类型 .Type 和 .self 之间有什么区别?

    元类型有什么区别 Type and self在斯威夫特 Do self and Type返回一个struct 我明白那个 self可以用来检查dynamicType 你如何使用 Type 首先也是最重要的是查看 Apple 文档type o
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • UItextView 背景颜色 Linespacing 区域太

    我正在尝试在 UITextView 中复制文本突出显示 不是搜索文本突出显示 但我也被行间距的颜色所困扰 我该如何纠正这个问题 现在的情况 期望的结果 我已将以下属性添加到我的 UiTextview 的属性文本中 对于段落行间距 我使用了以
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • 如何在代码中编辑约束

    我有一个以 100 开始宽度限制的网页 当用户单击按钮时 我想将约束更改为 200 我试过这个 NSLayoutConstraint constrain NSLayoutConstraint constraintWithItem self
  • 根据一个数组对多个数组进行排序

    如何根据数组对一堆数组进行排序createdAt 例如 2015 11 02 19 19 35 0000 将它们组合成另一种类型 字典 以便在 tableView 中使用是否有益 如果有的话如何 var comment AnyObject
  • 如果我使用自定义 UITableViewCell,是否需要设置 heightForRowAtIndexPath?

    如果我使用自定义 UITableViewCell 是否需要设置 heightForRowAtIndexPath 在我的 NIB 中 我已经设置了单元高度 当我覆盖 heightForRowAtIndexPath 时 单元格的内容不会出现 即
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 如何更改 SwiftUI 列表中分隔符的颜色?

    我在 SwiftUI 中创建了一个列表 我想更改颜色或删除分隔符 因为在 UIKit 中 我们可以轻松更改 TableView 中分隔符的颜色 下面是 SwiftUI 中列表的代码和 UI 图片 State private var user
  • SpriteKit的更新函数:时间与帧率

    一般来说 我对编程和 Spritekit 很陌生 并且有兴趣探索毫秒和帧率之间的关系 以及如何使用更新函数作为两者之间的中介 帧率与毫秒 从本质上讲 帧速率和时间之间的主要区别在于时间始终一致 而帧速率则不然 由于密集的图形程序 它可能会下
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • 更改 iOS7 中 UIAlertView 的字体大小

    我想更改alertView中消息文本和标题文本的字体大小 苹果网站上没有任何文档谈到这一点 但苹果在其子类注释中表示 UIAlertView 类旨在按原样使用 请参考以下链接 https developer apple com librar

随机推荐

  • 正则表达式选择标签之间的所有文本

    选择 2 个标签之间的所有文本的最佳方法是什么 例如 所有 之间的文本 pre 页面上的标签 您可以使用 pre pre 用您想要的任何文本替换 pre 并提取第一组 对于更具体的指令 请指定一种语言 但这假设您有非常简单且有效的 HTML
  • Git - 如何查找目录中所有项目的所有“未推送”提交?

    我终于习惯了 Git 在最初的陡峭学习曲线之后 我必须说它非常好 我只是怀念单个文件外部 但那是另一个故事了 然而 我有一个无法解决的问题 我目前正在同时处理十几个项目 它们都是相互关联的 我必须从一个跳到另一个 到处做出改变 到目前为止一
  • 带有无效证书的自定义 NuGet feed

    如何使用 nuget 命令禁用 SSL 证书检查 PS C 软件 gt nuget exe 列表 无法加载服务索引 来源https asd ca api feeds https asd ca api feeds 一个错误 发送请求时发生 底
  • 使用 ManyToMany 的 TomEE + OpenJPA 不起作用

    我认输了 我不明白 这能有多难 我有两个实体User and Group 具有多对多关系 Group管理关系 所以在Group I have Entity Table name GROUPS catalog schema GROUPADMI
  • 使用 OpenCV 从相机捕获灰屏

    我在从网络摄像头 内置 hp dv5 捕获图像时遇到问题 唯一的结果是灰屏 这是代码 include StdAfx h include cv h include highgui h include
  • 是否可以自动化 ClickOnce 部署?

    我从事的项目由服务器和通过 ClickOnce 部署的客户端应用程序组成 客户端在用户第一次单击时安装http 文件 应用程序 http file application链接 并且安装过程中与用户的交互很少 只是标准的 ClickOnce
  • 正确使用 Apache HttpClient 以及何时关闭它。

    我在 servlet 中使用 HttpClient 来调用资源 在进行一些操作后我将其作为 servlet 响应返回 我的 HttpClient 使用 PoolingHttpClientConnectionManager 我像这样创建客户端
  • 图形 - 如何使用方法create(int x, int y, int width, int height)和translate(int x, int y)?

    我试图做我的计算机科学作业 但当我尝试使用以下方法时我陷入困境 public Graphics create int x int y int width int height 基于此 Graphics 对象创建一个新的 Graphics 对
  • 在 Swift 中终止 macOS 命令行工具的子进程

    我正在用 swift 编写一个 macOS 命令行工具 它执行 shell 命令 let process Process process launchPath bin sleep process arguments 100 process
  • Symfony 2 Guard 组件和普通登录表单

    我正在尝试使用新的Guard http symfony com blog new in symfony 2 8 guard authentication component成分 我找到的关于它的唯一信息是官方文档 http symfony
  • 使用 REST API 访问 Kubernetes API

    我正在尝试从 NodeJS 访问 Kubernetes API 在没有 kubectl 或 gcloud 命令行工具可用的环境中运行 使用https github com kubernetes client javascript https
  • java.lang.RuntimeException:错误:03000068:bignum例程:OPENSSL_internal:CALLED_WITH_EVEN_MODULUS

    我想在android中使用公钥和私钥实现RSA加密 我所做的实现如下 public static String enccriptData String dataToEncrypt try String publicExponentStrin
  • Python Pandas 十进制标记欧盟到美国

    我红色了有关欧盟到美国十进制标记转换的邮件 这些帮助很大 但我仍然觉得需要专家的一些帮助 我的数据来自 ERP 系统 数字格式为 1 000 000 32 我只想转换成类似 1000000 32 的东西 以便在 Pandas 中进一步处理
  • 动态 SQL 有哪些危险以及可以避免吗?

    我们刚刚收到以下代码 作为离岸开发商提供的新应用程序中复杂搜索查询的解决方案 我对动态 SQL 的使用持怀疑态度 因为我可以使用 关闭 SQL 语句 然后执行一个将在数据库上执行的令人讨厌的操作 关于如何修复注入攻击有什么想法吗 ALTER
  • 我们如何在没有源代码的情况下调试签名的 apk?

    我想问是否有可能在没有源代码的情况下调试发布的 apk 以及我们如何阻止用户执行此操作 我认为如果没有源代码我就无法调试apk 默认情况下清单有安卓 可调试 假 直到我将其发送给客户 他要求我禁用可调试模式 因为他遇到了这个问题 我尝试重现
  • Django South:更改数据迁移中的字段类型

    我正在更改一个字段CharField to IntegerField 字段名称保持不变 新创建的字段将基于旧字段 例如 如果旧字段是 L 则它将改为数字 1 我怎样才能在forwards 功能 正确的方法是将其分为三个迁移 第一次架构迁移以
  • 将包含数字的字符串解析为整数数组

    给出一个字符串作为由数字组成的输入 我想将其转换为 C 中的整数数组 include
  • Android:java.lang.RuntimeException:takePicture 失败

    我正在尝试在 SurfaceView 的 ontouchevent 中捕获图像 但是 每次触摸屏幕时 应用程序都会崩溃 并出现以下异常 01 05 21 03 18 500 ERROR AndroidRuntime 10367 FATAL
  • Turbomail 与 Pyramid 集成

    我需要一种从金字塔应用程序发送电子邮件的方法 我知道金字塔邮件程序 http docs pylonsproject org projects pyramid mailer en latest 但它的消息类别似乎相当有限 我不明白是否可以使用
  • 如何使图像旋转(动画)

    我有一个正方形的图像 我知道如何让它旋转 但不知道如何让它像这个动画一样旋转 注意它是如何旋转的 然后稍微停下来 然后再次旋转 等等 我所拥有的只是一个基本的旋转 但看起来不像上面的 gif extension UIView func ro