草庐IT

ios - 快速更改图像不起作用

coder 2024-01-29 原文

编辑:将图像更改为标签并将字符串“>”转换 90 度后,它仍然无法正常工作。我打印出度数的值,它按预期工作,但没有发生转换。

我的 iOS 应用程序有一个完全奇怪的行为。我有一个带有节标题的表格 View 。在这些部分标题中是典型的下拉图像。一个向下箭头和一个向上箭头图像。当我点击标题部分时,单元格会动态显示或隐藏。现在我也想根据那个改变图像。

这是我点击节标题时运行的代码:

func selectedSection(sender: UIButton) {
    let previousSelected = self.selectedSection
    self.selectedSection = sender.tag

    if previousSelected != self.selectedSection {
        // one section opens another gets closed
        // workaround so the animation does not look awful for section headers
        print("Previous: \(previousSelected)")
        sectionHeaders[previousSelected].toggleIcon()
        print("Selected: \(self.selectedSection)")
        sectionHeaders[self.selectedSection].toggleIcon()
        print("***********")

        var indexPathToInsert = [IndexPath]()
        var indexPathToDelete = [IndexPath]()

        for i in 0..<self.menuItems[self.selectedSection].getSubItems().count {
            indexPathToInsert.append(IndexPath(row: i, section: self.selectedSection))
        }

        for i in 0..<self.menuItems[previousSelected].getSubItems().count {
            indexPathToDelete.append(IndexPath(row: i, section: previousSelected))
        }


        tableView.beginUpdates()
        tableView.deleteRows(at: indexPathToDelete, with: .none)
        tableView.insertRows(at: indexPathToInsert, with: .automatic)
        tableView.endUpdates()
    } else {
        // close the section so the selected section is 0 again
        self.selectedSection = 0

        print("Previous: \(previousSelected)")
        sectionHeaders[previousSelected].toggleIcon()
        print("***********")
        tableView.reloadSections([previousSelected], with: .none)
    }
}

切换图标看起来像这样:

func toggleIcon() {
    isOpen = !isOpen
    print("\(isOpen)")

    if isOpen {
        print("Works")
        self.sectionIcon.image = UIImage(named: "arrow-up")
    } else {
        print("Does not work")
        self.sectionIcon.image = UIImage(named: "arrow-down")
    }
}

当我运行它并点击不同的标题时,一切都按预期工作。但是,一旦我关闭一个部分而不打开另一个部分,这个部分就会被破坏。该代码仍然有效,但它不会改变图像。它打印出:

'Selected: 1'
true
Works

当我使用断点时,代码被调用,它将图标设置为向上箭头。但是,它不会改变图像。

我真的不明白发生了什么。是否不允许多次更改图像?

感谢您的帮助!

最佳答案

我不确定这是否是导致问题的原因,但请记住,所有 UI 更改都在主线程上进行。

在 Swift 3 上,

尝试用类似于

的方式包装你的调用以更新图像
DispatchQueue.main.async { }

祝你好运:)

关于ios - 快速更改图像不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41047975/

有关ios - 快速更改图像不起作用的更多相关文章

  1. ruby-on-rails - Ruby on Rails 迁移,将表更改为 MyISAM - 2

    如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  4. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. ruby - 更改 ActiveRecord 中对象的类 - 2

    假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。

  8. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  9. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  10. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

随机推荐