如何在 iOS 中为自定义属性设置动画

2024-01-11

我有一个自定义 UIView,它使用 Core Graphics 调用来绘制其内容。一切正常,但现在我想要动画影响显示的值的变化。我有一个自定义属性可以在我的自定义 UView 中实现此目的:

var _anime: CGFloat = 0
var anime: CGFloat {
    set {
        _anime = newValue
        for(gauge) in gauges {
            gauge.animate(newValue)
        }
        setNeedsDisplay()
    }
    get {
        return _anime
    }
}

我已经从 ViewController 开始了一个动画:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.emaxView.anime = 0.5
    UIView.animate(withDuration: 4) {
        DDLogDebug("in animations")
        self.emaxView.anime = 1.0
    }
}

这不起作用 - 动画值确实从 0.5 更改为 1.0,但它是立即更改的。对动画设置器有两次调用,一次调用值为 0.5,然后立即调用一次值为 1.0。如果我更改属性,我会将动画设置为标准 UIView 属性,例如阿尔法,它工作正常。

我有 Android 背景,所以整个 iOS 动画框架对我来说看起来就像黑魔法。除了预定义的 UIView 属性之外,还有其他方法可以对属性进行动画处理吗?

下面是动画视图应该看起来的样子 - 它大约每 1/2 秒获得一个新值,我希望指针在这段时间内从前一个值平滑地移动到下一个值。更新它的代码是:

open func animate(_ progress: CGFloat) {
    //DDLogDebug("in animate: progress \(progress)")
    if(dataValid) {
        currentValue = targetValue * progress + initialValue * (1 - progress)
    }
}

并打电话draw()更新后将使其使用新的指针位置重新绘制,并在之间进行插值initialValue and targetValue


简短回答:使用CADisplayLink每 n 帧被调用一次。示例代码:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let displayLink = CADisplayLink(target: self, selector: #selector(animationDidUpdate))
    displayLink.preferredFramesPerSecond = 50
    displayLink.add(to: .main, forMode: .defaultRunLoopMode)
    updateValues()
}

var animationComplete = false
var lastUpdateTime = CACurrentMediaTime()
func updateValues() {
    self.emaxView.animate(0);
    lastUpdateTime = CACurrentMediaTime()
    animationComplete = false
}

func animationDidUpdate(displayLink: CADisplayLink) {

    if(!animationComplete) {
        let now = CACurrentMediaTime()
        let interval = (CACurrentMediaTime() - lastUpdateTime)/animationDuration
        self.emaxView.animate(min(CGFloat(interval), 1))
        animationComplete = interval >= 1.0
    }
}

}

代码可以进行改进和概括,但它正在完成我需要的工作。

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

