相机

UIImageView对象会根据其contentMode属性显示一张指定的图片。contentMode属性的作用是确定图片在frame内的显示位置和缩放模式。contentMode的默认值是UIViewContentModeScaleToFill。当contentMode的值是UIViewContentModeScaleToFill时,UIImageView对象会在显示图片时缩放图片的大小,使其能够填满整个视图空间,但是可能会改变图片的宽高比。如果使用其默认值,UIImageView对象为了能在正方形的区域中显示由相机拍摄的大尺寸照片,就要改变照片的宽高比。为了获得最佳显示效果,要修改UIImageView对象的contentMode,要求其根据宽高比缩小照片。

在AspectFit模式下,UIImageView对象会在显示图片时按宽高比缩放图片,使其能够填满整个视图。

相机按钮,使用UIToolBar,使用camera图标。UIToolbar对象的工作方式和UINavigationBar非常相似,同样可以加入UIBarButtonItem对象。区别是UINavigationBar只能在左右两端分别放置一个UIBarButtonItem对象,而UIToolbar对象可以有一组UIBarButtonItem对象。只要屏幕能够容纳,UIToolbar对象自身并没有限制可以存放的UIBarButtonItem对象个数。

设置sourceType属性时必须使用特定的常量,这些常量表示UIImagePickerController对象获取照片的“源”。目前有以下三种可以使用的常量。  
1•UIImagePickerControllerSourceTypeCamera:用于用户拍摄一张新照片。  
2•UIImagePickerControllerSourceTypePhotoLibrary:用于显示界面,让用户选择相册,然后从选中的相册中选择一张照片。  3•UIImagePickerControllerSourceTypeSavedPhotosAlbum:用于让用户从最近拍摄的照片里选择一张照片。
对于没有相机的设备,第一种选取类型      
  UIImagePickerControllerSourceTypeCamera是无效的。所以在使用第一种变量前,需要向UIImagePickerController类发送isSourceTypeAvailable:消息,检查设备是否支持相机。发送该消息时,需要传入待检查的选取类型常量。
  除了sourceType属性,还需要为UIImagePickerController对象设置委托,也就是delegate属性。当用户从UIImagePickerController对象中选择了一张照片后,委托会收到imagePickerController:didFinishPickingMediaWithInfo:消息(如果用户取消了选择,则委托会收到imagePickerControllerDidCancel:消息)  
  UIImagePickerController对象的委托通常应该设置为需要获取照片的对象(UIImagePickerController是UINavigationController的子类,所以UIImagePickerController的委托也要遵守UINavigationControllerDelegate协议)

模态的形式

为UIImagePickerController对象设置了源类型和委托之后,就可以在屏幕中显示该对象。和之前显示的UIViewController子类对象不同,该对象必须以模态的(modal)形式显示。以模态的形式显示的视图控制器,其视图会占据整个屏幕,直到关闭。  
要以模态的形式显示某个视图控制器,需要向窗口当前显示的UIViewController对象发送presentViewController:animated:completion:,并为第一个参数传入需要显示的视图控制器。同时,如果为第二个参数animated:传入YES,相应的视图控制器的视图会从屏幕底部滑入(第17章会深入介绍模态视图控制器与第三个参数)。

保存照片

在BNRDetailViewController.m中实现imagePickerController:didFinishPickingMediaWithInfo:,将选择的照片放入之前创建的UIImageView对象中,然后关闭UIImagePickerController对象

NSDictionary

字典对象中的指针不是有序排列的,需要通过键(key)来存取指针,不能使用索引。键其实也是对象,而且最常用的是NSString对象。在其他语言中,这里的字典对象称为哈希图(hashmap)或哈希表(hashtable)。
  NSDictionary非常有用,其中最常见的用法是可变数据结构(flexible datastructures)和 查询表(lookup tables)。

可变数据结构

使用NSDictionary与NSObject子类Person的区别是,Person要求事先明确定义好“人”的各项属性,并且之后无法添加新的属性,也无法删除或修改现有属性。相反,如果使用NSDictionary,“人”的数据就只是一系列键值对,操作起来非常简单,例如,为某个人添加“地址”时,只需要为@“address”键设置表示地址的字符串就可以了。
  当然,并不是所有的模型对象都可以通过NSDictionary来描述。大部分模型对象具有严格的定义和特定的数据处理方式,不适合采用简单的键值对管理数据。相反,如果模型对象根据不同的配置选项具有不同的数据结构,就应该使用NSDictionary。

查询表

当读者需要编写包含大量ifelse或switch语句的代码时,通常应该考虑替换为NSDictionary。NSDictionary可以事先在两组对象之间建立一对一的映射关系。例如,上述代码中的ifelse语句可以替换为一个NSDictionary对象:

//使用NSDictionary查询表的另一个优点:不需要在方法中硬编码所有数据(角色类型);
//相反,可以将数据保存在文件系统或远程服务器中,甚至可以由用户动态添加或修改。
 NSMutableDictionary*lookup=[[NSMutableDictionaryalloc]init];   
 [lookupsetObject:knightforKey:@“Warrior”]; 
 [lookupsetObject:wizardforKey:@“Mage”];
 [lookupsetObject:rogueforKey:@“Thief”];
(void) changeCharacterClass:(id)sender  
{  
      character.characterClass=[lookupobjectForKey:textField.text];  
}

使用字典对象时,键不能重复。在将某个键值对加入字典对象时,如果字典对象已经保存了拥有相同的键的值,那么旧的值会被替换掉。如果要用一个键来保存多个对象,则可以先将这些对象存入数组对象,然后将这个数组对象作为值存入字典对象。
NSArray的简洁语法并注意与NSDictionary的区别:NSArray是通过“@[]”创建的,NSDictionary则是通过“@{}”创建的。

//使用简洁语法创建NSDictionary对象时,
//每一个键值对之间需要使用逗号“,”隔开,而键与值之间则使用冒号“:”隔开
  NSDictionary*dictionary=@{@“key”:object,@“anotherKey”:anotherObject};

键与唯一标识

用CocoaTouch提供的一种机制,这种机制可以生成唯一标识(UUID,也称为GUID)。每一个NSUUID类的对象都表示一个唯一的UUID。UUID是基于当前时间、计数器(counter)和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的。如果使用字符串表示UUID

 //创建一个NSUUID对象,然后获取其NSString类型的值  
NSUUID*uuid=[[NSUUIDalloc]init];  
NSString*key=[uuidUUIDString]; 
 _itemKey=key;

实现委托方法textFieldShouldReturn:,使用户能通过按下“换行”键来取消UITextField对象的第一响应状态而关闭键盘。

如何在用户按下视图时发送指定的消息。

Controller对象的视图从UIView对象改为UIControl对象,使其能够处理触摸事件。选中xib中的顶层视图。打开标识检视面板,将Class文本框中的UIView修改为UIControl。
因为UIControl能够处理多种类型的事件,所以必须为要触发的动作消息设置合适的事件类型。

摄像没看

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容