我有一个非常简单的自定义视图,它只包含一个 RoundedRectangle:
public struct SimpleView: View {
@State public var focused = false
public var body: some View {
RoundedRectangle(cornerRadius: 20)
.fill(.green)
.scaleEffect( focused ? 1.0 : 0.8 )
.animation(.easeInOut, value: focused)
}
}
我必须在容器视图中看到这个
SimpleView
的实例:
public enum EnumView: Hashable { 案例一 案例二 案例三 }
public struct GalleryView: View {
var s1 = SimpleView()
var s2 = SimpleView()
var s3 = SimpleView()
@FocusState var fokus: EnumView?
public init() {
}
public var body: some View {
HStack(alignment: .center) {
s1.focused($fokus, equals: .one)
.onChange(of: fokus) { newFocusedField in
log.info("| New focus \(newFocusedField)")
}
s2.focused($fokus, equals: .two)
.onChange(of: fokus) { newFocusedField in
log.info("| New focus \(newFocusedField)")
}
s3.focused($fokus, equals: .three)
.onChange(of: fokus) { newFocusedField in
log.info("| New focus \(newFocusedField)")
}
}
}
}
在我使用“
focusable(true)
”-SimpleView
中的修饰符之前,它允许我在三个子视图之间移动焦点,这些子视图根据焦点所在的位置进行扩展或缩小。
根据 Apple 的说法,“
focusable(true)
”- 修饰符已被弃用 所以我想用新的 "focused(... , equals: )"
- 修饰符替换此解决方案。但经过两天多的尝试,我仍然无法正常工作。例如,当我使用 Buttons 而不是我的自定义视图时,它会起作用。
基本上我想水平移动焦点,视图应该根据它们当前的焦点状态扩大或缩小。
任何想法谁来实现这个?
谢谢!
public struct SimpleView: View {
public var body: some View {
VStack(alignment: .center) {
GeometryReader { proxy in
Button( action: {} ,
label: {
ZStack(alignment: .center) {
RoundedRectangle(cornerRadius: 12.5)
.fill(.green)
}
).buttonStyle(.card)
}
}
}
}