动画播放与否取决于链接动画的animationRepeatCount

2024-02-11

我对 iOS 完全陌生,我正在开发一个具有许多帧动画的应用程序。一切都很顺利,直到我尝试用下面发布的方法制作最终动画。该方法是分配给内置文本到语音合成器的委托

func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
        if spoken == 0{
            spoken += 1
            print("speaking finished")
            self.ImageView.stopAnimating()
            self.ImageView.image = self.circleImages.last
            self.ImageView.animationImages = self.circleImages
            self.ImageView.animationDuration = 1.5
            self.ImageView.animationRepeatCount = 0
            self.ImageView.startAnimating()
            do{
                try self.recordAndRecognizeSpeech()

            }catch let error{
                print(error)
            }          
        }else if spoken == 1{
                //animation 1
                spoken += 1
                            //animation 1
                self.ImageView.image = self.comingOutImages.first
                self.ImageView.animationImages = self.comingOutImages
                self.ImageView.animationDuration = 6.0
                self.ImageView.animationRepeatCount = 1
                self.ImageView.startAnimating()
                print(String(self.comingOutImages.count) + " #of images")


                print("should have animated go in" + String(spoken))     
        }else{
            print("done")
        }

    }

该方法的第一个块,其中spoken == 0,该动画工作正常,但是当它到达spoken == 1的块时,该动画不会播放,它会设置图像,但不会播放动画。我一直在四处寻找,我尝试在主线程和一堆其他东西上运行它。

EDIT:

我有这个方法,它是上面的动画之前的动画,除非将animationRepeatCount设置为0,否则不会播放,如果我将此动画设置为除0之外的任何值,则上面的动画会播放,但此动画不会播放。在这种方法中,我将动画重复计数为 16,然后上面的动画可以工作,但这个不行。我想将此动画设置为repeatCount 0,当语音完成时将上面的动画设置为repeatCount 1。我对iOS很陌生,有些东西我不太对。

func handleSend(){
        if Thread.isMainThread{
            print("send on main thread")
        }else{
            print("send not on main thread")
        }
        do{
            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
            try AVAudioSession.sharedInstance().setActive(true)

        }catch{}
        //UIView.animate(withDuration: 4.0, animations: {
            //animation 2
            print("second animation")
            self.imageView.stopAnimating()
            self.imageView.image = self.talkingImages.last
            self.imageView.animationImages = self.talkingImages
            self.imageView.animationDuration = 0.25
            self.imageView.animationRepeatCount = 16
            self.imageView.startAnimating()
            print("should have animated")


        //})
        let utterance = AVSpeechUtterance(string: self.finalString)
        //utterance.voice = AVSpeechSynthesisVoice(language: "en-GB")
        //utterance.rate = 0.1


        self.synthesizer.speak(utterance)

    }

EDIT2:我发布整个 viewController 只是为了参考,它不会让我,因为它超出了字符限制,但我会发布所有动画并解释流程

这是用于触摸图像视图的 touchending 重写方法,它也是第一个动画开始的地方。

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {


        timesRubbed += 1
        if timesRubbed == 1{
            player?.stop()
            //Toast(text: keepRubbing).show()
            self.view.makeToast(keepRubbing, duration: 3.0, position: .top)
        }
        if timesRubbed == 2{
            player?.stop()
            //Toast(text: keepAgain).show()
            self.view.makeToast(keepAgain, duration: 3.0, position: .top)
        }
        if timesRubbed == 3{
            player?.stop()
            timesRubbed += 1
            playSoundComeOut()
            CATransaction.begin()
            CATransaction.setCompletionBlock {
                print("after animation 1")
                DispatchQueue.main.async {
                    CATransaction.begin()
                    CATransaction.setCompletionBlock{
                        print("after circle animation")
                            //UIView.animate(withDuration: 3.0, animations: {
                                //animation 2
                                print("second animation")
                                //self.imageView.stopAnimating()
                                self.imageView.image = self.talkingImages.last
                                self.imageView.animationImages = self.talkingImages
                                self.imageView.animationDuration = 0.25
                                self.imageView.animationRepeatCount = 0
                                self.imageView.startAnimating()
                                print("should have animated")


                            //})
                        let utterance = AVSpeechUtterance(string: self.greeting)
                        //utterance.voice = AVSpeechSynthesisVoice(language: "en-GB")
                        //utterance.rate = 0.1


                        self.synthesizer.speak(utterance)
                            //CATransaction.commit()

                    }
                //UIView.animate(withDuration: 3.0, animations: {
                    //animation 2
                    print("second animation")
                    self.imageView.stopAnimating()
                    self.imageView.image = self.circleImages.last
                    self.imageView.animationImages = self.circleImages
                    self.imageView.animationDuration = 1.5
                    self.imageView.animationRepeatCount = 2
                    self.imageView.startAnimating()
                    print("should have animated")

                //})
                    CATransaction.commit()
                }

            }
                  //UIView.animate(withDuration: 6.0, animations: {
                            //animation 1
                    if self.imageView.isFocused{
                        print("imageview is focused")
                    }else{
                        print("not focused")
                    }
                            self.imageView.image = self.comingOutImages.last
                            self.imageView.animationImages = self.comingOutImages
                            self.imageView.animationDuration = 6.0
                            self.imageView.animationRepeatCount = 1
                            self.imageView.startAnimating()
        //                })
            CATransaction.commit()        }


    }

