সুইফট ব্যবহার করে আইফোন ভাইব্রেট করা যায় কীভাবে?


116

আমার আইফোনটি ভাইব্রেট করা দরকার, তবে সুইফটে কীভাবে এটি করা যায় তা আমি জানি না। আমি জানি যে অবজেক্টিভ-সি তে আপনি কেবল লিখেছেন:

import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

তবে তা আমার পক্ষে কাজ করছে না।



এখানে আপনি প্রতিটি। ক্যাফ এবং সম্পর্কিত বিভাগের জন্য সমস্ত কোড পাবেন: github.com/TUNER88/iOSSystemSoundsLibrary উদাহরণস্বরূপ আপনি যদি একটি হালকা কম্পন চান তবে আপনি কোডটি 1003 ব্যবহার করতে পারেন
ও বোজাউইনে

উত্তর:


225

সংক্ষিপ্ত উদাহরণ:

import UIKit
import AudioToolbox

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))            
    }
}

আপনার ফোনে লোড করুন এবং এটি স্পন্দিত হবে। আপনি নিজের ইচ্ছে মতো এটি কোনও ফাংশন বা আইবিএક્શનে রাখতে পারেন।

কোড আপডেট:

 AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) { }

অ্যাপল কোড ডক্স হিসাবে লেখা:

এই ফাংশনটি ভবিষ্যতের প্রকাশে নষ্ট হবে। পরিবর্তে অডিও সার্ভিসপ্লেসিস্টেমসাউন্ড উইথ কমপ্লেশন ব্যবহার করুন।

দ্রষ্টব্য: যদি কম্পন কাজ করে না। চেক ভাইব্রেট শব্দ এবং হ্যাপটিক্স সেটিংসে সক্ষম


1
একটি বোতাম টিপানো না হওয়া পর্যন্ত ফোনটিকে অবিচ্ছিন্নভাবে স্পন্দিত করার কোনও উপায় আছে কি?
নিকোলাস

3
নিকোলাস যা জিজ্ঞাসা করেছিল, তাও আমি ভাবছিলাম যে এটিকে কিছু বিশেষ প্যাটার্নে স্পন্দিত করার কোনও উপায় আছে কিনা।
নাথান ম্যাককাস্কলে

1
আমি জানি যে একটি গিথব রয়েছে যা আইফোনের সমস্ত অডিও ফাইল এবং 3 টি ভাইব্রেট ফাইলের জন্য সিস্টেম আইডি দেখায়, তবে কী কী আমি জানি যে আমি অন্যান্য ভাইব্রেট ফাইলগুলিতে অ্যাক্সেস করতে পারি? আমি উদাহরণস্বরূপ স্ট্যাক্যাটো ভাইব্রেটটি ব্যবহার করতে চাই, তবে আমি আইডিটি খুঁজে পাচ্ছি না, বা আছে কিনা।
Jammyman34

1
@ নিকোলাস যদি আমার কাছে এমন একটি অ্যাপ্লিকেশন পাওয়া যায় যা আমাকে একটি বোতাম টিপতে বলে, অন্যথায় এটি চিরকালের জন্য স্পন্দিত হয়ে যায়, আমি তা অবিলম্বে আমার ডিভাইস থেকে এটি মুছতে চলেছি।
ব্যবহারকারী 3441734

2
মনে রাখবেন যে আপনার অ্যাপ্লিকেশনটির অডিও সেশনটি AVAudioSessionCategoryPlayAndRecord বা AVAudioSessionCategoryRecord অডিও সেশন বিভাগের সাথে কনফিগার করা থাকলে ডিভাইসটি কম্পন করে না। এটি নিশ্চিত করে যে কম্পন অডিও রেকর্ডিংয়ে হস্তক্ষেপ করবে না।
ফেড হেনজে

70

আইফোন 7 বা 7 প্লাসের আইওএস 10 এ, চেষ্টা করুন:

let generator = UIImpactFeedbackGenerator(style: .heavy)
generator.impactOccurred()

1
আমরা সবাই আইওএস 10 ব্যবহার করি, তাই না? এটি সিস্টেমের সবচেয়ে নতুন, সর্বোত্তম এবং বিনামূল্যে সংস্করণ। প্রত্যেকের আপডেট করা উচিত, এটি থাকার কোনও আপস নেই।
অ্যাডাম স্মাকা

13
আইওএস 10 এর বাইরে, এটি কেবলমাত্র একটি বৈশিষ্ট্য যা আইফোন 7 বা তার পরে কাজ করবে। এটি আইফোন than এর চেয়ে পুরানো ডিভাইসে উপেক্ষা করা হবে
সি

@ সি 6 সিলভার আপনি সত্য। এটি আইফোন 4 এস, 5,5 এস, 5 সি এবং 6 তে কাজ করছে না These এই ডিভাইসগুলি আমি পরীক্ষা করেছি।
রকি বালবোয়া


45

সুইফট 4.2 আপডেট হয়েছে

আপনার প্রকল্পে কেবল নীচে কোড প্রবেশ করান।

ব্যবহার

Vibration.success.vibrate()

