আইফোনটি ভাইব্রেট করা হচ্ছে


228

আইফোনটি কীভাবে একবার কম্পনের জন্য সেট করা যায়?

উদাহরণস্বরূপ, যখন কোনও খেলোয়াড় একটি জীবন হারায় বা গেমটি শেষ হয়, আইফোনটি কম্পন করা উচিত।


9
কাঁপানো ইশারার কম্পনের চেয়ে সম্পূর্ণ আলাদা। একটি হ'ল মানব-দীক্ষিত, একটি যন্ত্র-দীক্ষিত।
ইকো

উত্তর:


404

" আইফোন টিউটোরিয়াল: আইওএস ডিভাইসগুলির ক্ষমতা পরীক্ষা করার আরও ভাল উপায় " থেকে:

দুটি আপাতদৃষ্টিতে অনুরূপ ফাংশন রয়েছে যা একটি পরামিতি নেয় kSystemSoundID_Vibrate:

1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

উভয় ফাংশন আইফোন স্পন্দিত। তবে, আপনি যখন ডিভাইসগুলিতে প্রথম ফাংশন ব্যবহার করেন যা স্পন্দন সমর্থন করে না, এটি একটি বীপ শব্দ বাজায়। অন্যদিকে দ্বিতীয় কার্যটি অসমর্থিত ডিভাইসগুলিতে কিছুই করে না। সুতরাং আপনি যদি সতর্কতা হিসাবে অবিচ্ছিন্নভাবে ডিভাইসটি কম্পন করতে চলেছেন তবে সাধারণ জ্ঞান বলেছেন, ফাংশন 2 ব্যবহার করুন।

প্রথমে AudioToolbox.frameworkবিল্ড পর্যায়গুলিতে আপনার টার্গেটে অডিওটুলবক্স ফ্রেমওয়ার্ক যুক্ত করুন ।

তারপরে, এই শিরোলেখ ফাইলটি আমদানি করুন:

#import <AudioToolbox/AudioServices.h>

3
# আইম্পোর্ট <কোকো / কোকো.এইচ প্রয়োজন নেই।
র‌্যাপটার

10
কম্পনের সময়কে 1 সেকেন্ডের চেয়ে কম করার কোনও উপায় আছে কি?
জর্জ আসদা

11
আমি যুক্ত করতে চাই যে, আইওএসের সেটিংসে কম্পন বন্ধ থাকলে, আপনি এই আদেশগুলি ব্যবহার করলেও ব্যবহারকারী কম্পন পাবেন না।
ডেনিস কুতলুবায়েভ

7
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
সুইফটে

1
AudioServicesPlayAlertSound (kSystemSoundID_Vibrate); আইফোনটিতে প্রবিদ্ধভাবে বিবার্ট কিন্তু এটি আইপ্যাডে কোনও বীপ শব্দ করে না।
মঙ্গেশ

45

সুইফট 2.0+

অডিওটুলবাক্স এখন টাইপ kSystemSoundID_Vibrateহিসাবে উপস্থাপন করে SystemSoundID, তাই কোডটি হ'ল:

import AudioToolbox.AudioServices

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)

পরিবর্তে অতিরিক্ত castালাই ধাপে যেতে হবে

(@ ডভের কাছে প্রপস)

আসল উত্তর (সুইফট 1.x)

এবং, আপনি সুইফটে এটি কীভাবে করবেন তা এখানে (যদি আপনি আমার মতোই সমস্যায় পড়েছিলেন)

এর বিপরীতে লিঙ্ক করুন AudioToolbox.framework(আপনার প্রকল্পে যান, আপনার লক্ষ্য নির্বাচন করুন, পর্যায়গুলি তৈরি করুন, গ্রন্থাগারগুলির সাথে বাইনারি লিঙ্ক করুন, সেখানে গ্রন্থাগার যুক্ত করুন)

এটি সম্পূর্ণ হয়ে গেলে:

import AudioToolbox.AudioServices

// Use either of these
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))

