아이폰 진동시키기
아이폰이 한번 진동하도록 어떻게 설정할 수 있습니까?
예를 들어, 플레이어가 생명을 잃거나 게임이 끝나면 아이폰이 진동해야 합니다.
출처: "iPhone 튜토리얼: iOS 기기의 기능을 확인하는 더 좋은 방법":
유사해 보이는 두 개의 함수가 매개 변수를 사용합니다.kSystemSoundID_Vibrate
:
1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
두 기능 모두 아이폰을 진동시킵니다.하지만 진동을 지원하지 않는 장치에서 첫 번째 기능을 사용하면 삐 소리가 납니다.그러나 두 번째 기능은 지원되지 않는 장치에서는 아무 것도 하지 않습니다.따라서 장치를 지속적으로 진동시키려면 상식적으로 기능 2를 사용합니다.
프레임워크인 AudioToolbox를 합니다.AudioToolbox.framework
목표에 도달할 수 있습니다.
그런 다음 이 헤더 파일을 가져옵니다.
#import <AudioToolbox/AudioServices.h>
스위프트 2.0+
오디오 도구 상자에 도구 상자가 됩니다.kSystemSoundID_Vibrate
SystemSoundID
다음과 같이 입력합니다.
import AudioToolbox.AudioServices
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate)
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
추가 캐스팅 단계를 거쳐야 하는 대신
(@Dov에 대한 제안)
원본 답변(Swift 1.x)
그리고 스위프트에서 하는 방법은 다음과 같습니다(저와 같은 문제에 부딪힐 경우를 대비하여 주십시오.
에 대한 AudioToolbox.framework
단계,,
작업이 완료되면 다음을 수행합니다.
import AudioToolbox.AudioServices
// Use either of these
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
얄미운 것은SystemSoundID
으로 기적으입니다로본▁basically▁is입▁a다.typealias
(스피드 스위프트)typedef
) 잠시 동안UInt32
리고그고.kSystemSoundID_Vibrate
는 정기적인 단입다Int
컴파일러에서 캐스트를 시도할 때 오류가 발생합니다.Int
UInt32
는 " convert to "로됩니다.아이디.ID"는 헷갈립니다.왜 애플은 그냥 스위프트 열거형으로 만들지 않았습니까?
@aponomarenko's는 세부 사항에 대해 설명합니다. 제 대답은 저기 있는 스위퍼들을 위한 것입니다.
간단한 방법은 오디오 서비스를 사용하는 것입니다.
#import <AudioToolbox/AudioToolbox.h>
...
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
진동이 꺼진 장치에 대해서는 큰 어려움을 겪었지만, 애플리케이션 작동에 매우 중요하고 문서화된 메서드 호출의 정수에 불과하기 때문에 검증을 통과해야 합니다.그래서 저는 여기에 잘 문서화된 소리 이외의 소리를 시도해 보았습니다: TURN88/iOSystemSounds Library
후는 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);
}
}
중요 참고:향후 사용 중지에 대한 경고입니다.
iOS 9.0 기준으로 API 기능 설명:
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
iPhone 7/7 Plus 이상 버전의 경우 다음 세 가지 Haptic 피드백 API를 사용합니다.
사용 가능한 API
알림의 경우:
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
선택 항목의 변경을 나타내는 햅틱을 만드는 하위 클래스입니다.
메모들
이러한 API를 사용할 때 기억할 가치가 있는 몇 가지가 있습니다.
노트 A
실제로 햅틱을 만들지 않습니다.시스템에서 햅틱 생성을 요청합니다.시스템은 다음을 기준으로 결정합니다.
- 장치에서 햅틱이 가능한 경우(이 경우 Taptic Engine이 있는지 여부)
- 앱이 오디오를 녹음할 수 있는지 여부(원하지 않는 간섭을 방지하기 위해 녹음 중에 햅틱이 생성되지 않음)
- 시스템 설정에서 햅틱을 활성화할지 여부입니다.
따라서 햅틱이 불가능한 경우 시스템은 사용자의 햅틱 요청을 자동으로 무시합니다.이 문제가 지원되지 않는 장치 때문인 경우 다음을 시도할 수 있습니다.
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 기기로 이동할 수 있습니다.가능한 최고 수준의 햅틱을 생성합니다.
비고 B
- 햅틱 생성은 하드웨어 수준의 작업이기 때문에 햅틱 생성 코드를 호출할 때와 실제로 발생할 때 사이에 지연 시간이 있을 수 있습니다.이러한 이유로 Taptic Engine API는 모두 다음과 같은 기능을 가지고 있습니다.
prepare()
준비된 상태로 두는 방법.곧 을 알 수 .당신은 사용자가 HP가 매우 낮거나 위험한 몬스터가 근처에 있으면 게임이 곧 끝날 것이라는 것을 알 수 있습니다. - 몇 초 이내에 햅틱을 생성하지 않으면 배터리 수명을 절약하기 위해 Taptic 엔진이 공회전 상태로 돌아갑니다.
이 경우 Taptic Engine을 준비하면 더 높은 품질과 반응성을 경험할 수 있습니다.
예를 들어, 앱이 팬 제스처 인식기를 사용하여 표시되는 세계 부분을 변경한다고 가정해 보겠습니다.사용자가 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
}
그리고 만약 당신이 Xamarin (monotouch) 프레임워크를 사용하고 있다면, 간단히 전화하세요.
SystemSound.Vibrate.PlayAlertSound()
여행 중에 오디오를 녹음하는 동안 다음 중 하나를 시도하면 장치가 활성화되더라도 장치가 진동하지 않습니다.
1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
2) AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
내 방법은 장치 움직임 측정에서 특정 시간에 호출되었습니다.저는 진동이 발생한 후 녹음을 중단하고 다시 시작해야 했습니다.
이렇게 생겼어요.
-(void)vibrate {
[recorder stop];
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
[recorder start];
}
recorder
AVR 레코더 인스턴스입니다.
이것이 이전에 같은 문제를 겪은 다른 사람들에게 도움이 되기를 바랍니다.
iOS 10과 최신 아이폰에서도 햅틱 API를 사용할 수 있습니다.이 햅틱 피드백은 AudioToolbox API보다 부드럽습니다.
GAME OVER 시나리오의 경우 무거운 UI 영향 피드백이 적합해야 합니다.
UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
다른 햅틱 피드백 스타일을 사용할 수 있습니다.
Swift에서:
import AVFoundation
...
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
제 경우에는 AV Capture Session을 사용했습니다.AudioToolbox가 프로젝트 빌드 단계에 있으며 가져왔지만 작동하지 않았습니다.저는 그것을 작동시키기 위해 진동 전에 세션을 중단하고 그 이후로 계속했습니다.
#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];
}
사용할 수 있습니다.
오디오 서비스경고음 재생(kSystemSound)ID_진동);
iPhone 및 몇 개의 최신 iPod용입니다.
오디오 서비스재생시스템사운드(k시스템사운드)ID_진동);
iPad용.
언급URL : https://stackoverflow.com/questions/4724980/making-the-iphone-vibrate
'source' 카테고리의 다른 글
이중 따옴표를 포함하는 데이터를 문자열 변수에 넣는 방법은 무엇입니까? (0) | 2023.05.27 |
---|---|
이클립스의 자동 정렬 바로 가기 키란? (0) | 2023.05.27 |
OS X Bash, 'watch' 명령 (0) | 2023.05.27 |
지정된 디렉토리에 npm을 설치하는 방법은 무엇입니까? (0) | 2023.05.27 |
markForCheck()와 detectChanges()의 차이점은 무엇입니까? (0) | 2023.05.27 |