iOS 7中的一些小修改

小引

大家都知道iOS 7做了很大的调整,当然也有一些轻微的修改,我们来稍微看一下吧。

注:本文译自iOS 7 Additions: OMG Finally!

###目录

  • Message UI Framework(在消息中添加文件)
  • Media Player Framework(MPVolumeView - 检测airplay和当前airplay的route)
  • AVFoundation(条码扫描)
  • 更多

### Message UI Framework(在消息中添加文件)

在iOS 7之前我们可以使用MFMessageComposeViewController来撰写文本消息,但是要想添加文件是不可能做到的,不过在iOS 7中我们可以使用这个方法就能添加文件了:- (BOOL)addAttachmentData:(NSData *)attachmentData typeIdentifier:(NSString *)uti filename:(NSString *)filename;。如下代码示例所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ([MFMessageComposeViewController canSendText] && [MFMessageComposeViewController canSendAttachments] && [MFMessageComposeViewController isSupportedAttachmentUTI:(NSString *)kUTTypePNG]) {
MFMessageComposeViewController *vc = [[MFMessageComposeViewController alloc] init];
vc.messageComposeDelegate = self;
vc.recipients = @[@"Yawkey"];
UIImage *myImage = [UIImage imageNamed:@"Yawkey_business_dog.png"];
BOOL attached = [vc addAttachmentData:UIImagePNGRepresentation(myImage) typeIdentifier:(NSString*)kUTTypePNG filename:@"Yawkey_business_dog.png"];
if (attached) {
NSLog(@"Attached (:");
}
else {
NSLog(@"Not attached ):");
}
[self presentViewController:vc animated:YES completion:nil];
}

### Media Player Framework(MPVolumeView - 检测airplay和当前airplay的route)

MPVolumeView可以帮助我们与AirPlay系统进行交互。不过,一直以来都是很难获得用户选择操作的信息。现在通过新增的两个属性和通知,我们可以更加深入的了解AirPlay系统了。

1
2
@property areWirelessRoutesAvailable;
@property isWirelessRouteActive;

这两个属性可以告诉我们是否有可用的AirPlay,以及是否以及被选中了。下面两个是通知:

1
2
NSString *const MPVolumeViewWirelessRoutesAvailableDidChangeNotification;
NSString *const MPVolumeViewWirelessRouteActiveDidChangeNotification;

通过这两个通知我们可以知道可用AirPlay发生了改变,以及用户修改了当前正在使用的AirPlay route。

###AVFoundation(条码扫描)

AVFoundation中现在已经内置支持一维和二维码的扫描。之前要想在iOS程序中读取条形码和QR码,则需要使用第三方库,例如ZXing和ZBar。在iOS 7中默认支持4中机器条码,需要做的就是将AVCaptureMetadataOutput hook up到AVCaptureSession。另外可以对AVCaptureMetadataOutput进行配置以检测如下这些任意机器可读的条码类型:

1
2
3
4
5
6
7
8
9
10
AVMetadataObjectTypeUPCECode
AVMetadataObjectTypeCode39Code
AVMetadataObjectTypeCode39Mod43Code
AVMetadataObjectTypeEAN13Code
AVMetadataObjectTypeEAN8Code
AVMetadataObjectTypeCode93Code
AVMetadataObjectTypeCode128Code
AVMetadataObjectTypePDF417Code
AVMetadataObjectTypeQRCode
AVMetadataObjectTypeAztecCode

当配置好AVCaptureMetadataOutputObjectsDelegate,就可以响应- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection;检测到的所有条码。

###更多

上面只是列出了少许新内容,你可以通过苹果提供的文档What’s New in iOS 查阅更多相关内容。

注:本文是iOS 7开发者指南中的11篇中的第1篇。你可以在这里看到指南的全部内容。