উদ্ভট জিনিসটি হ'ল SystemSoundIDমূলত একটির জন্য একটি typealias(অভিনব সুইফট typedef) UInt32এবং এটি kSystemSoundID_Vibrateনিয়মিত Int। কম্পাইলার আপনার কাছ থেকে ঢালাই করার চেষ্টা করার জন্য একটি ত্রুটি দেয় Intকরার UInt32, কিন্তু ত্রুটি সার্চ যেমন, যা বিভ্রান্তিকর হয় "SystemSoundID রূপান্তর করা যাবে না"। আপেল কেন এটিকে কেবল একটি সুইফট এনাম বানিয়ে ফেলেনি তা আমার বাইরে।

@ আপোনোমারেঙ্কো বিশদে চলেছেন, আমার উত্তরটি কেবল সুইফটারদের জন্য।


এটি সুইফট 2 / আইওএস 9 / এক্সকোড 7 এ স্থির বলে মনে হচ্ছে I আমি ব্যবহার করেছি AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)এবং এটি সূক্ষ্মভাবে সংকলিত হয়েছে
ডভ

35

এটি করার একটি সহজ উপায় হ'ল অডিও পরিষেবাগুলি:

#import <AudioToolbox/AudioToolbox.h> 
...    
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

3
# আইম্পোর্ট <অডিওটুলবক্স / অডিওটুলবক্স.h> এবং আপনাকে আপনার প্রকল্পের বিল্ড পর্যায়গুলিতে অডিওটুলবক্স.ফ্রেমওয়ার্ক যুক্ত করতে হবে।
মাইকেল ম্যানগোল্ড

31

এই ডিভাইসগুলির জন্য আমার এতে খুব সমস্যা হয়েছিল যে কোনওভাবে ভাইব্রেশন বন্ধ ছিল, তবে আমাদের এটি নির্বিশেষে কাজ করার দরকার ছিল, কারণ এটি আমাদের অ্যাপ্লিকেশন কার্যকারিতার জন্য গুরুত্বপূর্ণ, এবং যেহেতু এটি একটি ডকুমেন্টেড পদ্ধতি কলের জন্য কেবল একটি পূর্ণসংখ্যা, তাই এটি পাস হবে বৈধতা। সুতরাং আমি এখানে এমন কিছু শব্দের চেষ্টা করেছি যা এখানে ভাল ডকুমেন্টেড এর বাইরে ছিল: TUNER88 / iOS সিস্টেমসাউন্ডস লাইব্রেরি

আমি তখন 1352 তে হোঁচট খেয়েছি, যা নিঃশব্দ স্যুইচ বা ডিভাইসের সেটিংস নির্বিশেষে কাজ করছে (Settings->vibrate on ring, vibrate on silent)

- (void)vibratePhone;
{
     if([[UIDevice currentDevice].model isEqualToString:@"iPhone"])
     {
         AudioServicesPlaySystemSound (1352); //works ALWAYS as of this post
     }
     else
     {
          // Not an iPhone, so doesn't have vibrate
          // play the less annoying tick noise or one of your own
          AudioServicesPlayAlertSound (1105);
     }
}

7
1352 এর পরিবর্তে কেসিস্টেমসাউন্ডআইডি ভাইব্রেটের মতো ম্যাজিক কনস্ট্যান্টের পরিবর্তে নামকরণ করা এলিয়াসগুলি ব্যবহার করা ভাল I আমি আপনাকে উত্তরটি আপডেট করতে উত্সাহিত করি।
নেলেক্সন

3
আমি এই যাদুটি ব্যবহার করতে সম্মত হব 1352 আদর্শ নয়, তবে ডিভাইসে ভাইব্রেট সুইচ বন্ধ থাকা সত্ত্বেও আমি একটি কম্পনকে বাধ্য করার জন্য অন্য কোনও উপায় খুঁজে পাচ্ছি না। এটি একমাত্র উপায় বলে মনে হচ্ছে।
মার্চশিলিং

4
আমি প্রকাশিত ধ্রুবকগুলি
পেরিয়ে

2
আমি নিশ্চিত করতে পারি যে আইফোনটিতে নীরব মোডটি সক্রিয় করা হলেও আইফোন কম্পন করে। দুর্দান্ত উত্তর!
ভোমাকো

2
অডিও সার্ভিসপ্লেসিস্টেমসাউন্ড (1352) জানুয়ারী 2016 হিসাবে নীরব স্যুইচ অবস্থান নির্বিশেষে আইফোনগুলির জন্য কাজ করে
JustAnotherCoder

