iOS 设置束

8.1 应用程序设置概念

8.2 创建设置束

8.3 设置项目种类

8.4 读取设置

 

8.1 应用程序设置概念

应用程序设置(Application Settings):在iOS和Mac OS很多软件中都有使用偏好(preferences),例如,在iOS中我们设置WiFi、运用商和壁纸等等。

wps_clip_image-22225

8.2 创建设置束

创建工程

wps_clip_image-10824

Settings Bundle(设置束)

一个应用程序的使用偏好,是存储在一个Root.list的XML文件中的,在这个文件中是与Settings Bundle关联起来的。可以在Root.list中指定设置项目的类型,可以有常规字段类型、划块、开关和子视图类型等等。

创建一个设置束

wps_clip_image-2213

wps_clip_image-31479

上图中在Resource文件夹下添加设置束文件Settings.bundle(默认名称)。展开Settings.bundle文件夹:

Root.plist图标 是设置属性的属性列表

en.lproj文件夹 是本地化应用程序时使用的

Root.plist的PreferenceSpecifiers节点

wps_clip_image-29875

wps_clip_image-27285wps_clip_image-8222

8.3 设置项目种类

生成的设置束文件设置项目

从上面的运行的应用程序看,我们没有编写任何一行代码系统就已经帮我们创建好一些设置项目了。

wps_clip_image-14500

PSGroupSpecifier

设置项目Type为PSGroupSpecifier用于指示该项目是一个新分组的开始,其后的每个项目都将是此分组的一部分,直到一个Type值为PSGroupSpecifier的项目之前。

在本例子中我们还要设置Title为Group,有多个Group时候Title不能重复。

PSTextFieldSpecifier

设置项目Type为PSTextFieldSpecifier是指示该项目是一个特定的使用偏好字段类型。其它项目的说明:

wps_clip_image-1955

PSToggleSwitchSpecifier

设置项目Type为PSToggleSwitchSpecifier是指示该项目是一个特定的使用偏好开关类型。其它项目的说明:

wps_clip_image-17703

PSSliderSpecifier

设置项目Type为PSSliderSpecifier是指示该项目是一个特定的使用偏好滑块类型。其它项目的说明

wps_clip_image-28803

为滑块添加最大最小值图片

wps_clip_image-22627

Show Package Contents来访问束的内容。这将打开一个新的窗口。将图标文件复制到此文件夹中。这样束就能找到这两个图标文件了。

添加最大最小值图片文件结构

wps_clip_image-25049

具体往束里设置图片:

wps_clip_image-17762

运行结果

wps_clip_image-4470

添加子设置视图

wps_clip_image-9692

添加完子视图,运行程序:

wps_clip_image-10421

8.4 读取设置

读取应用程序中设置

我们使用NSUserDefaults类读取用户设置,通常使用

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

NSUserDefaults获得值方法有:

arrayForKey:  boolForKey:  dataForKey:

dictionaryForKey:  floatForKey:  integerForKey:

objectForKey: stringArrayForKey:  stringForKey:

wps_clip_image-8763

MainViewController.h

wps_clip_image-10475

MainViewController.m

wps_clip_image-22228

FlipsideViewController.h

wps_clip_image-21572

FlipsideViewController.m

wps_clip_image-20077

wps_clip_image-22775

运行

wps_clip_image-7421


下面可以处理设置中触发的相关事件

一.如何设置和获取数据

  1.               NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];  
  2.               NSNumber *defaultCalibrationOffset = [NSNumber numberWithFloat:2.0];  
  3.               //程序注册数据  
  4.               NSDictionary *resourceDict = [NSDictionary dictionaryWithObject:defaultCalibrationOffset forKey:@"BubbleLevelCalibrationOffsetKey"];  
  5. [defaults registerDefaults:resourceDict];  
  6.               //从程序注册的数据中获取数据  
  7.               NSNumber *s2 = [defaults objectForKey:@"BubbleLevelCalibrationOffsetKey"];  
  8.               NSLog(@"%@",s2);  
  9.               //从Setting Application中获取数据  
  10.               BOOL s = [defaults boolForKey:@"play_sounds_preference"];  
  11.               NSLog(@"%@",[NSNumber numberWithBool:s]);  

二.Setting设置

1.创建Setting.bundle

创建关联的plist需要注意的是自己在Finder将Setting.bundle右键,显示包内容,然后自己将Sound.plist拖进去

所有主文件都是Root.plist,详细如下:


Sound.plist


ChildPane就是一个外联的资源,只要名字对应就行了,此外尽量勾选Raw Keys/Values选项,因为这样显示出的参数才比较详尽,否则会出现混淆,比如Key就会对应Identifier,这个就比较晕了,其实所有资源在程序里对应的key,就是在item里定义的Key

注意打勾


三.setting修改完毕后通知程序

有2种通知可以触发回调程序

1.NSUserDefaultsDidChangeNotification

绑定事件

  1. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notifys:) name:NSUserDefaultsDidChangeNotification object:nil];  
触发方法
  1. - (void)notifys:(NSNotification *)notification {    
  2.         NSLog(@"%@",notification);  
  3. }  
该方法只有用户在相对应setting界面修改了数值,才会触发,如果什么都没有修改是不会触发该通知的

2.UIApplicationWillEnterForegroundNotification

绑定事件

  1. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(applicationWillEnterForegrounds:) name:UIApplicationWillEnterForegroundNotification object:nil];  
触发方法
  1. - (void)applicationWillEnterForegrounds:(NSNotification *)notification {    
  2.         NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];  
  3.         //强制保存数据  
  4.         [defaults synchronize];  
  5.         //数据重新获取,并且重新调整界面  
  6.         //⋯⋯  
  7. }  
ps:值得一提的是-(void)synchronize方法可以强制将本次NSUserDefaults数据持久化保存,虽然这个操作相对比较消耗时间,但是对于每次用户操作后保存还是能够接受的。

参考文档

Setting Application Schema Reference

Preferences and Setting Programming Guide


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值