- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我创建了一个拳击模拟,现在要回去添加动画。现在,我正在添加一个“Ref's Countup”来增加悬念。我尝试了很多事情,但没有一个得到我想要的。我尝试了:
Thread.sleep(forTimeInterval: 1)
knockdownNumber.text = "\(knockdownNumberInt)"
和
sleep(1)
knockdownNumber.text = "\(knockdownNumberInt)"
那些暂停了用户界面。所以他们确实等待了适当的时间,但没有更改我的文本。还有一些只计算一次(即 1、3 或 1、8)。
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}
和
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (timer) in
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}
和
delay(1) {
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}
延迟函数为
func delay(_ delay:Double, closure:@escaping ()->()) {
DispatchQueue.main.asyncAfter(
deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure)
}
我调用该函数(所有这些都在其中)的方式是在他被击倒之后。这段代码看起来像这样。
knockdownNumber.text = "1"
knockdownNumberInt = 1
downSec()
knockdownNumberInt = knockdownNumberInt + 1
downSec()
knockdownNumberInt = knockdownNumberInt + 1
downSec()
if fighter2.endurance < 400 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < 300 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < 200 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < 100 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < 0 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
if fighter2.endurance < -100 {
knockdownNumberInt = knockdownNumberInt + 1
downSec()
}
我真的很难过。
最佳答案
使用这种方法你就快完成了:
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { (timer) in
self.knockdownNumber.text = "\(self.knockdownNumberInt)"
}
您需要做的就是将repeats
设置为true
,计时器将永远重复。
现在我们需要决定何时停止计时器。我们甚至应该在启动计时器之前就决定这一点,而不是像您所做的那样 - 在开始新时间时递减 knockdownNumberInt
。这是行不通的,因为您放入计时器闭包中的内容是异步的。
因此我们决定要数到的数字:
knockdownNumber.text = "1"
knockdownNumberInt = 3
if fighter2.endurance < 400 {
knockdownNumberInt += 1 // use the "+=" to make it cleaner!
}
if fighter2.endurance < 300 {
knockdownNumberInt += 1
}
if fighter2.endurance < 200 {
knockdownNumberInt += 1
}
if fighter2.endurance < 100 {
knockdownNumberInt += 1
}
if fighter2.endurance < 0 {
knockdownNumberInt += 1
}
if fighter2.endurance < -100 {
knockdownNumberInt += 1
}
在类中声明一个名为 currentCountDown
的属性:
var currentCountDown = 1
然后你可以像这样创建你的计时器:
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] (timer) in
guard let `self` = self else { // I added this to prevent a retain cycle.
timer.invalidate()
return
}
self.currentCountDown += 1
self.knockdownNumber.text = "\(self.currentCountDown)"
if self.currentCountDown == self.knockdownNumberInt {
timer.invalidate()
}
}
关于swift - 拳击计数/延迟/定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46537125/
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: What is boxing and unboxing and what are the trade off
这样做有什么意义吗? public static void Write(T value) { textWriter.Write(value.ToString()); } ...应该是这样的:
简而言之,我认为拳击是一种烦恼。让我们看看一些替代方案... public class Box where T : struct { public T Value { get; set
我只是想用 创建一个天气应用程序。天气 View Controller 显示 TableView 与 细胞 ,当单元格为 时轻拍导致 WeatherDetailsViewController . 我正
如有错误,请指正。Boxing+Varargs 是否优于 Boxing+Widening? 我在site中找到了那是另一种方式。 最佳答案 当多个可以符合条件时调用什么方法在 JLS #15.2.2
我正在通过 C#(第 4 版)阅读 CLR 一书,不是作为 C# 的新手,而是作为了解该语言的人试图提高我对 CLR 底层功能的掌握。 无论如何,在这本书中给出了一个例子 (pg127-131),当讨
我正在使用 Java 8 Stream API,如下所示: private Function process; // Intermediate step (& types) priv
我是一名优秀的程序员,十分优秀!