সুইফটুই: কীভাবে দুটি ট্যাপ এবং লম্বা প্রেসের বোতামটি পরিচালনা করবেন?


11

আমার সুইফটউআইতে একটি বোতাম আছে এবং আমি "ট্যাপ বোতাম" (সাধারণ ক্লিক / ট্যাপ) এবং "দীর্ঘ প্রেস" এর জন্য আলাদা ক্রিয়া করতে সক্ষম হতে চাই।

এটি কি সুইফটআইআই-তে সম্ভব?

আমার কাছে এখন যে বোতামটি রয়েছে তার জন্য সহজ কোডটি এখানে রয়েছে (কেবলমাত্র "সাধারণ" ট্যাপ / টাচের ক্ষেত্রে পরিচালনা করে)।

Button(action: {self.BLEinfo.startScan() }) {
                        Text("Scan")
                    } .disabled(self.BLEinfo.isScanning)

আমি ইতিমধ্যে একটি "লংপ্রেস অঙ্গভঙ্গি" যুক্ত করার চেষ্টা করেছি তবে এটি এখনও "সাধারণ / সংক্ষিপ্ত" ক্লিকটি "চালায়"। এই কোডটি আমি চেষ্টা করেছিলাম:

Button(action: {self.BLEinfo.startScan() }) {
                        Text("Scan")
                            .fontWeight(.regular)
                            .font(.body)
                        .gesture(
                            LongPressGesture(minimumDuration: 2)
                                .onEnded { _ in
                                    print("Pressed!")
                            }
                        )
                    }

ধন্যবাদ!

জেরার্ড

উত্তর:


15

আমি অনেক কিছুই চেষ্টা করেছিলাম কিন্তু শেষ পর্যন্ত আমি এরকম কিছু করেছি:

    Button(action: {
    }) {
        VStack {
            Image(self.imageName)
                .resizable()
                .onTapGesture {
                    self.action(false)
                }
                .onLongPressGesture(minimumDuration: 0.1) {
                    self.action(true)
                }
        }
    }

এটি এখনও প্রভাব সহ একটি বোতাম তবে সংক্ষিপ্ত এবং দীর্ঘ প্রেস পৃথক।


3
দয়া করে মনে রাখবেন যে Xcode 11.2.1 / iOS 13.2 হিসাবে এখানে আদেশটি গুরুত্বপূর্ণ বলে মনে হচ্ছে। onLongPressGesture()পূর্বে ব্যবহার করা onTapGesture()পরবর্তীকৃতদের উপেক্ষা করবে।
Koraktor

এতে কোডটি টেপিং বা টিপে বা ব্লক করার অ্যানিমেশন নেইaction
ফারুক

3

আমি কেবল আবিষ্কার করেছি যে প্রভাবটি প্রয়োগের ক্রমের উপর নির্ভর করে। নিম্নলিখিত ক্রমে অঙ্গভঙ্গিগুলি সনাক্তকরণ কার্যকর করে মনে হচ্ছে তিনটি অঙ্গভঙ্গি সনাক্ত এবং সনাক্ত করা সম্ভব হবে:

  1. একটি ডাবল ট্যাপ অঙ্গভঙ্গি পরিচালনা করুন
  2. একটি দীর্ঘ চাপ জেস্টার হ্যান্ডেল করুন
  3. একক ট্যাপ অঙ্গভঙ্গি পরিচালনা করুন

এক্সকোড সংস্করণ 11.3.1 (11C504) এ পরীক্ষিত

    fileprivate func myView(_ height: CGFloat, _ width: CGFloat) -> some View {
    return self.textLabel(height: height, width: width)
        .frame(width: width, height: height)
        .onTapGesture(count: 2) {
            self.action(2)
        }
        .onLongPressGesture {
            self.action(3)
        }
        .onTapGesture(count: 1) {
            self.action(1)
        }
}

1

এটি পরীক্ষিত নয়, তবে আপনি LongPressGestureআপনার বোতামটিতে একটি যুক্ত করার চেষ্টা করতে পারেন।

এটি সম্ভবত কিছু দেখতে হবে।

struct ContentView: View {
    @GestureState var isLongPressed = false

    var body: some View {
        let longPress = LongPressGesture()
            .updating($isLongPressed) { value, state, transaction in
                state = value
            }

        return Button(/*...*/)
            .gesture(longPress)
    }
}

হাই কিলিয়ান আসলে আমার উল্লেখ করা উচিত ছিল যে আমি ইতিমধ্যে লম্বারপ্রেস অঙ্গভঙ্গিটি যুক্ত করার চেষ্টা করেছি তবে এটি কেবল "সাধারণ ক্লিক" ক্রিয়াটি "এক্সিকিউট" করবে না দীর্ঘ প্রেসের জন্য। এটি যুক্ত করতে আমার পোস্টটি সম্পাদনা করবে (আপনি যেমন দ্বিতীয় ব্যক্তি হিসাবে এটি প্রস্তাব করেন - প্রথম জন তার উত্তর মুছে ফেলে)।
জেরার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.