26

গুরুত্বপূর্ণ দ্রষ্টব্য: ভবিষ্যত অবমূল্যায়নের সতর্কতা।

এর মতো আইওএস 9.0 , এপিআই জন্য ফাংশন বিবরণ:

AudioServicesPlaySystemSound(inSystemSoundID: SystemSoundID)
AudioServicesPlayAlertSound(inSystemSoundID: SystemSoundID)

নিম্নলিখিত নোট অন্তর্ভুক্ত:

This function will be deprecated in a future release.
Use AudioServicesPlayAlertSoundWithCompletion or  
AudioServicesPlaySystemSoundWithCompletion instead.

সঠিক পথে যাওয়ার জন্য এই দুটি ব্যবহার করতে হবে:

AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate, nil)

অথবা

AudioServicesPlayAlertSoundWithCompletion(kSystemSoundID_Vibrate) {
 //your callback code when the vibration is done (it may not vibrate in iPod, but this callback will be always called)
}

মনে রেখ import AVFoundation


আপনি আমদানির বিবৃতিটি মিস করছেন
জুয়ান বোয়েরো

অডিওটুলবক্স.অডিও সার্ভিসগুলি আমদানি করুন
হুগো আলোনসো

আমি নিজেই এটি করেছি, কেবল এভিফাউন্ডেশন একটির সাথেই।
হুয়ান বোয়েরো

যাইহোক কম্পন সময়কাল সেট করতে?
মাইক্রো

আপনাকে বেশ কয়েকটি কলকে সঙ্কলিত করতে হবে, প্রতিটি নতুন কলের মধ্যে একটি সময়ের ব্যবধান ব্যবহার করতে হবে
হুগো আলোনসো

7

আইফোন //7 প্লাস বা আরও নতুনর জন্য, এই তিনটি হ্যাপটিক প্রতিক্রিয়া এপিআই ব্যবহার করুন।

উপলব্ধ এপিআই

বিজ্ঞপ্তিগুলির জন্য:

let generator = UINotificationFeedbackGenerator()
generator.notificationOccured(style: .error)

আপনার জন্য ডিজাইন করা হয় .error, .successএবং .warning। প্রত্যেকের নিজস্ব স্বতন্ত্র অনুভূতি রয়েছে। দস্তাবেজগুলি
থেকে :

একটি কংক্রিট UIFeedbackGeneratorসাবক্লাস যা সাফল্য, ব্যর্থতা এবং সতর্কবার্তা জানানোর জন্য হ্যাপটিক তৈরি করে।

সাধারণ কম্পনের জন্য:

let generator = UIImpactFeedbackGenerator(style: .medium)
generator.impactOccured()

আপনার জন্য ডিজাইন করা হয় .heavy, .mediumএবং .light। এগুলি "কঠোরতা" এর বিভিন্ন ডিগ্রি সহ সহজ কম্পন। দস্তাবেজগুলি
থেকে :

একটি কংক্রিট UIFeedbackGeneratorসাবক্লাস যা শারীরিক প্রভাবগুলির অনুকরণের জন্য হ্যাপটিক তৈরি করে

যখন ব্যবহারকারী কোনও আইটেম নির্বাচন করেছেন For

let generator = UISelectionFeedbackGenerator()
generator.selectionChanged()

এটি সমস্ত হ্যাপটিকদের মধ্যে সর্বনিম্ন লক্ষণীয় এবং হ্যাপটিকরা যখন অ্যাপটির অভিজ্ঞতা গ্রহণ না করে তখন এটি সবচেয়ে উপযুক্ত। দস্তাবেজগুলি
থেকে :

একটি কংক্রিট UIFeedbackGeneratorসাবক্লাস যা নির্বাচনের পরিবর্তনকে নির্দেশ করতে হ্যাপটিক তৈরি করে।

মন্তব্য

এই এপিআইগুলি ব্যবহার করার সময় বেশ কয়েকটি জিনিস মনে রাখা দরকার।

নোট এ

