मेरे पास एक ऐसा दृश्य है जो बाहरी @ObservedObject से परिवर्तनों पर प्रतिक्रिया करता है, इसलिए मैं एक अंतर्निहित एनीमेशन का उपयोग चेतन परिवर्तनों के लिए कर रहा हूं जब प्रेक्षित वस्तु से कुछ बदलता है:

.animation(.easeInOut(duration: 1))

यह बहुत अच्छा काम करता है लेकिन मुझे एक समस्या है।

मैं यह भी चाहता हूं कि दृश्य खींचने योग्य हो, लेकिन जब दृश्य को खींचा जाता है तो ऑफसेट स्थिति को बदलते समय, यह अब उस धीमी एनीमेशन का उपयोग करता है। मैंने एनीमेशन को .none या nil पर स्पष्ट रूप से सेट करने का प्रयास किया है लेकिन न तो काम करता है।

तो मेरा सवाल यह है कि, मैं अपनी स्पष्ट एनीमेशन को अपने निहित एनीमेशन को कैसे खत्म कर सकता हूं जैसा कि मैं हाईप्राइटी जेस्चर या इसी तरह के साथ करूंगा। क्या यह स्विफ्टयूआई में संभव है?

मैं एक्सकोड 12 और आईओएस 14 का उपयोग कर रहा हूं।

यहाँ एक उदाहरण है:

import SwiftUI

struct CardView: View {

    @ObservedObject var myObject: MyObject
    @State var translation = CGSize(width: 0, height: 0)

    var body: some View {
        ZStack {
            RoundedRectangle(cornerRadius: 12)
            Text(myObject.someVal)
        }
        .animation(.easeInOut(duration: 1))
        .offset(x: translation.width, y: translation.height)
        .gesture(
            DragGesture()
                .onChanged { value in
                    withAnimation(nil) {
                        // I don't want this to be animated!
                        translation = value.translation
                    }
                }
                .onEnded { _ in
                    // I'd preferably like to also animate this with .spring() and ignore the implicit animation
                    withAnimation(.spring()) {
                        translation = .zero
                    }
                }
         )
    }
}

धन्यवाद!

1
Priva28 28 सितंबर 2020, 06:34

1 उत्तर

सबसे बढ़िया उत्तर

केवल एनिमेटेबल होने के लिए मूल्य के साथ निहित एनीमेशन में शामिल हों (इसलिए यह गैर-संबंधित ऑफसेट पर प्रतिक्रिया नहीं करेगा), जैसे

ZStack {
    RoundedRectangle(cornerRadius: 12)
    Text(myObject.someVal)
}
.animation(.easeInOut(duration: 1), value: myObject.someVal)  // << here !!
1
Asperi 28 सितंबर 2020, 06:47