[ios] Swift를 사용하여 iPhone을 진동시키는 방법은 무엇입니까?
iPhone을 진동시켜야하는데 Swift에서 어떻게하는지 모르겠습니다. Objective-C에서는 다음과 같이 작성합니다.
import AudioToolbox
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
그러나 그것은 나를 위해 작동하지 않습니다.
답변
간단한 예 :
import UIKit
import AudioToolbox
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
}
}
휴대 전화에로드하면 진동합니다. 원하는대로 함수 또는 IBAction에 넣을 수 있습니다.
코드 업데이트 :
AudioServicesPlayAlertSoundWithCompletion(SystemSoundID(kSystemSoundID_Vibrate)) { }
Apple 코드 문서가 다음과 같이 작성했습니다.
이 기능은 향후 릴리스에서 더 이상 사용되지 않습니다. 대신 AudioServicesPlaySystemSoundWithCompletion을 사용하세요.
참고 : 진동이 작동하지 않는 경우. 소리 및 햅틱 설정에서 진동이 활성화되어 있는지 확인
답변
iPhone 7 또는 7 Plus의 iOS 10에서 다음을 시도하십시오.
let generator = UIImpactFeedbackGenerator(style: .heavy)
generator.impactOccurred()
답변
기타 진동 유형 :
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/
답변
Swift 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))
}
}
}
답변
들어 아이폰 OS 10.0+ 당신이 시도 할 수 UIFeedbackGenerator을
위의 간단한 viewController, 테스트 “단일보기 앱”에서보기 컨트롤러를 교체하기 만하면됩니다.
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
}
}
}
답변
우리는 Xcode7.1에서 이것을 할 수 있습니다.
import UIKit
import AudioToolbox
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate)
}
}
답변
스위프트 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