আপনি আসলে হ্যাপটিক তৈরি করেন না। আপনি সিস্টেমটিকে একটি হ্যাপটিক উত্সাহ করার অনুরোধ করছেন । সিস্টেম নীচের উপর ভিত্তি করে সিদ্ধান্ত নেবে:

  • যদি ডিভাইসে হ্যাপটিক্সগুলি সম্ভব হয় (তবে এটির ক্ষেত্রে কোনও টেপটিক ইঞ্জিন রয়েছে কিনা)
  • অ্যাপ্লিকেশনটি অডিও রেকর্ড করতে পারে কিনা (অযাচিত হস্তক্ষেপ রোধ করতে রেকর্ডিংয়ের সময় হ্যাপটিক্স উত্পন্ন হয় না)
  • হ্যাপটিক্স সিস্টেম সেটিংসে সক্ষম আছে কিনা।

অতএব, সিস্টেমটি সম্ভব না হলে একটি হ্যাপটিকের জন্য আপনার অনুরোধটি নিঃশব্দে উপেক্ষা করবে। যদি এটি কোনও অসমর্থিত ডিভাইসের কারণে হয় তবে আপনি এটি চেষ্টা করতে পারেন:

func haptic() {
    // Get whether the device can generate haptics or not
    // If feedbackSupportLevel is nil, will assign 0
    let feedbackSupportLevel = UIDevice.current.value(forKey: "_feedbackSupportLevel") as? Int ?? 0

    switch feedbackSupportLevel { 
    case 2:
        // 2 means the device has a Taptic Engine
        // Put Taptic Engine code here, using the APIs explained above

    case 1: 
    // 1 means no Taptic Engine, but will support AudioToolbox
    // AudioToolbox code from the myriad of other answers!

    default: // 0
        // No haptic support
        // Do something else, like a beeping noise or LED flash instead of haptics
    }

মন্তব্য সাবস্টিটিউট switch- caseবিবৃতি, এবং এই হ্যাপটিক প্রজন্ম কোড অন্যান্য iOS ডিভাইস থেকে পোর্টেবল হবে। এটি সর্বোচ্চ স্তরের হ্যাপটিক তৈরি করবে will

দ্রষ্টব্য বি

  • হ্যাপটিক্স উত্পন্ন করা একটি হার্ডওয়্যার- লেভেল টাস্কের কারণে, আপনি যখন হ্যাপটিক-জেনারেশন কোডটি কল করেন এবং এটি আসলে ঘটে তখন এর মধ্যে বিলম্ব হতে পারে এই কারণে, ত্যাপটিক ইঞ্জিন এপিআইগুলির সকলের একটি প্রস্তুতিমূলক স্থানে রাখার একটি prepare()পদ্ধতি রয়েছে। আপনার গেমের ওভার উদাহরণ ব্যবহার করে: আপনি হয়ত জানেন যে গেমটি শেষ হতে চলেছে, খুব কম এইচপি ব্যবহারকারীর দ্বারা বা একটি বিপজ্জনক দানব তাদের কাছে রয়েছে।
  • আপনি যদি কয়েক সেকেন্ডের মধ্যে একটি হ্যাপটিক তৈরি না করেন তবে টেপটিক ইঞ্জিন আবার অলস অবস্থায় ফিরে যাবে (ব্যাটারির জীবন বাঁচাতে)


এই ক্ষেত্রে, টেপটিক ইঞ্জিন প্রস্তুত করা একটি উচ্চ মানের, আরও প্রতিক্রিয়াশীল অভিজ্ঞতা তৈরি করবে।

উদাহরণস্বরূপ, আসুন ধরা যাক আপনার অ্যাপ্লিকেশনটি দৃশ্যমান বিশ্বের অংশটি পরিবর্তন করতে একটি প্যান অঙ্গভঙ্গি সনাক্তকারী ব্যবহার করে। ব্যবহারকারী যখন 360 ডিগ্রি গোল করে দেখায় আপনি একটি হ্যাপটিক তৈরি করতে চান। আপনি কীভাবে এটি ব্যবহার করতে পারেন তা এখানে prepare():

@IBAction func userChangedViewablePortionOfWorld(_ gesture: UIPanGestureRecogniser!) {

    haptic = UIImpactFeedbackGenerator(style: .heavy)

    switch gesture.state {
        case .began:
            // The user started dragging the screen.
            haptic.prepare()

        case .changed:
            // The user trying to 'look' in another direction
            // Code to change viewable portion of the virtual world

            if virtualWorldViewpointDegreeMiddle = 360.0 { 
                haptic.impactOccured()
            }
        
        default:
            break

} 

শুধু মনে আছে import UIKit!
বেনজ

আপনি hapticএই পদ্ধতির ভিতরে কোনও নতুন উদাহরণ তৈরি করতে চান না । আপনি impactOccuredযে কলটি করেছেন তেমন কল করছেন না prepare
rmaddy

5

এবং আপনি যদি জামারিন (মনোোটুচ) কাঠামো ব্যবহার করছেন তবে কেবল কল করুন

SystemSound.Vibrate.PlayAlertSound()

5

আমার ভ্রমণগুলিতে আমি দেখতে পেয়েছি যে আপনি অডিও রেকর্ড করার সময় আপনি নিম্নলিখিতগুলির মধ্যে দুটি চেষ্টা করলে ডিভাইসটি সক্ষম থাকলেও স্পন্দিত হবে না।

1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

ডিভাইসগুলির গতিবিধি পরিমাপের জন্য একটি নির্দিষ্ট সময়ে আমার পদ্ধতিটি ডাকা হয়েছিল। আমাকে রেকর্ডিং বন্ধ করতে হয়েছিল এবং তারপরে কম্পনটি হওয়ার পরে এটি পুনরায় চালু করতে হয়েছিল।

দেখে মনে হচ্ছিল।

-(void)vibrate {
    [recorder stop];
    AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
    [recorder start];
}

recorder এটি একটি AVRecorder উদাহরণ।

আশা করি এটি অন্যদেরও আগে যেমন একই সমস্যা ছিল তাদের সহায়তা করে।


4

আইওএস 10 এবং নতুন আইফোনে আপনি হ্যাপটিক এপিআইও ব্যবহার করতে পারেন। এই হ্যাপটিক প্রতিক্রিয়াটি অডিওটুলবক্স এপিআইয়ের চেয়ে নরম।

আপনার গেম ওভারের দৃশ্যের জন্য, ভারী ইউআই প্রভাবের প্রতিক্রিয়া উপযুক্ত হওয়া উচিত।

UIImpactFeedbackGenerator(style: .heavy).impactOccurred()

আপনি অন্যান্য হ্যাপটিক প্রতিক্রিয়া শৈলী ব্যবহার করতে পারেন ।


1

সুইফটে:

import AVFoundation
...
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))

