iOS通过UISwitch控制摇一摇

 更新时间:2018年06月25日 14:19:27   作者:iMazy  
这篇文章主要为大家详细介绍了iOS通过UISwitch控制摇一摇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

很多项目中用到了摇一摇功能,当我去实现的时候,发现很多问题:

1、如何控制摇一摇功能?即打开和关闭
2、如何在所有控制器中实现摇一摇功能?

摇一摇功能很好实现,但如何控制它,却不那么简单,我找了很多资料,最后决定用NSUserDefaults属性存储来控制摇一摇功能

具体实现细节

我在个人设置里面添加摇一摇开关


1、通过NSUserDefaults属性存储保存UISwitch开关的状态(解决问题一)
在此开关下实现以下代码:

- (IBAction)shakeNavi:(UISwitch *)sender {
 BOOL value = sender.on;
 // 保存UISwitch的开关状态
 [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:value] forKey:@"switch_state"];
 if (value) {
  [[NSUserDefaults standardUserDefaults] setObject:@"shake" forKey:@"isShake"];
  [[NSUserDefaults standardUserDefaults] synchronize];// 同步
 } else {
  [[NSUserDefaults standardUserDefaults] setObject:@"notShake" forKey:@"isShake"];
  [[NSUserDefaults standardUserDefaults] synchronize];// 同步
 }
}

2、我是自定义的UINavigationController,我把摇一摇功能放在这里,因为在UINavigationController下得控制器,都可以实现摇一摇功能(解决问题二)
很多资料都说添加这两行代码,但我没加,摇一摇功能却能实现,不明觉厉

// 设置允许摇一摇功能
[UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;
 //并让自己成为第一响应者
 [self becomeFirstResponder];

#pragma mark - 摇一摇相关方法
// 摇一摇开始摇动
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
 NSString *str = [[NSUserDefaults standardUserDefaults] objectForKey:@"isShake"];

 if ([str isEqualToString:@"shake"]) {
  NSLog(@"开始摇动");
  //播放震动
  AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
 }
 return;
}

// 摇一摇取消摇动
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
 NSLog(@"取消摇动");
 return;
}

// 摇一摇摇动结束
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {

 NSString *str = [[NSUserDefaults standardUserDefaults] objectForKey:@"isShake"];

 if ([str isEqualToString:@"notShake"]) {
  return;
 }
 if (event.subtype == UIEventSubtypeMotionShake) { // 判断是否是摇动结束
  NSLog(@"结束摇动");
  // 在这里执行摇动结束需要执行的方法
 }
 return;
}

总结:如果需要在摇一摇过程中实现震动,需添加:

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • iOS中UIAlertView警告框组件的使用教程

    iOS中UIAlertView警告框组件的使用教程

    需要注意的是在IOS8之后,UIAlertView和UIActionSheet这两个控件被UIAlertController代替,但是这两个控件依然可以使,下面我们就简单了解一下iOS中UIAlertView警告框组件的使用教程
    2016-05-05
  • iOS两丫技术之UILabel性能不够的解决方法

    iOS两丫技术之UILabel性能不够的解决方法

    这篇文章主要介绍了iOS中控件UILabel性能不够而自定义UILabel的过程,UILable是iPhone界面最基本的控件,主要用来显示文本信息,下面通过本文我们来了解一下
    2022-08-08
  • 详解iOS中多个网络请求的同步问题总结

    详解iOS中多个网络请求的同步问题总结

    这篇文章主要介绍了详解iOS中多个网络请求的同步问题总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • iOS xcconfig编写示例教程

    iOS xcconfig编写示例教程

    这篇文章主要为大家介绍了iOS xcconfig编写示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • iOS点击查看大图的动画效果

    iOS点击查看大图的动画效果

    这篇文章主要为大家详细介绍了iOS点击查看大图的动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • iOS中 UIImage根据屏宽调整size的实例代码

    iOS中 UIImage根据屏宽调整size的实例代码

    最近做项目遇到这样一个需求,要求UIImage根据屏幕宽度按照自己本身比例改变高度,下面通过本文给大家分享iOS UIImage根据屏宽调整size的实例代码,需要的朋友参考下吧
    2017-01-01
  • iOS中程序异常Crash友好化处理详解

    iOS中程序异常Crash友好化处理详解

    在iOS开发调试过程中以及上线之后,程序经常会出现崩溃的问题,下面这篇文章主要给大家介绍了关于iOS中程序异常Crash友好化处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • iOS中关于Swift UICollectionView横向分页的问题

    iOS中关于Swift UICollectionView横向分页的问题

    这篇文章通过图文并茂的形式给大家介绍UICollectionView横向分页的问题,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-05-05
  • 详解iOS多线程GCD的使用

    详解iOS多线程GCD的使用

    Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,本文给大家详细介绍IOS中GCD的使用,需要的朋友参考下
    2016-03-03
  • 使用Swift代码实现iOS手势解锁、指纹解锁实例详解

    使用Swift代码实现iOS手势解锁、指纹解锁实例详解

    这篇文章主要介绍了使用Swift代码实现iOS手势解锁、指纹解锁的实现过程,非常不错具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-06-06

最新评论