সোর্স কোড

  enum Vibration {
        case error
        case success
        case warning
        case light
        case medium
        case heavy
        @available(iOS 13.0, *)
        case soft
        @available(iOS 13.0, *)
        case rigid
        case selection
        case oldSchool

        public func vibrate() {
            switch self {
            case .error:
                UINotificationFeedbackGenerator().notificationOccurred(.error)
            case .success:
                UINotificationFeedbackGenerator().notificationOccurred(.success)
            case .warning:
                UINotificationFeedbackGenerator().notificationOccurred(.warning)
            case .light:
                UIImpactFeedbackGenerator(style: .light).impactOccurred()
            case .medium:
                UIImpactFeedbackGenerator(style: .medium).impactOccurred()
            case .heavy:
                UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
            case .soft:
                if #available(iOS 13.0, *) {
                    UIImpactFeedbackGenerator(style: .soft).impactOccurred()
                }
            case .rigid:
                if #available(iOS 13.0, *) {
                    UIImpactFeedbackGenerator(style: .rigid).impactOccurred()
                }
            case .selection:
                UISelectionFeedbackGenerator().selectionChanged()
            case .oldSchool:
                AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
            }
        }
    }

4
.OldSchool ভাইব্রেশনটি ব্যবহার করতে 'এফএফাউন্ডেশন আমদানি' যুক্ত করতে ভুলবেন না :)
আটারেশকভ

.OldSchool বাকি কেসগুলি কাজ করছে না বাদে আমি আইফোন 6-তে শারীরিক ডিভাইসে কোনও সাহায্যের পরীক্ষা করেছি?
সাই কুমার রেড্ডি

: (.Heavy শৈলী) .impactOccurred (): আপনি ব্যাখ্যা করতে হবে যে FeedbackGenerator হ্যাপটিক এবং এটি আইফোন 7. সাথে আসা এছাড়াও আপনি শুধুমাত্র এক লাইন প্রতিটি ক্ষেত্রে থাকতে পারে UIImpactFeedbackGenerator
Medhi

22

জন্য আইওএস 10.0+ আপনি চেষ্টা করতে পারেন UIFeedbackGenerator

উপরের সরল দর্শনীয় নিয়ন্ত্রণকারী, কেবলমাত্র আপনার পরীক্ষার "একক দর্শন অ্যাপ্লিকেশন" এ আপনার দৃশ্য নিয়ন্ত্রণকারীকে প্রতিস্থাপন করুন

import UIKit

class ViewController: UIViewController {

    var i = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        let btn = UIButton()
        self.view.addSubview(btn)
        btn.translatesAutoresizingMaskIntoConstraints = false

        btn.widthAnchor.constraint(equalToConstant: 160).isActive = true
        btn.heightAnchor.constraint(equalToConstant: 160).isActive = true
        btn.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        btn.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        btn.setTitle("Tap me!", for: .normal)
        btn.setTitleColor(UIColor.red, for: .normal)
        btn.addTarget(self, action: #selector(tapped), for: .touchUpInside)
    }

    @objc func tapped() {
        i += 1
        print("Running \(i)")

        switch i {
        case 1:
            let generator = UINotificationFeedbackGenerator()
            generator.notificationOccurred(.error)

        case 2:
            let generator = UINotificationFeedbackGenerator()
            generator.notificationOccurred(.success)

        case 3:
            let generator = UINotificationFeedbackGenerator()
            generator.notificationOccurred(.warning)

        case 4:
            let generator = UIImpactFeedbackGenerator(style: .light)
            generator.impactOccurred()
        case 5:
            let generator = UIImpactFeedbackGenerator(style: .medium)
            generator.impactOccurred()

        case 6:
            let generator = UIImpactFeedbackGenerator(style: .heavy)
            generator.impactOccurred()

        default:
            let generator = UISelectionFeedbackGenerator()
            generator.selectionChanged()
            i = 0
        }
    }
}

18

আমরা এটি Xcode7.1 এ করতে পারি

import UIKit
import AudioToolbox


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
    }
}

12

সুইফট 4.2, 5.0

 if #available(iOS 10.0, *) {
      UIImpactFeedbackGenerator(style: .light).impactOccurred()
   } 

আপনি অন্যান্য স্টাইল পছন্দ করতে পারেন

    style: .heavy
    style: .medium

    //Note: soft and rigid available in only iOS 13.0
    style: .soft
    style: .rigid

4

আপনি AudioServicesবা হয় ব্যবহার করে ফোনটি কম্পন করতে পারেন Haptic Feedback

// AudioServices
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

// Haptic Feedback
UIImpactFeedbackGenerator(style: .medium).impactOccurred()

আমার ওপেন সোর্স ফ্রেমওয়ার্ক চেকআউট Haptica , এটি উভয় সমর্থন Haptic Feedback, AudioServicesএবং অনন্য কম্পন নিদর্শন। সুইফট 4.2, এক্সকোড 10 এ কাজ করে


3
import AudioToolbox

extension UIDevice {
    static func vibrate() {
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
    }
}

এখন আপনি UIDevice.vibrate()প্রয়োজন হিসাবে কল করতে পারেন ।


2

ইউআইএনওটিফিকেশন ফিডব্যাক জেনারেটর আইওএস 10 থেকে পাওয়া যায় এবং হ্যাপটিক ভি 2 এর সাথে কাজ করে, আমরা এটি পরীক্ষা করতে পারি:

  let feedbackSupportLevel = UIDevice.current.value(forKey: "_feedbackSupportLevel") as? Int
        if #available(iOS 10.0, *), let feedbackSupportLevel = feedbackSupportLevel, feedbackSupportLevel > 1 {
            do { // 1
                let generator = UIImpactFeedbackGenerator(style: .medium)
                generator.impactOccurred()
            }

            do { // or 2
                let generator = UINotificationFeedbackGenerator()
                generator.notificationOccurred(.success)
            }
        } else {
            AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
        }

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.