ios - 使用 XCode (Swift) 为学校和标签属性开发 iOS 应用程序不会刷新

标签 ios swift xcode

我是一所为有学习障碍的学生开设的学校的阅读老师(我不教编程)。我们需要一个应用程序以随机​​顺序闪烁 20 个单词,持续设定的毫秒数,然后将单词熄灭设定的毫秒数,然后继续浏览 20 个单词的列表。我 15 年前涉足编程,但从未开发过应用程序。

逻辑工作正常,但我知道有更好的方法来做到这一点 - 我现在没有时间学习所有的来龙去脉!我唯一的问题是标签在整个例程完成之前不会更新,因此不会显示任何文字。我尝试了该网站上推荐的多种不同技术,但没有任何效果。有没有一个简单的解决方案 - layoutIfNeeded 似乎是一种推荐的技术,但我似乎无法正确实现。 感谢您的帮助!

@IBAction func cmdStart(_ sender: Any) {
   // the main logic  

    self.view.layoutIfNeeded()


    var x = arc4random() % 20;
    var i:Int = Int(x)
    var num = 0

    while num < 20 {
        num += 1
        self.lblDisplay.backgroundColor=UIColor.white

        while wordUsed[i] == 1
        {
            x = (arc4random() % 20)
            i = Int(x)
        }

        // output
        print ("word is \(wordList[i])")
        self.lblDisplay.text = wordList[i]
        self.lblDisplay.backgroundColor=UIColor.white
        self.view.layoutIfNeeded()

        //delay based on slider
        let delTimeWord = (self.sldDelay.value)*1000
        usleep(useconds_t(delTimeWord))

        //blackOut duration based on slider
        let delTimeBlack = (self.sldVisible.value)*1000
        usleep(useconds_t(delTimeBlack))
        self.lblDisplay.backgroundColor = UIColor.black

        wordUsed[i]=1
    }

}

最佳答案

在 iOS 应用程序中,您需要让“事件循环”运行。这是操作系统运行的一个循环,用于检查输入事件、刷新屏幕并通常保持一切正常运行。如果您不让循环运行,则应用会“锁定”并停止执行任何操作。

我假设由按钮触发的 cmdStart 方法本身由事件循环调用。与其在该方法中运行您自己的循环,您应该做的是让该方法设置一些状态,并可能启动一个计时器,该计时器将在稍后执行操作,然后返回,以便事件循环可以继续运行。

因此,您当前在 cmdStart 中拥有的那些变量可能应该是 View Controller 的属性。不要调用 usleep,而是启动一个会在适当时间触发的计时器,并在计时器处理程序中执行“下一步”的任何操作。

您不需要调用 layoutIfNeeded。只需在您的处理程序方法中设置标签的文本和颜色,当它返回时,事件循环将负责更新屏幕,

抱歉,我无法提供完整的示例,但我建议您阅读有关 NSTimer 的内容并查找示例。

关于ios - 使用 XCode (Swift) 为学校和标签属性开发 iOS 应用程序不会刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42877041/

相关文章:

arrays - 快速解析一个n维数组

ios - 如何将按钮从弹出窗口拖动到整个应用程序? ( swift )

ios - 如何获取完整的时区名称 ios

xcode - UITabBar 显示 UITabBarItem 图像忽略渲染模式 AlwaysOriginal

iphone - iOS - UIWebview - 滚动并按住停止 JavaScript

objective-c - MPMoviePlayerController 全屏不工作

ios - 如何检查设备是否通过airplay连接?

ios - 如何对依赖于 Objective-C 中的 volatile 变量的方法进行单元测试?

ios - 通过 createdAt 快速排序解析结果

ios - Xcode - Swift - 文本的 UILabel 高度扩展