कैसे करें स्विफ्ट का इस्तेमाल करके आईफोन वाइब्रेट?


116

मुझे iPhone को वाइब्रेट करने की आवश्यकता है, लेकिन मुझे नहीं पता कि स्विफ्ट में ऐसा कैसे किया जाए। मुझे पता है कि ऑब्जेक्टिव-सी में, आप बस लिखें:

import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

लेकिन वह मेरे लिए काम नहीं कर रहा है।


स्विफ्ट के पास आपके लिए एक ही फ़ंक्शन उपलब्ध है: developer.apple.com/library/ios/documentation/AudioToolbox/…
Martijn Courteaux

यहाँ आपको प्रत्येक .caf और संबंधित श्रेणी के लिए सभी कोड मिलेंगे: github.com/TUNER88/iOSSystemSoundsLibrary उदाहरण के लिए यदि आप एक हल्का कंपन चाहते हैं तो आप कोड 1003 का उपयोग कर सकते हैं।
O. Boujaouane

जवाबों:


225

संक्षिप्त उदाहरण:

import UIKit
import AudioToolbox

class ViewController: UIViewController {

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

अपने फोन पर लोड और यह कंपन होगा। आप इसे किसी फंक्शन या आईबीएशन में अपनी इच्छानुसार रख सकते हैं।

कोड अपडेट:

 AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) { }

सेब कोड डॉक्स के रूप में:

यह फ़ंक्शन भविष्य में रिलीज़ में हटा दिया जाएगा। इसके बजाय AudioServicesPlaySystemSoundWithCompletion का उपयोग करें।

नोट: यदि कंपन काम नहीं करता है। चेक वाइब्रेट ध्वनियों और हैप्टिक्स सेटिंग्स में सक्षम है


1
जब तक एक बटन दबाया जाता है तब तक फोन को लगातार कंपन करने का एक तरीका है?
निकोलस

3
निकोलस ने जो पूछा, वह भी मैं सोच रहा था कि क्या यह कुछ विशेष पैटर्न में कंपन करने का एक तरीका है।
नाथन मैककस्ले

1
मुझे पता है कि एक जीथब है जो सभी iPhone ऑडियो फ़ाइलों और कंपन फ़ाइलों के लिए सिस्टम आईडी दिखाता है, लेकिन क्या कोई जानता है कि मैं अन्य वाइब्रेट फ़ाइलों तक कैसे पहुंच सकता हूं? मैं उदाहरण के लिए Staccato वाइब्रेट का उपयोग करना चाहता हूं, लेकिन मैं ID का पता नहीं लगा सकता, या यहां तक ​​कि अगर एक है।
jammyman34

1
@ निकोलस अगर मुझे एक एप्लिकेशन मिला, जो मुझे एक बटन दबाने के लिए कहता है, अन्यथा यह हमेशा के लिए कंपन करेगा, मैं इसे तुरंत अपने डिवाइस से हटाने जा रहा हूं।
user3441734

2
ध्यान रखें कि यदि आपके ऐप का ऑडियो सत्र AVAudioSessionCategoryPlayAndRecord या AVAudioSessionCategoryRecord ऑडियो सत्र श्रेणी से कॉन्फ़िगर नहीं किया गया है, तो डिवाइस कंपन नहीं करता है। यह सुनिश्चित करता है कि कंपन ऑडियो रिकॉर्डिंग में हस्तक्षेप न करे।
फेड हेन्ज

70

IPhone 7 या 7 Plus पर iOS 10 में, कोशिश करें:

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

1
हम सभी iOS 10 का उपयोग करते हैं, क्या हम नहीं? यह सिस्टम का सबसे नया और सबसे अच्छा संस्करण है। सभी को अपडेट होना चाहिए, इसके होने का कोई समझौता नहीं है।
एडम स्मका

13
IOS 10 से परे, यह केवल एक विशेषता है जो iPhone 7 या उसके बाद के साथ काम करेगा। इसे iPhone 7.
C6Silver

@ C6Silver तुम सच हो। यह iPhone 4s, 5,5s, 5c और 6 पर काम नहीं कर रहा है। इन उपकरणों का मैंने परीक्षण किया है।
रॉकी बलबो

52

अन्य कंपन प्रकार:

import AudioToolbox

AudioServicesPlaySystemSound(1519) // Actuate "Peek" feedback (weak boom)
AudioServicesPlaySystemSound(1520) // Actuate "Pop" feedback (strong boom)
AudioServicesPlaySystemSound(1521) // Actuate "Nope" feedback (series of three weak booms)

कंपन के बारे में अधिक जानकारी - http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/


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
उपयोग करने के लिए 'आयात AVFoundation' जोड़ने के लिए मत भूलना।। पूर्वस्कूली कंपन :)
atereshkov

सिवाय .old पूर्वस्कूली शेष मामलों में काम नहीं कर रहा है मैं iPhone 6 भौतिक डिवाइस में किसी भी मदद का परीक्षण किया?
साई कुमार रेड्डी

: (.Heavy शैली) .impactOccurred (): आप की व्याख्या करनी चाहिए कि FeedbackGenerator हैप्टिक है और यह iPhone 7. के साथ आया था तुम भी केवल एक ही लाइन प्रत्येक मामले में हो सकता है UIImpactFeedbackGenerator
मेढाइ

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

UINotificationFeedbackGenerator iOS 10 से उपलब्ध है और Haptic v2 के साथ काम करता है, हम इसकी जाँच कर सकते हैं:

  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))
        }

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.