我正在写一段代码,我想要按下按钮的时间.为此,我NSDate()
在按下按钮时录制了一个按钮,并timeIntervalSinceDate
在释放按钮时尝试使用该功能.这似乎工作,但我找不到任何方法来打印结果或将其切换为整数.
var timeAtPress = NSDate()
@IBAction func pressed(sender: AnyObject) {
println("pressed")
timeAtPress = NSDate()
}
@IBAction func released(sender: AnyObject) {
println("released")
var elapsedTime = NSDate.timeIntervalSinceDate(timeAtPress)
duration = ???
}
Run Code Online (Sandbox Code Playgroud)
我见过几个类似的问题,但我不知道C所以我很难理解给出的答案.如果有更有效的方法来确定按钮被按下多长时间,我愿意接受建议.提前致谢.
我写了一个简单的函数,在调用它时会显示一个警告.我想在几个viewControllers中使用这个函数.现在我将相同的代码复制粘贴到每个viewController的底部,但我不禁想到有更好的方法.
如何定义可以从任何viewController调用的函数?
仅供参考,我将在下面粘贴我的功能,但这是一个普遍的问题.我希望能够找到一种在所有视图控制器上同样处理键盘管理的雄辩方法.
func displayAlert(title:String, error:String, buttonText: String) {
// Create the alert
var alert = UIAlertController(title: title, message: error, preferredStyle: UIAlertControllerStyle.Alert)
// Add an action
alert.addAction(UIAlertAction(title: buttonText, style: .Default, handler: { action in
// Dismiss when the button is pressed
self.dismissViewControllerAnimated(true, completion: nil)
}))
// Add it to viewController
self.presentViewController(alert, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud) 我一直在尝试src
在React中设置音频标签的属性,但是轨道永远不会播放.
playTrack(track) {
const stream = new MediaStream()
stream.addTrack(track)
this.setState(() => ({ stream }))
}
render() {
return (
<audio src={this.state.stream || null} controls volume="true" autoPlay />
)
}
Run Code Online (Sandbox Code Playgroud)
当我检查chrome调试器时,它显示音频标签已[MediaStream]
设置为其源,但没有播放,所有控件都保持灰色.
这样做而不是设置状态有效,但我认为这在React中非常不受欢迎.
const audio = document.querySelector('audio')
audio.srcObject = stream
Run Code Online (Sandbox Code Playgroud) 许多开发人员喜欢扩展NSCache以使其与使用类似代码片段的内容兼容,但是这已经停止在Swift 3中工作.它目前是在Swift.org上跟踪的已知错误.与此同时,有没有人找到另一种方法来获得相同的结果?我不想改变我的整个代码库,但我也不知道这个bug会在多长时间内得到解决
// Allows using subscripts on NSCache, like a dictionary
extension NSCache {
subscript(key: AnyObject) -> AnyObject? {
get {
return object(forKey: key as! KeyType)
}
set {
if let value: AnyObject = newValue {
setObject(value as! ObjectType, forKey: key as! KeyType)
} else {
removeObject(forKey: key as! KeyType)
}
}
}
Run Code Online (Sandbox Code Playgroud) 问题:
如何捕获要在 Metal 中修改的视图?
我(可能不完整)的理解是,我需要将视图捕获为纹理,将其移动到设备内存中,使用着色器对其进行处理,然后将其渲染回视图中。我目前陷入了捕捉视图的第一步。这个问题的范围仅限于捕获纹理并将其放入 Metal 中,如果我遇到着色器问题,我将为此提出一个单独的问题。
如果有比下降到 GPU 级别更简单的方法,我愿意接受建议。
背景:
出于学习的目的,我尝试使用 Metal重新创建这段短片中看到的波纹效果(不使用像视频中那样的 Qt 和 OpenGL)。据我了解,我需要一个顶点着色器和片段着色器。我想我可以通过一些实验将存储库中的 openGL 着色器转换为 Metal。
Apple 提供了与 iOS 非常相似的动画CATransition
“rippleEffect”,因此这似乎是可能的,但他们使用的 API 是私有的,并且可能会让您的应用程序被应用程序商店拒绝。
我还遇到过BCMeshTransformView,它似乎与我想做的非常相似,但我没有运气尝试从源头收集它的工作原理。
我花了几个小时搜索文档,但总的来说,我是图形方面的初学者,因此我可能无法在谷歌上搜索正确的术语。
我有一个功能,当按下按钮时我想调用它,但不像我迄今为止所做的任何事情,我希望能够从几个ViewControllers中的任何一个到达它.我不想在每个ViewController中复制相同的代码块.
我已经尝试定义我想在ViewController类之外调用的函数,但我无法弄清楚我需要设置目标才能达到它.通常self
使用是因为函数是在类中定义的,但是如果函数在另一个文件中和/或类之外,你会怎么做?
button.addTarget(???, action: "myFunction:", forControlEvents: UIControlEvents.TouchUpInside)
Run Code Online (Sandbox Code Playgroud)
编辑:我能够使用的另一个解决方案是做这样的事情并定义我想在创建按钮的函数内调用的函数,但我遇到了同样的问题,不知道target
需要达到什么它.
class ViewController {
// Main code here
}
func makeButton() {
// Code to make button here
button.addTarget(???, action: "buttonPressed",...)
func buttonPressed() {
// Code that runs when the button is pressed goes here
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我正在尝试编写单元测试以确保键盘和呈现的视图控制器被正确触发,但我得到的奇怪行为我不明白,我认为这与行为有关UIWindow
.我正在使用Quick和Nimble,但我已经用vanilla进行了测试XCTest
并得到了同样的问题.
我的代码:
import Quick
import Nimble
class TestSpec: QuickSpec {
override func spec() {
let sut = UIViewController()
// The window is nil when this test is run in isolation
UIApplication.shared.keyWindow?.rootViewController = sut
// This does not work either
let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = sut
window.makeKeyAndVisible()
describe("ViewController") {
it("presents a UIAlertController") {
let alert = UIAlertController(title: "Test", message: "This is a test", preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: …
Run Code Online (Sandbox Code Playgroud)