Post

Replies

Boosts

Views

Activity

PhotosPicker won't appear when it embedded in popover
When I embedded a PhotosPickerView() in popover, it won't works: struct PhotoPickerTest: View { @State private var selectedPhotoItem: PhotosPickerItem? @State var isTaped: Bool = false var body: some View { Button("", systemImage: "plus") { isTaped = true } .popover(isPresented: $isTaped) { PhotoPickerView() } } func PhotoPickerView() -> some View { PhotosPicker(selection: $selectedPhotoItem) { Image(systemName: "photo") } } } but if I just replace "popover" to "sheet", it works fine: struct PhotoPickerTest: View { @State private var selectedPhotoItem: PhotosPickerItem? @State var isTaped: Bool = false var body: some View { Button("", systemImage: "plus") { isTaped = true } .sheet(isPresented: $isTaped) { PhotoPickerView() } } func PhotoPickerView() -> some View { PhotosPicker(selection: $selectedPhotoItem) { Image(systemName: "photo") } } } I think it's a bug, and bothered me a lot, hope apple engineers can fix it.
3
0
889
Jan ’24
SwiftUI [[stichable]] metal shader & CIFilter written in metal extern"C" can't work at the same time
In my project, I used two metal shaders in two ways. One is link to SwiftUI's modifier .colorEffect(ShaderLibrary.myShader()), which metal shader marked as [[stichable]]. Another one is a custom CIFilter, which kernel been written in external "C" closure. Because custom CIFilter must add build rules so Xcode can compile it, so I added -fcikernel to Metal Compiler and -cikernel to Metal Linker from Build Settings, just like Apple's document told me that. But the result is weird, if I add rules, custom CIFilter works, [[stichable]] shader doesn't work. if I delete rules, and comment out code of CIFilter(for avoiding warning), [[stichable]] shader works, but now I can't use my custom CIFilter. Actually, once these two shaders works well in my project, but when I updated Xcode from 15 to 16, it became weird, the 2 shaders can't exist at same time. Even though I go back to Xcode 15, I can't save them. I have no idea, please help, thank you. XCode 16 / iOS 18 on iPhone 14 Pro
2
0
801
Sep ’24
How to search location in global rather than in local?
I'm doing a weather app, users can search locations for getting weather, but the problem is, the results only shows locations in my country, not in global. For example, I'm in China, I can't search New York, it just shows nothing. Here's my code: @Observable class SearchPlaceManager: NSObject { var searchText: String = "" let searchCompleter = MKLocalSearchCompleter() var searchResults: [MKLocalSearchCompletion] = [] override init() { super.init() searchCompleter.resultTypes = .address searchCompleter.delegate = self } @MainActor func seachLocation() { if !searchText.isEmpty { searchCompleter.queryFragment = searchText } } } extension SearchPlaceManager: MKLocalSearchCompleterDelegate { func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) { withAnimation { self.searchResults = completer.results } } } Also, I've tried to set searchCompleter.region = MKCoordinateRegion( center: CLLocationCoordinate2D(latitude: 0, longitude: 0), span: MKCoordinateSpan(latitudeDelta: 180, longitudeDelta: 360) ), but it doesn't work.
2
0
826
Dec ’24
ScrollView Bug
If put a List in ScrollVIew, List won't appear: import SwiftUI struct BugView: View { let numbers: [Int] = [0, 1, 2] var body: some View { ScrollView { List(numbers, id: \.self) { number in Text(number.description) } } } } #Preview { BugView() }
1
0
472
Apr ’24
Help: scorllTo() doesn't works in VStack
I can read the scrollPosition correctly, but scrollTo() doesn't work. iOS 17, Xcode 15.2. Code like this below(can directly copy and paste): import SwiftUI struct PositionTest: View { @State private var weathers = Weather.samples @State private var scrollPosition: Weather.ID? @State private var isTaped: Bool = false var body: some View { VStack { Text("Scroll Position: " + (scrollPosition ?? "Cupertino")) if !isTaped { CollapsedView( weathers: $weathers, scrollPosition: $scrollPosition, isTaped: $isTaped ) } else { ExpandedView( weathers: $weathers, scrollPosition: $scrollPosition, isTaped: $isTaped ) } } .font(.title) .fontWeight(.semibold) .animation(.default, value: isTaped) } } #Preview { PositionTest() } struct CollapsedView: View { @Binding var weathers: [Weather] @Binding var scrollPosition: Weather.ID? @Binding var isTaped: Bool var body: some View { ScrollViewReader { proxy in ScrollView { VStack(spacing: 20) { ForEach(weathers) { weather in Text(weather.name) .frame(width: 350, height: 227) .foregroundStyle(.white) .background(.blue.gradient) .cornerRadius(40) .id(weather.id as Weather.ID?) .onTapGesture { isTaped.toggle() } } } .frame(maxWidth: .infinity) .scrollTargetLayout() } .scrollIndicators(.hidden) .scrollTargetBehavior(.viewAligned) .scrollPosition(id: $scrollPosition, anchor: .center) .onAppear { proxy.scrollTo(scrollPosition, anchor: .center) } } } } struct ExpandedView: View { @Binding var weathers: [Weather] @Binding var scrollPosition: Weather.ID? @Binding var isTaped: Bool var body: some View { ScrollViewReader { proxy in ScrollView { VStack(spacing: 20) { ForEach(weathers) { weather in Text(weather.name) .frame(width: 250, height: 227) .foregroundStyle(.white) .background(.indigo.gradient) .clipShape(.circle) .id(weather.id as Weather.ID?) .onTapGesture { isTaped.toggle() } } } .frame(maxWidth: .infinity) .scrollTargetLayout() } .scrollIndicators(.hidden) .scrollTargetBehavior(.viewAligned) .scrollPosition(id: $scrollPosition, anchor: .center) .onAppear { proxy.scrollTo(scrollPosition, anchor: .center) } } } } struct Weather: Identifiable { var id: String { name } let name: String let temp: Int static let samples = [ Weather(name: "Cupertino", temp: 12), Weather(name: "New York", temp: 13), Weather(name: "ShangHai", temp: 14), Weather(name: "London", temp: 15), Weather(name: "Las Vegas", temp: 16), ] } I found if I simply change the VStack to LazyVStack in both CollapsedView() and ExpandedView(), the scrollTo() method works fine. But in my project, for some reason I don't want to use LazyVStack, just want to use VStack, is there any way to make scorllTo() works in VStack?
0
0
632
Jan ’24
Swift Data how to get binding from @Query property?
I want to use List(data:, editActions:, rowContent:), the data: needs a $property, but I can't pass $persons in there directly. Is there any way to solve like this below: import SwiftUI import SwiftData struct BindableTest: View { @Environment(\.modelContext) var modelContext @Query var persons: [Person] var body: some View { VStack { Button("Add") { let person = Person(name: "test", age: 12) modelContext.insert(person) } List($persons, editActions: .all) { $person in Text(person.name) Text(person.age.formatted()) } } } } iOS 17
0
3
947
Feb ’24
PhotosPicker won't appear when it embedded in popover
When I embedded a PhotosPickerView() in popover, it won't works: struct PhotoPickerTest: View { @State private var selectedPhotoItem: PhotosPickerItem? @State var isTaped: Bool = false var body: some View { Button("", systemImage: "plus") { isTaped = true } .popover(isPresented: $isTaped) { PhotoPickerView() } } func PhotoPickerView() -> some View { PhotosPicker(selection: $selectedPhotoItem) { Image(systemName: "photo") } } } but if I just replace "popover" to "sheet", it works fine: struct PhotoPickerTest: View { @State private var selectedPhotoItem: PhotosPickerItem? @State var isTaped: Bool = false var body: some View { Button("", systemImage: "plus") { isTaped = true } .sheet(isPresented: $isTaped) { PhotoPickerView() } } func PhotoPickerView() -> some View { PhotosPicker(selection: $selectedPhotoItem) { Image(systemName: "photo") } } } I think it's a bug, and bothered me a lot, hope apple engineers can fix it.
Replies
3
Boosts
0
Views
889
Activity
Jan ’24
SwiftUI [[stichable]] metal shader & CIFilter written in metal extern"C" can't work at the same time
In my project, I used two metal shaders in two ways. One is link to SwiftUI's modifier .colorEffect(ShaderLibrary.myShader()), which metal shader marked as [[stichable]]. Another one is a custom CIFilter, which kernel been written in external "C" closure. Because custom CIFilter must add build rules so Xcode can compile it, so I added -fcikernel to Metal Compiler and -cikernel to Metal Linker from Build Settings, just like Apple's document told me that. But the result is weird, if I add rules, custom CIFilter works, [[stichable]] shader doesn't work. if I delete rules, and comment out code of CIFilter(for avoiding warning), [[stichable]] shader works, but now I can't use my custom CIFilter. Actually, once these two shaders works well in my project, but when I updated Xcode from 15 to 16, it became weird, the 2 shaders can't exist at same time. Even though I go back to Xcode 15, I can't save them. I have no idea, please help, thank you. XCode 16 / iOS 18 on iPhone 14 Pro
Replies
2
Boosts
0
Views
801
Activity
Sep ’24
How to search location in global rather than in local?
I'm doing a weather app, users can search locations for getting weather, but the problem is, the results only shows locations in my country, not in global. For example, I'm in China, I can't search New York, it just shows nothing. Here's my code: @Observable class SearchPlaceManager: NSObject { var searchText: String = "" let searchCompleter = MKLocalSearchCompleter() var searchResults: [MKLocalSearchCompletion] = [] override init() { super.init() searchCompleter.resultTypes = .address searchCompleter.delegate = self } @MainActor func seachLocation() { if !searchText.isEmpty { searchCompleter.queryFragment = searchText } } } extension SearchPlaceManager: MKLocalSearchCompleterDelegate { func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) { withAnimation { self.searchResults = completer.results } } } Also, I've tried to set searchCompleter.region = MKCoordinateRegion( center: CLLocationCoordinate2D(latitude: 0, longitude: 0), span: MKCoordinateSpan(latitudeDelta: 180, longitudeDelta: 360) ), but it doesn't work.
Replies
2
Boosts
0
Views
826
Activity
Dec ’24
GestureComponent bug on visionOS
let component = GestureComponent(DragGesture()) iOS: ☑️ visionOS: ❌ This bug from beta to public, please fix it.
Replies
2
Boosts
0
Views
439
Activity
Sep ’25
ScrollView Bug
If put a List in ScrollVIew, List won't appear: import SwiftUI struct BugView: View { let numbers: [Int] = [0, 1, 2] var body: some View { ScrollView { List(numbers, id: \.self) { number in Text(number.description) } } } } #Preview { BugView() }
Replies
1
Boosts
0
Views
472
Activity
Apr ’24
Why VisionOS doesn't support CustomMaterial ?
It's much easier to use custom material to bridge metal shader onto Reality model than using LowLevelTexture does the same thing. Why VisionOS doesn't support this material:
Replies
1
Boosts
0
Views
164
Activity
Apr ’25
How to make device cross into portal world.
I want to step into portal world. I've know PortalCrossingComponent can make an entity to cross portal, but how to make device cross into portal world?
Replies
1
Boosts
0
Views
135
Activity
Apr ’25
How to export an entity to USD?
I want to record animation with entity, then export it to .usd without using Reality Composer Pro, how to achieve that?
Replies
1
Boosts
0
Views
77
Activity
Apr ’25
Can't build old project on Xcode 26 beta5
I have a visionOS 2 project created on Xcode 16, when I updated to Xcode 26 beta5, I can't build it any more, every time it stuck in process like the picture shows below: Already tried many methods to fix this issue, such as clear build folders, but don't work. MacBook Air M2 / MacOS 26 beta5 / Xcode 26 beta5
Replies
1
Boosts
0
Views
222
Activity
Aug ’25
Can't observe Entity's orientation properties in Slider
On Xcode 26 and visionOS 26, apple provides observable property for Entity, so we can easily interact with Entity between RealityScene and SwiftUI, but there is a issue: It's fine to observe Entity's position and scale properties in Slider, but can't observe orientation properties in Slider. MacBook Air M2 / Xcode 26 beta6
Replies
1
Boosts
0
Views
216
Activity
Aug ’25
How to break the progress of Entity.animate()
Entity.animate() makes entity animation much easier, but in many cases, I want to break the progress because of some gestures, I couldn't find any way to do this, including tried entity.stopAllAnimations(), I have to wait till Entity.animate() completes. iOS 26 / visionOS 26
Replies
1
Boosts
0
Views
363
Activity
Sep ’25
Does RealityKit support mesh based animation?
I have a mesh based animation 3D model, that means every frame it’s a new mesh. I import it into RealityView, but can’t play it‘s animation, RealityKit tells me this model has no animations by using print(entity.availableAnimations).
Replies
1
Boosts
0
Views
674
Activity
Aug ’25
How to pass scrollTransition's phase value to my @State property
.scrollTransition { view, phase in view.opacity(phase.isIdentity ? 1 : 0) .scaleEffect(phase.isIdentity ? 1 : 0.75) } Is there anyway to pass the phase.isIdentity to my @State bool property? iOS 17
Replies
0
Boosts
0
Views
431
Activity
Jan ’24
Help: scorllTo() doesn't works in VStack
I can read the scrollPosition correctly, but scrollTo() doesn't work. iOS 17, Xcode 15.2. Code like this below(can directly copy and paste): import SwiftUI struct PositionTest: View { @State private var weathers = Weather.samples @State private var scrollPosition: Weather.ID? @State private var isTaped: Bool = false var body: some View { VStack { Text("Scroll Position: " + (scrollPosition ?? "Cupertino")) if !isTaped { CollapsedView( weathers: $weathers, scrollPosition: $scrollPosition, isTaped: $isTaped ) } else { ExpandedView( weathers: $weathers, scrollPosition: $scrollPosition, isTaped: $isTaped ) } } .font(.title) .fontWeight(.semibold) .animation(.default, value: isTaped) } } #Preview { PositionTest() } struct CollapsedView: View { @Binding var weathers: [Weather] @Binding var scrollPosition: Weather.ID? @Binding var isTaped: Bool var body: some View { ScrollViewReader { proxy in ScrollView { VStack(spacing: 20) { ForEach(weathers) { weather in Text(weather.name) .frame(width: 350, height: 227) .foregroundStyle(.white) .background(.blue.gradient) .cornerRadius(40) .id(weather.id as Weather.ID?) .onTapGesture { isTaped.toggle() } } } .frame(maxWidth: .infinity) .scrollTargetLayout() } .scrollIndicators(.hidden) .scrollTargetBehavior(.viewAligned) .scrollPosition(id: $scrollPosition, anchor: .center) .onAppear { proxy.scrollTo(scrollPosition, anchor: .center) } } } } struct ExpandedView: View { @Binding var weathers: [Weather] @Binding var scrollPosition: Weather.ID? @Binding var isTaped: Bool var body: some View { ScrollViewReader { proxy in ScrollView { VStack(spacing: 20) { ForEach(weathers) { weather in Text(weather.name) .frame(width: 250, height: 227) .foregroundStyle(.white) .background(.indigo.gradient) .clipShape(.circle) .id(weather.id as Weather.ID?) .onTapGesture { isTaped.toggle() } } } .frame(maxWidth: .infinity) .scrollTargetLayout() } .scrollIndicators(.hidden) .scrollTargetBehavior(.viewAligned) .scrollPosition(id: $scrollPosition, anchor: .center) .onAppear { proxy.scrollTo(scrollPosition, anchor: .center) } } } } struct Weather: Identifiable { var id: String { name } let name: String let temp: Int static let samples = [ Weather(name: "Cupertino", temp: 12), Weather(name: "New York", temp: 13), Weather(name: "ShangHai", temp: 14), Weather(name: "London", temp: 15), Weather(name: "Las Vegas", temp: 16), ] } I found if I simply change the VStack to LazyVStack in both CollapsedView() and ExpandedView(), the scrollTo() method works fine. But in my project, for some reason I don't want to use LazyVStack, just want to use VStack, is there any way to make scorllTo() works in VStack?
Replies
0
Boosts
0
Views
632
Activity
Jan ’24
Swift Data how to get binding from @Query property?
I want to use List(data:, editActions:, rowContent:), the data: needs a $property, but I can't pass $persons in there directly. Is there any way to solve like this below: import SwiftUI import SwiftData struct BindableTest: View { @Environment(\.modelContext) var modelContext @Query var persons: [Person] var body: some View { VStack { Button("Add") { let person = Person(name: "test", age: 12) modelContext.insert(person) } List($persons, editActions: .all) { $person in Text(person.name) Text(person.age.formatted()) } } } } iOS 17
Replies
0
Boosts
3
Views
947
Activity
Feb ’24