如何在 iOS 中为自定义属性设置动画 的相关文章

  • 使用 Xcode 6 XLIFF 导出的 iOS 本地化/国际化设置 Bungle

    背景 Xcode 6 添加了快速导出功能 可为每种语言创建单个 XLIFF 文件 只需从文件导航器中选择您的项目 然后选择菜单项编辑器 导出以进行本地化 Issue 它工作得非常好 并且 XML 中包含了所有内容 除了设置捆绑字符串 有人有
  • 如何在flutter插件中调试iOS原生代码?

    我想知道如何在插件中调试 flutter iOS 代码 我可以打开每当您创建插件时生成的示例应用程序 但我将插件代码视为二进制框架 因此我无法调试它 对于 android 这相当简单 我只需打开 A S 中的 android 文件夹即可 插
  • iOS 8 启动图像文件 - 导航栏和状态栏

    我正在使用 Interface Builder 制作 iOS 8 的启动图像文件 我想要的启动图像非常简单 我认为与 设置 应用程序相同 顶部的导航栏带有一个空的分组 TableView 无标题等 请注意 我通常不使用 Interface
  • 为什么 iTunes Search API 的结果排序与 iOS 设备上的搜索结果不同?

    我注意到应用程序从iTunes 搜索 API http www apple com itunes affiliates resources documentation itunes store web service search api
  • 更改从 xib 加载的 UITableViewHeaderFooterView 上的背景颜色表示使用 contentView.backgroundColor

    I m 从 xib 文件创建 UITableViewHeaderFooterView https stackoverflow com a 20073742 35690 几乎一切都工作正常 问题是 现在当我尝试更改背景颜色 或者如果我在 xi
  • ios UICollectionView - 设置自动高度

    我正在使用 UICollection 视图创建 3x4 按钮矩阵 iPhone4很好看 高度也比较小 此外 集合视图不会滚动 因为它在可用空间中显示 3x4 矩阵按钮 现在 当我在 iPhone5 上运行相同的应用程序时 我看到底部按钮矩阵
  • 如何在 Objective-C 的动画中使视图振动? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个名为 qShake 的 UIView 当用户犯错误时 我希望该视图在一个小空间内短时间内从左到右晃动 我将如何创建动画来做到这一点
  • 如何获取 UIImage 的大小(以 KB 为单位)?

    有没有办法从 UIImage 获取以 KB 为单位的文件大小 而不从 didFinishPickingMediaWithInfo 获取该图像 所呈现的图像来自相册 我尝试了以下代码 但这给出了以下结果 图像大小 KB 0 000000 vo
  • iOS DateFormatter dateFormat fromTemplate 中允许使用哪些格式说明符?

    我找不到模板参数中允许的格式说明符列表DateFormatter dateFormat fromTemplate options locale 日期格式 https developer apple com documentation fou
  • UITableView 部分始终保持在视图内

    我有一个包含 3 个部分的 UITableView 第 1 节 该部分的标题是 Players 内容恰好是 1 个单元格 包含 1 4 个玩家姓名的水平列表 第 2 节 该部分的标题是 回合 内容是 X 个单元格 每个单元格包含每个玩家在第
  • 具有 3D 旋转功能的 CAEmitterCell

    我正在尝试使用 CAEmitterLayer 和 CAEmitterCell 重现从顶部落下的小纸片效果 到目前为止 我得到了它的 2D 动画 但是我很难让每个单元格在掉落时旋转 如何对每个粒子应用随机旋转 我尝试过 3D Transfor
  • 如何使用 Swift 将 UIImageView 设置在屏幕中心水平或垂直,但不再使用 StoryBoard

    我正在尝试放置一个UIImageView屏幕上方中央水平方向 正在编码viewDidLoad 而且我有两个预案 这意味着我不知道具体的功能或API 1 我想设置一个等于屏幕宽度一半的变量 我知道它会与 边界 或 框架 相关的东西一起工作 可
  • 在 iOS 上提升 Asio SSL 认证

    我正在尝试在 iOS 上使用 Boost Asio 并且已经解决了所有问题 但如何检查我正在连接的服务器的证书 如何使用 Boost Asio 在 iOS 中检查连接服务器的证书 在我的另一个答案中 您可以看到一个简单的 SSL 客户端 在
  • 如何阻止 Xamarin 在启用位码的情况下构建我的应用程序?

    在我的 iOS 版本的配置中 没有禁用位码的选项 在 Xcode 中可以设置 ENABLE BITCODE NO 我需要这个 因为我的链接框架不是用位码构建的 而且现在苹果不再允许半位码编译的应用程序 In your csproj对于您的
  • 使用 Xcode 资产目录缓存 UIImage

    我们都知道UIImage神秘的幕后缓存机制imageNamed 方法 在苹果的UIImage 类参考 https developer apple com library IOS documentation UIKit Reference U
  • Sqlite3 查询在 iOS 8.2 下变得非常慢

    我制作了一个可以在应用程序内使用 sqlite 数据库的应用程序 在 iOS 8 2 之前 它工作得很好 但更新后 查询方法的工作速度慢了大约 100 倍 我试图查找有关此问题的信息 但尚未找到任何信息 有人有同样的经历吗 这是我的方法 到
  • Cordova 构建 iOS 应用程序并打开模拟器,但未安装

    我正在 MacOS 上用 Cordova 制作一个 iOS 应用程序 当我跑步时cordova emulate ios该应用程序会构建并打开 iPhone X iOS 11 4 的模拟器 但它从未在模拟器中安装该应用程序 它仅显示模拟器主屏
  • MVVM 在 iOS 中的使用

    我是一名 iOS 开发人员 我对我的项目中存在大量视图控制器感到内疚 因此我一直在寻找更好的方法来构建我的项目 并遇到了 MVVM 模型 视图 视图模型 架构 我读了很多关于 iOS 的 MVVM 文章 但有几个问题 我将用一个例子来解释我
  • iOS应用程序启动黑屏,UINavigationController,Nib,RootViewController

    我有以下应用程序 其RootViewController被命名TopicsViewController 当我运行它时 没有任何错误或中断 但屏幕是black 没有桌子 无论是有人的还是空的 只有黑屏 不确定发生了以下哪一种情况 我的申请有问
  • SwiftUI NavigationView 从其内部开始

    因此 我在页面视图样式的 TabView 中嵌入了一个 NavigationView 首次加载时 NavigationView 将在其内部启动 然后重新加载后即可正常显示 我不确定是什么原因造成的 我制作了一个 GIF 来更好地说明问题 这