然后在该动画序列结束时,它会转到speechSynthesizer 方法,其中spoken == 0然后它执行handleSend()上面发布的方法,然后返回到上面的speechSynthesizer方法,其中speech == 1

如果您需要更多信息,请告诉我


我最终在最后一个动画中这样做了并且它有效

self.imageView.stopAnimating()
                self.imageView.image = self.goingInImages.last
                self.imageView.layer.removeAllAnimations()
                let animation = CAKeyframeAnimation(keyPath: #keyPath(CALayer.contents))
                animation.values = self.goingInImages.map {$0.cgImage!}
                //animation.keyTimes = [0.0, 0.25, 0.5, 0.75, 1.0]
                animation.calculationMode = .discrete
                animation.duration = 6.0
                animation.repeatCount = 1
                self.imageView.layer.add(animation, forKey: nil)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动画播放与否取决于链接动画的animationRepeatCount 的相关文章

  • React Native Detox:无法接受系统警报弹出的位置权限

    使用以下命令从命令行启动应用程序detox test configuration ios sim debug 通过代码启动应用程序await device launchApp permissions location always noti
  • iOS 和 Firebase 自动续订订阅

    我的问题 我很难找到一种使用 Firebase 在 iOS 中安全管理自动续订订阅的方法 购买流程 User1 purchases a subscription 使用订阅标识符更新 Firebase 上 User1 的帐户 用于解锁内容 存
  • 寻找可靠的方法来选择iPhone 13微距相机设备

    我正在使用 objc 开发一个应用程序 我必须选择 iPhone 13 Pro 和 13 Pro Max 中配备的新微距摄像头 目前 我在所有其他设备上选择我的相机 并剪掉此代码 AVCaptureDeviceDiscoverySessio
  • 在phonegap中播放本地声音

    我有一个 wav文件在我的www文件夹 我正在使用 jQuery 和以下代码 警报响起 但声音不播放 难道我做错了什么
  • SVG 用事件触发动画

    如何通过 javascript 使用任意事件触发 svg 动画元素开始动画 我在想象类似的事情begin mySpecialEvent 然后我可以发送mySpecialEvent并且动画将开始 如果已经播放则再次开始 这是一篇涵盖您需要的文
  • UICollectionViewCell 拖动预览的自定义视图

    我正在尝试实现一项功能 用户可以将一个集合视图单元格拖放到另一个集合视图单元格上 但是 我想完全更改运动中物体的预览 以匹配我的应用程序的视觉隐喻 该项目没有移动 该项目包含的东西正在移动 例如 假设我的collectionview单元格显
  • 将委托作为方法参数传递

    我目前正在开发一个 EventManager 类 以确保没有任何事件连接到失效的 WCF 双工客户端 并控制防止从同一客户端到一个事件的多个连接 现在基本上 我所坚持的就是尝试将事件委托传递给一个函数来控制这样的分配 var handler
  • iOS8 自签名证书已安装但仍不受信任

    由于我无法控制的原因 我需要使用自签名证书针对平台进行 iOS 开发 它是一个在 SAN 中具有特定 IP 地址的根证书 当证书安装在 OSX 系统帐户下时 所有浏览器现在将正常信任对给定 IP 地址的任何访问 通过电子邮件将同一证书发送到
  • Objective c RSA 与 OAEP 填充 sha256 之前的 ios 10

    我正在研究一种在iPhone中使用RSA加密方法的加密方法 到目前为止我可以用这种方法实现获取加密字符串 该字符串被服务器成功解密 SecKeyRef keyRef self addPublicKey pubKey SecKeyAlgori
  • 如何在禁用状态下更改 UIButton 图像 alpha?

    我有一个带有图像的 UIButton 在其禁用状态下 该图像应具有 0 3 alpha UIButton button UIButton buttonWithType UIButtonTypeCustom UIImage arrowImag
  • 如何使用 SwiftUI 使按钮可拖动/可移动?

    我正在尝试使用 SwiftUI 制作一个可移动的按钮 从看起来这应该可行 我尝试将带有文本的按钮放入另一个 ZStack 中 有一秒钟它可以工作 但一旦我释放按钮 拖动就会停止 我无法再拖动 我注意到尽管按钮已经移动 但水龙头仍然位于中心
  • 如何在 Swift 中使用函数数组

    我已经阅读了我可以在这里找到的所有关于函数数组的帖子 太棒了 你能做到 我估计 但没有一篇文章实际上展示了如何使用它们 至少不是我想要做的 这就是我想要的 它们都可以采用相同的参数 但这不是必需的 这篇文章很接近 将允许我循环执行每个函数
  • 在 XCode 中本地化 HTML 文件

    我有一个本地化的 iOS 应用程序 我希望在其中包含一些本地化的 HTML 文件 我不知道该怎么做 目前 我的文件夹结构如下所示 myapp en lrproj Localizable strings fr lrproj Localizab
  • 在 for 循环中为元组赋值

    struct MIDIPacket 中有一个 UInt8 的元组 正常的赋值是这样的 import CoreMIDI let packet MIDIPacket packet data 0 0x02 packet data 1 0x5f 等
  • 从应用程序打开/关闭 iPhone 的 Wifi

    我需要打开或关闭 iPhone 中的 wifi 有什么方法可以做到吗 还是被禁止了 私有框架 所有使用公共 SDK 编写的应用程序都经过沙箱处理 他们只能访问苹果认为可以在该沙箱中使用的属性和数据 恐怕 Wi fi 不在列表中 请看一下这个
  • 在 Swift 中计算两个 CLLocation 点之间的方位角 [重复]

    这个问题在这里已经有答案了 我正在尝试计算仅 swift 代码中两个 CLLocation 点之间的方位 我遇到了一些困难 并假设这是一个非常简单的函数 堆栈溢出似乎没有列出任何内容 func d2r degrees Double gt D
  • 如何动态添加XCTestCase

    我正在为一个白标签项目编写 UI 测试 其中每个应用程序都有一组不同的菜单项 测试点击每个菜单项并截取屏幕截图 使用快车道快照 https docs fastlane tools actions snapshot 目前这一切都发生在一个内部
  • 出现错误:FT_Open_Face 失败:错误 2

    当我使用时出现以下错误CGContextDrawPDFPage context PDFPage 对于某些文件 有解决办法来解决这个问题吗 FT Open Face failed error 2 错误2看起来像errno2 这是 找不到文件
  • 为什么我收到 com.facebook.sdk.login 错误 308?

    我正在使用 Xcode 7 0 在 iOS 9 0 2 上进行测试并使用 Facebook SDK 4 7 0 当我登录用户时 大多数时候一切都正常 但有时我不断收到此错误 但我不知道为什么 操作无法完成 com facebook sdk
  • 如何在 Swift 中将所有 iOS 设备的标签水平居中

    我不知道如何使标签在图像视图中水平居中 标签说 You ve been here What would you rate us 我想要What would you rate us属于 You ve been here 我试图完成此操作的方法

随机推荐

  • 在内核空间中存储结构体数组,Linux

    我相信我可能有点过度思考这个问题 我的文件系统上有一个文本文件 我在启动时解析该文件并将结果存储到结构数组中 我需要将此数组从用户空间复制到内核空间 copy from user 并且必须让内核随时可以访问此数据 内核空间中的数据需要通过
  • 环境错误:Gmsh 版本必须 >= 2.0

    我是 fipy 的新手 所以如果我问一些应该显而易见的问题 请原谅我的无知 但我无法运行已经存在的 并且在其他机器上工作的 脚本 无法获取EnvironmentError Gmsh version must be gt 2 0 我可能在安装
  • 使用 exec 中的动态 SQL - exec 终止所有用户会话

    环境 SQL Server 2005 2008 我想使用动态 SQL 终止特定数据库上的所有用户连接 我知道其他方法 例如将数据库模式更改为单一 离线等 但希望使用动态 SQL 我试图避免游标 while 循环以及在执行动态 SQL 时使用
  • Julia 中“检测到包的要求无法满足”

    我在向 Julia 添加包时遇到错误 Error 数据框 v1 5 pkg gt add DataFrames Updating registry at C Users julia registries JuliaComputingRegi
  • C99 printf 中的可变前导零

    我正在用 C99 编写一个多精度库 根据编译代码的平台 我选择不同的表示基础 因此 举例来说 假设在平台 X 上系统选择 BASE 100 并且在平台上Y BASE 10000 假设我代表大无符号整数 如下所示 typedef struct
  • 如何测量用于 .NET 远程处理的 IP 端口输入/输出的字节数?

    我正在使用 NET 远程处理将定期状态更新从 Windows 服务检索到 控制器 应用程序中 该应用程序用于显示有关服务正在执行的操作的一些实时统计信息 由此产生的网络流量非常巨大 是更新数据大小的很多倍 所以很明显 我以一种非常低效的方式
  • 无法弄清楚这个“被调用的对象不是函数”C 时间错误

    因此 对于我的学校作业的一部分 我需要找到当前时间 我用它作为参考 http www cplusplus com reference ctime localtime http www cplusplus com reference ctim
  • 在 Less 中连接字符串

    我认为这是不可能的 但我想我问是否有办法 我的想法是 我有一个用于 Web 资源文件夹路径的变量 root img file test css url root file px background image url url 我得到这个结
  • 以编程方式调节 Windows 7 计算机上的音量

    我想知道是否可以使 Tkinter 比例与计算机的音量相对应 换句话说 通过拖动比例尺 电脑的音量会不会变大 这只是我编写的一些随机代码 我正在运行 64 位 Windows 7 操作系统 1 from Tkinter import 2 3
  • constexpr 数组成员是编译时常量吗?

    是代码片段 struct Parameters static constexpr int n 2 static constexpr double v n 4 0 5 0 合法的 C 11 如果是的话 是Parameters v 0 and
  • 使用 ANTLR 解析循环

    我想使用 ANTLR 解析一个简单的类似 matlab 的 for 循环 循环就像 for i 1 8 y i a i i end 我想解析循环并解析8次y i a i i语句 以便对每个语句执行一些操作 我的规则如下 操作在 C 中描述
  • 有没有办法冻结 ES6 Map?

    我正在寻找一种冻结原生 ES6 地图的方法 Object freeze https developer mozilla org en US docs Web JavaScript Reference Global Objects Objec
  • Swift - 交付应用程序上的本地通知图标徽章编号更新在后台

    我试图弄清楚如何在传递本地通知时动态更新图标徽章编号 在安排时注册徽章号码不是一个选项 因为如果我在发送任何通知之前注册两个或多个通知 UIApplication shared applicationIconBadgeNumber this
  • web.config 文件何时“执行”?

    每次加载网站上的页面时 服务器都会执行 读取它吗 创建应用程序时 web config 会加载到内存中 这通常是对应用程序中页面 资源的第一个请求 IIS ASP NET 监视 web config 的更改 如果发生更改 将重新启动您的应用
  • 如何在 ggplot 背景(而不是面板)上添加图像?

    如何使用图像作为 ggplot2 绘图的背景 例如 代码 mtcars gt ggplot aes cyl geom bar theme plot background element rect fill black It results
  • 如何为 rsync SSH 命令自动传递密码?

    我需要去做rsync by ssh并希望自动执行此操作 而无需传递密码ssh手动 使用 sshpass 非交互式 ssh 密码提供程序实用程序 在Ubuntu上 sudo apt get install sshpass rsync 命令 u
  • 开始使用 RxJava 和 sqlite

    我正在学习 RxJava 并且已经阅读了几篇文章和视频 我对 RxJava 所提供的功能感到非常敬畏 所以我认为目前已经了解了响应式编程的全部内容 Dan Lew 的本教程 http blog danlew net 2014 09 15 g
  • mysqldump - 将多个数据库从单独的 mysql 帐户转储到一个文件

    我使用的标准 mysqldump 命令是 mysqldump opt databases dbname host dbhost user dbuser password dbpass gzip gt filename 转储多个数据库 mys
  • 通过performSelectorOnMainThread调用方法与普通方法调用

    谁能告诉我当我使用调用方法时有什么不同performSelectorOnMainThread并在没有执行选择器的情况下调用相同的方法 For Exa void sampleCALL 现在使用这两个场景调用此方法 self performSe
  • 动画播放与否取决于链接动画的animationRepeatCount

    我对 iOS 完全陌生 我正在开发一个具有许多帧动画的应用程序 一切都很顺利 直到我尝试用下面发布的方法制作最终动画 该方法是分配给内置文本到语音合成器的委托 func speechSynthesizer synthesizer AVSpe