উত্তর:
" আইফোন টিউটোরিয়াল: আইওএস ডিভাইসগুলির ক্ষমতা পরীক্ষা করার আরও ভাল উপায় " থেকে:
দুটি আপাতদৃষ্টিতে অনুরূপ ফাংশন রয়েছে যা একটি পরামিতি নেয় kSystemSoundID_Vibrate
:
1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
উভয় ফাংশন আইফোন স্পন্দিত। তবে, আপনি যখন ডিভাইসগুলিতে প্রথম ফাংশন ব্যবহার করেন যা স্পন্দন সমর্থন করে না, এটি একটি বীপ শব্দ বাজায়। অন্যদিকে দ্বিতীয় কার্যটি অসমর্থিত ডিভাইসগুলিতে কিছুই করে না। সুতরাং আপনি যদি সতর্কতা হিসাবে অবিচ্ছিন্নভাবে ডিভাইসটি কম্পন করতে চলেছেন তবে সাধারণ জ্ঞান বলেছেন, ফাংশন 2 ব্যবহার করুন।
প্রথমে AudioToolbox.framework
বিল্ড পর্যায়গুলিতে আপনার টার্গেটে অডিওটুলবক্স ফ্রেমওয়ার্ক যুক্ত করুন ।
তারপরে, এই শিরোলেখ ফাইলটি আমদানি করুন:
#import <AudioToolbox/AudioServices.h>
AudioServicesPlayAlertSound(UInt32(kSystemSoundID_Vibrate))
অডিওটুলবাক্স এখন টাইপ kSystemSoundID_Vibrate
হিসাবে উপস্থাপন করে SystemSoundID
, তাই কোডটি হ'ল:
import AudioToolbox.AudioServices
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
পরিবর্তে অতিরিক্ত castালাই ধাপে যেতে হবে
(@ ডভের কাছে প্রপস)
এবং, আপনি সুইফটে এটি কীভাবে করবেন তা এখানে (যদি আপনি আমার মতোই সমস্যায় পড়েছিলেন)
এর বিপরীতে লিঙ্ক করুন 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 রূপান্তর করা যাবে না"। আপেল কেন এটিকে কেবল একটি সুইফট এনাম বানিয়ে ফেলেনি তা আমার বাইরে।
@ আপোনোমারেঙ্কো বিশদে চলেছেন, আমার উত্তরটি কেবল সুইফটারদের জন্য।
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
এবং এটি সূক্ষ্মভাবে সংকলিত হয়েছে
এটি করার একটি সহজ উপায় হ'ল অডিও পরিষেবাগুলি:
#import <AudioToolbox/AudioToolbox.h>
...
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
এই ডিভাইসগুলির জন্য আমার এতে খুব সমস্যা হয়েছিল যে কোনওভাবে ভাইব্রেশন বন্ধ ছিল, তবে আমাদের এটি নির্বিশেষে কাজ করার দরকার ছিল, কারণ এটি আমাদের অ্যাপ্লিকেশন কার্যকারিতার জন্য গুরুত্বপূর্ণ, এবং যেহেতু এটি একটি ডকুমেন্টেড পদ্ধতি কলের জন্য কেবল একটি পূর্ণসংখ্যা, তাই এটি পাস হবে বৈধতা। সুতরাং আমি এখানে এমন কিছু শব্দের চেষ্টা করেছি যা এখানে ভাল ডকুমেন্টেড এর বাইরে ছিল: 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);
}
}
গুরুত্বপূর্ণ দ্রষ্টব্য: ভবিষ্যত অবমূল্যায়নের সতর্কতা।
এর মতো আইওএস 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 প্লাস বা আরও নতুনর জন্য, এই তিনটি হ্যাপটিক প্রতিক্রিয়া এপিআই ব্যবহার করুন।
let generator = UINotificationFeedbackGenerator()
generator.notificationOccured(style: .error)
আপনার জন্য ডিজাইন করা হয় .error
, .success
এবং .warning
। প্রত্যেকের নিজস্ব স্বতন্ত্র অনুভূতি রয়েছে।
দস্তাবেজগুলি
থেকে :
একটি কংক্রিট
UIFeedbackGenerator
সাবক্লাস যা সাফল্য, ব্যর্থতা এবং সতর্কবার্তা জানানোর জন্য হ্যাপটিক তৈরি করে।
let generator = UIImpactFeedbackGenerator(style: .medium)
generator.impactOccured()
আপনার জন্য ডিজাইন করা হয় .heavy
, .medium
এবং .light
। এগুলি "কঠোরতা" এর বিভিন্ন ডিগ্রি সহ সহজ কম্পন।
দস্তাবেজগুলি
থেকে :
একটি কংক্রিট
UIFeedbackGenerator
সাবক্লাস যা শারীরিক প্রভাবগুলির অনুকরণের জন্য হ্যাপটিক তৈরি করে
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
।
আমার ভ্রমণগুলিতে আমি দেখতে পেয়েছি যে আপনি অডিও রেকর্ড করার সময় আপনি নিম্নলিখিতগুলির মধ্যে দুটি চেষ্টা করলে ডিভাইসটি সক্ষম থাকলেও স্পন্দিত হবে না।
1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
ডিভাইসগুলির গতিবিধি পরিমাপের জন্য একটি নির্দিষ্ট সময়ে আমার পদ্ধতিটি ডাকা হয়েছিল। আমাকে রেকর্ডিং বন্ধ করতে হয়েছিল এবং তারপরে কম্পনটি হওয়ার পরে এটি পুনরায় চালু করতে হয়েছিল।
দেখে মনে হচ্ছিল।
-(void)vibrate {
[recorder stop];
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
[recorder start];
}
recorder
এটি একটি AVRecorder উদাহরণ।
আশা করি এটি অন্যদেরও আগে যেমন একই সমস্যা ছিল তাদের সহায়তা করে।
আইওএস 10 এবং নতুন আইফোনে আপনি হ্যাপটিক এপিআইও ব্যবহার করতে পারেন। এই হ্যাপটিক প্রতিক্রিয়াটি অডিওটুলবক্স এপিআইয়ের চেয়ে নরম।
আপনার গেম ওভারের দৃশ্যের জন্য, ভারী ইউআই প্রভাবের প্রতিক্রিয়া উপযুক্ত হওয়া উচিত।
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
আপনি অন্যান্য হ্যাপটিক প্রতিক্রিয়া শৈলী ব্যবহার করতে পারেন ।
আমার ক্ষেত্রে আমি 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];
}
তুমি ব্যবহার করতে পার
1) অডিও সার্ভিসপ্লে অ্যালার্টসাউন্ড (কেসিস্টেমসাউন্ডআইডি_ভাইবারেট);
আইফোন এবং কয়েকটি নতুন আইপডের জন্য।
2) অডিও সার্ভিসপ্লেসিস্টেমসাউন্ড (কেসিস্টেমসাউন্ডআইডি_ভাইবারেট);
আইপ্যাডের জন্য