Обнаружить жест встряхивания IOS Swift
Я разрабатываю приложение с жесткой системой, в основном, если я верну iPhone, чтобы оставить свое приложение, я сделаю функцию, если я верну iPhone вправо, другую функцию, с другими жестами.
У меня нет идеи, как с этим работать, я пытаюсь искать в google, но не работает, результатом является только жест касания, а не жест движения.
У кого-то есть учебник, который поможет мне?
Ответы
Ответ 1
Swift3 ios10:
override func viewDidLoad() {
super.viewDidLoad()
self.becomeFirstResponder() // To get shake gesture
}
// We are willing to become first responder to get shake motion
override var canBecomeFirstResponder: Bool {
get {
return true
}
}
// Enable detection of shake motion
override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
if motion == .motionShake {
print("Why are you shaking me?")
}
}
Ответ 2
Супер легко реализовать:
1) Пусть iOS знает, какой контроллер представлений является первым в цепочке ответчиков:
override func viewDidLoad() {
super.viewDidLoad()
self.becomeFirstResponder()
}
override func canBecomeFirstResponder() -> Bool {
return true
}
2) Обработайте событие определенным образом:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
if(event.subtype == UIEventSubtype.MotionShake) {
print("You shook me, now what")
}
}
Ответ 3
Это было обновлено для IOS 12 - см. Apple Docs. Вам больше не нужно добавлять методcomeFirstResponder().
Вам просто нужно добавить функцию motionEnded в ваш код.
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?)
{
// code here
}
Ответ 4
Swift 5
Просто добавьте следующие методы в ViewController и выполните код
override func becomeFirstResponder() -> Bool {
return true
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?){
if motion == .motionShake {
print("Shake Gesture Detected")
//show some alert here
}
}
Ответ 5
Быстрый ответ Speedy99 в версии Objective C
- (void)viewDidLoad {
[super viewDidLoad];
[self becomeFirstResponder];
}
- (BOOL)canBecomeFirstResponder{
return true;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
if(event.subtype == UIEventSubtypeMotionShake){
NSLog(@"Why are you shaking me?");
}
}
Ответ 6
Swift 5
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.becomeFirstResponder()
}
override var canBecomeFirstResponder: Bool {
get {
return true
}
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
if motion == .motionShake {
print("shake")
}
}
}
Ответ 7
Документы swift: - https://developer.apple.com/documentation/uikit/uiresponder.
Для обнаружения событий движения Swift предусмотрел 3 метода:
-
func motionBegan() → Сообщает получателю, что движение началось
-
func motionEnded() → Сообщает получателю, что событие движения закончилось
- func motionCancelled() → Сообщает получателю, что событие движения было отменено
Например, если вы хотите обновить изображение после встряхивания жестом
class ViewController: UIViewController {
override func motionEnded(_ motion: UIEvent.EventSubtype, with event:
UIEvent?)
{
updateImage()
}
UpdateImage(){
// Implementation
}
}