随机推荐

  • 从数组 javascript 中删除元素(相反交集)

    昨天晚上我提出了这个问题从数组javascript中删除元素 https stackoverflow com questions 29711165 delete elements from array javascript但我错误地认为 我
  • 渲染与部分渲染和良率之间的差异

    我已经从 Rails 指南中读到了它 已经看过 Micheal Hartel 的书 现在又从 Rails View 的书中读到了它 但我仍然感到困惑 有一个 footer html erb文件 因此它是一个 部分 并且在它编写的代码中 所以
  • C 中指向二维数组的指针

    我知道有几个关于提供良好 和有效 解决方案的问题 但恕我直言 没有一个问题清楚地说明实现这一目标的最佳方法是什么 所以 假设我们有一些二维数组 int tab1 100 280 我们想要创建一个指向这个二维数组的指针 为了实现这一目标 我们
  • iOS - 将 NSDictionary 写入 Localized.strings

    这个问题是那个问题的连续体 iOS 我可以在运行时更改 localized strings 内容吗 https stackoverflow com questions 13625008 ios could i change the loca
  • 手工制作的强类型 ADO.net 数据表 - 它可以更干净吗?

    我最近遇到一个非常简单的类型化数据表 不使用 XSD 我丢失了作者的 URL 所以我不能相信他 但看起来有很多重复的代码 例如添加 删除 GetNewRow 方法 我尝试将重复的方法推入超类中 但由于 Employee 需要通用 因此出现了
  • 为什么 F# printfn 没有通过 Console.WriteLine 实现?

    我注意到使用 F printfn 时出现意外行为 它似乎将格式字符串分解为块 并为每次调用 printfn 多次调用 Console Write 我希望它格式化整个字符串 然后调用 Console WriteLine 一次 我注意到这一点是
  • 将 ASP.NET MVC ViewResult HTML 渲染为图像,无需第三方组件

    有没有办法将 ViewResult 或 PartialViewResult 渲染为图像 我尝试将 ViewResult 作为字符串获取 并且得到了一个包含 html 的字符串 但我需要将该 html 渲染为图像 如果可能的话 带样式和图像
  • Angular2 中的文件内容

    我正在编写一个小应用程序来执行一些 XML 文件聚合 用户删除一些具有相同结构的 XML 文件 编辑一些常见标签 然后我向他们返回一个 xml 其中包含元素列表中的所有所需数据 我正在使用 ng2 file upload 来进行文件删除 但
  • Java定义显式包私有修饰符[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 显然Java有一个Access级别包私有 https docs oracle com javase tutorial java javaOO a
  • 路径验证 - 我的正则表达式匹配格式错误的路径,但我不明白为什么

    这是我现在的表情 https regex101 com r BertHu 4 https regex101 com r BertHu 4 a z a z0 9 a z0 9 lt gt r n lt gt r n lt gt r n 我使用
  • IIS6中哪个w3wp.exe进程属于哪个应用程序池(使用powershell)

    到目前为止 我使用这个工具来判断哪个 w3wp 属于哪个应用程序池 c windows system32 cscript iisapp vbs 如何使用 Powershell 提取相同的信息 或者也许会得到更多信息丰富的结果 谢谢 这绝不是
  • 为什么 Scanf 在获取角色时工作很奇怪

    程序说明 我编写了一个程序 它接受用户无限号的字符输入 次数并打印输入的输入 这是程序 include
  • Pandas:使用合并单元格读取 Excel

    我有包含多个工作表的 Excel 文件 每个工作表看起来都有点像这样 但更长 Sample CD4 CD8 Day 1 8311 17 3 6 44 8312 13 6 3 50 8321 19 8 5 88 8322 13 5 4 09
  • 速度:将聚合值存储在数据库中还是使用 Jinja 进行计算?

    语言 Python 数据库 SQLite 使用 Flask SQLAlchemy ORM 我的问题本身可能有点过分了 但我很好奇 我在 SQLAlchemy 中有列Table其中包含我需要执行数学运算的某些值 以显示聚合值或计算值 我们假设
  • 如何通过.NET/C# 查找CPU 核心数?

    有没有办法通过 NET C 找出CPU核心数 PS这是一个直接的代码问题 而不是 我应该使用多线程吗 问题 您可以获得与处理器相关的多种不同信息 物理处理器数量 核心数 逻辑处理器的数量 这些都可以不同 如果机器具有 2 个支持超线程的双核
  • Django 1.9 不会在链接中呈现正确的页面

    演示 urls py from django conf urls import url include patterns from django contrib import admin import views from import v
  • 用于嵌入式系统的 C 语言中最快的数组查找算法?

    假设我有一个定义大小为 22 的浮点数常量数组 如下所示 array 0 0 array 1 0 5 array 2 0 7 array 3 1 8 array 21 4 2 该数组的值是单调的 也就是说 它们总是随着索引增加 array
  • 推送通知服务器端实现

    最近 我已将 FCM 集成到我的应用程序最新版本中 但我以前版本的应用程序使用的是 GCM 关于我们是否需要为 GCM 和 FCM 分离后台 cron 的写入有什么想法吗 我的先前版本 MY App 4 0 使用了 GCM 当前版本 My
  • 在解释器中实现 Brainfuck 循环

    我想用我新创建的编程语言构建一个 Brainfuck 该死的名字 解释器 以证明它的图灵完备性 现在 到目前为止一切都清楚了 lt gt 除了一件事 循环 我假设您从这里开始就知道 极其困难的 BF 语法 如何在解释器中实现 BF 循环 伪
  • 如何在 iOS 中为自定义属性设置动画

    我有一个自定义 UIView 它使用 Core Graphics 调用来绘制其内容 一切正常 但现在我想要动画影响显示的值的变化 我有一个自定义属性可以在我的自定义 UView 中实现此目的 var anime CGFloat 0 var