相关疑难解决方法(0)

dispatch_after - Swift中的GCD?

我从Apple那里浏览了iBook,找不到任何定义:

有人可以解释结构dispatch_after吗?

dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)
Run Code Online (Sandbox Code Playgroud)

grand-central-dispatch ios swift

548
推荐指数
12
解决办法
24万
查看次数

在5秒Swift之后解散UIAlertView

我创建了一个包含UIActivityIndi​​cator的UIAlertView.一切都很好,但我也希望UIAlertView在5秒后消失.

如何在5秒后解除我的UIAlertView?

 var alert: UIAlertView = UIAlertView(title: "Loading", message: "Please wait...", delegate: nil, cancelButtonTitle: "Cancel");

 var loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(50, 10, 37, 37)) as UIActivityIndicatorView
 loadingIndicator.center = self.view.center;
 loadingIndicator.hidesWhenStopped = true
 loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
 loadingIndicator.startAnimating();

 alert.setValue(loadingIndicator, forKey: "accessoryView")
 loadingIndicator.startAnimating()

 alert.show()
Run Code Online (Sandbox Code Playgroud)

delay uialertview uiactivityindicatorview ios swift

35
推荐指数
5
解决办法
4万
查看次数

在返回原始文本之前,将标签文本更改几秒钟

基本上我正在尝试实现一个动画,它将在返回原始文本之前将标签的文本替换几秒钟.我已经设法让标签在3秒后更改文本并淡出,但是我无法弄清楚如何在动画完成后将文本返回到原始状态.

这是我目前拥有的:

    @IBAction func fade() {
    userMessageLabel.alpha = 100
    UIView.beginAnimations(nil, context: nil)
    UIView.setAnimationDuration(3)
    userMessageLabel.text = "Name is not valid!"
    userMessageLabel.alpha = 0
    UIView.commitAnimations()
}
Run Code Online (Sandbox Code Playgroud)

我需要文字标签返回"请输入你的名字"

任何帮助将非常感激.

uilabel swift

3
推荐指数
1
解决办法
3724
查看次数

我应该使用未命名的Timer或DispatchasyncAfter延迟1次吗?

我可以通过两种方式延迟某些时间(也许还有更多方法):

   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)
    }

   //way 1:
    delay(delay: 1.0, closure: {
    })

   //way 2:
    _ = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false){ _ in 
    }
Run Code Online (Sandbox Code Playgroud)

这些方式之间有什么区别吗?方法1比方法2好吗?我只想添加1秒的延迟,应该使用哪种方式?

timer grand-central-dispatch swift

3
推荐指数
1
解决办法
505
查看次数

如何在 Swift 3 的主线程中延迟一段时间后调用函数?

我有一个 UIControl,它会在 0.5 秒后调用一个函数,具体取决于用户按下它的次数。(例如,按 1 次调用 f1(),按 2 次调用 f2(),按 3 次调用 f3())

所以基本上我需要在用户按下 Control 时设置一个计时器。如果 0.5 秒内未按下 Control,则创建一个对话框。我尝试过使用 DispatchQueue,但是当它到达创建对话框时,需要几秒钟的时间。我认为这是因为它是同时调用的,而不是在主线程上调用的(如果术语不好,请原谅)。

self.operationQueue.cancelAllOperations() //To cancel previous queues
self.mainAsyncQueue = DispatchQueue(label: "bubblePressed" + String(describing: DispatchTime.now()), qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent)

let time = DispatchTime.now()
self.currentTime = time

self.mainAsyncQueue!.asyncAfter(deadline: time + 0.5){
  guard self.currentTime == time else {
    return
  }

  let tempOperation = BlockOperation(block:{
    self.displayDialog()
  })
  self.operationQueue.addOperation(tempOperation)
}
Run Code Online (Sandbox Code Playgroud)

operationQueue并被mainAsycQueue定义viewDidLoad

self.currentTime = DispatchTime.now()
self.operationQueue = OperationQueue()
Run Code Online (Sandbox Code Playgroud)

如何displayDialog()在主线程中调用我的函数以使其加载速度更快?

ios swift swift3

2
推荐指数
1
解决办法
9075
查看次数

在循环中创建swift 3的延迟

我知道我可以使用followign语法(如何编写Swift 3中的延迟)来延迟Swift 3中的部分代码:

let when = DispatchTime.now() + 2 // change 2 to desired second delay.
DispatchQueue.main.after(when: when) {
// run your code with delay
}
Run Code Online (Sandbox Code Playgroud)

或者类似的帖子:如何在Swift 3中创建调度队列

然而,这些不是我可以使用的延迟方法.我需要在循环中插入一个延迟.例如,假设有一个标签组件和一个按钮.当我单击按钮时,我希望标签连续显示循环变量:

@IBOutlet weak var showIntegers: UILabel!

@IBAction func countNums(_ sender: AnyObject) {

    for i in 1...5 {
        showIntegers.text = String(i)
        //delay code here, sleep(1) doesn't work
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用睡眠作为延迟但是然后应用程序睡眠5秒然后显示5.我连续1秒钟看不到1,2,3,4和5.

我也弄清楚如何在循环中使用DispatchQueue类.感谢您的帮助.

swift swift3

1
推荐指数
1
解决办法
4294
查看次数

如何在Linux上快速睡眠线程

我正在尝试编写一个小程序,该程序循环运行并每 30 秒执行一些代码。

我不太关心它的时间是否准确,但我确实关心该程序可以在 Linux 平台上编译和运行,并且可以使用 swift 包管理器来构建和测试它。

我的第一枪就像

while true {
    print("doing the work")
    sleep(30) // also tried usleep(30*1000*1000)
}
Run Code Online (Sandbox Code Playgroud)

显然,我在 swift 4 中没有sleep(_:)找到任何引用,并且该代码无法编译。我尝试使用 a Timer,但是一旦计时器开始计时,程序就会退出,因为计时器在后台运行,而主线程的唯一工作就是安排它。

这一定比看起来更容易。关于 Swift 中的线程管理,我缺少什么可以解释我发现这个有多难?

--- 编辑为了澄清为什么这与众多建议的重复项不同:

明确地尝试让主线程休眠,正如我上面提到的,我无法使用sleep其他地方接受的答案建议的函数在 Linux 上使用 Swift 进行编译。我的程序在 CLI 上下文中的上下文意味着后台线程中的延迟操作(正如许多其他可用来源所建议的那样)在这里不起作用。此外,此 CLI 在 Linux 上运行,因此我不能依赖仅限 iOS 的库。

linux swift swift-package-manager

1
推荐指数
1
解决办法
3327
查看次数