一个简化的 DisplayLink
抽象,适用于所有平台(包括 iOS、tvOS、watchOS、macOS、Linux)。
public final class DisplayLink : Publisher {
public typealias Output = Frame
public typealias Failure = Never
}
extension DisplayLink {
public struct Frame {
public var timestamp: TimeInterval
public var duration: TimeInterval
}
}
平台 | 实现 |
---|---|
iOS, tvOS | CADisplayLink |
macOS | CVDisplayLink |
watchOS, Linux | 定时器 |
包含一个带有 SwiftUI 集成的 Combine 发布者,用于 CADisplayLink
。
SwiftUI 目前没有提供任何 API 来执行基于帧的操作。 这个小型库简化了 CADisplayLink
和 SwiftUI 之间的桥接工作。
import DisplayLink
struct MyView: View {
@State var offset: CGFloat = 0.0
var body: some View {
Color
.red
.frame(width: 40, height: 40)
.offset(x: offset, y: offset)
.onFrame { frame in
self.offset += (frame.duration * 20.0)
}
}
}