在SwiftUI中,我们可以使用以下方法从资产目录中的颜色集中获取颜色:
extension Color {
static let coral = Color("coral")
}
Run Code Online (Sandbox Code Playgroud)
这需要字符串类型的名称,并且在使用许多颜色集时变得非常乏味。还有另一种获取颜色集的方法,类似于使用图像文字从资产目录中获取图像的方法吗?或者,只是少一些多余的东西。
如果没有,如何在SwiftUI中以编程方式创建动态颜色?例如,这是在UIKit中完成的方式:
extension UIColor {
static let dynamicColor = UIColor { traitCollection in
return traitCollection.userInterfaceStyle == .dark ? .black : .white
}
}
Run Code Online (Sandbox Code Playgroud) 我使用 SwiftUI 制作了一个自定义模式。它工作正常,但动画不稳定。
在慢动作播放时,您可以看到ModalContent触发ModalOverlay的点击动作后 的背景立即消失。但是,ModalContent的Text视图始终可见。
谁能告诉我如何防止ModalContent的背景过早消失?
慢动作视频和代码如下:
import SwiftUI
struct ContentView: View {
@State private var isShowingModal = false
var body: some View {
GeometryReader { geometry in
ZStack {
Button(
action: { withAnimation { self.isShowingModal = true } },
label: { Text("Show Modal") }
)
ZStack {
if self.isShowingModal {
ModalOverlay(tapAction: { withAnimation { self.isShowingModal = false } })
ModalContent().transition(.move(edge: .bottom))
}
}.edgesIgnoringSafeArea(.all)
}
}
}
}
struct ModalOverlay: …Run Code Online (Sandbox Code Playgroud) 我想AVAudioInputNode使用音频单元效果 ( AVAudioUnitEffect)处理来自设备内置麦克风 ( ) 的音频。对于我的示例,我使用AVAudioUnitReverb. 连接AVAudioUnitReverb导致应用程序崩溃。
import UIKit
import AVFoundation
class ViewController: UIViewController {
let audioEngine = AVAudioEngine()
let unitReverb = AVAudioUnitReverb()
var inputNode: AVAudioInputNode!
override func viewDidLoad() {
super.viewDidLoad()
inputNode = audioEngine.inputNode
audioEngine.attachNode(unitReverb)
let inputFormat = inputNode.inputFormatForBus(0)
audioEngine.connect(inputNode, to: unitReverb, format: inputFormat)
// This line is crashing the application!
// With this error "AVAudioNode.mm:521: AUSetFormat: error -10868"
audioEngine.connect(unitReverb, to: audioEngine.outputNode, format: inputFormat)
audioEngine.startAndReturnError(nil)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我绕过混响并inputNode直接连接到audioEngine.outputNode,我没有问题,但是我没有混响:
audioEngine.connect(inputNode, …