0

আমার ক্ষেত্রে আমি AVCaptureSession ব্যবহার করছিলাম। অডিওটুলবক্স প্রকল্পের বিল্ড পর্যায়গুলিতে ছিল এবং এটি আমদানি করা হয়েছিল তবে এখনও কার্যকর হয়নি। এটি কাজ করার জন্য আমি স্পনার আগে সেশনটি বন্ধ করে দিয়েছিলাম এবং তার পরেও চালিয়ে যাই।

#import <AudioToolbox/AudioToolbox.h>
...
@property (nonatomic) AVCaptureSession *session;
...
- (void)vibratePhone;
{
  [self.session stopRunning];
     NSLog(@"vibratePhone %@",@"here");
    if([[UIDevice currentDevice].model isEqualToString:@"iPhone"])
    {
        AudioServicesPlaySystemSound (kSystemSoundID_Vibrate); 
    }
    else
    {
        AudioServicesPlayAlertSound (kSystemSoundID_Vibrate);
    }
  [self.session startRunning];
}

-5

তুমি ব্যবহার করতে পার

1) অডিও সার্ভিসপ্লে অ্যালার্টসাউন্ড (কেসিস্টেমসাউন্ডআইডি_ভাইবারেট);

আইফোন এবং কয়েকটি নতুন আইপডের জন্য।

2) অডিও সার্ভিসপ্লেসিস্টেমসাউন্ড (কেসিস্টেমসাউন্ডআইডি_ভাইবারেট);

আইপ্যাডের জন্য


3
আইপড স্পর্শ এবং আইপ্যাডগুলি কম্পন করতে পারে না।
DDPWNAGE

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