ios真机短信,email,加速计。课程收官之作

ios真机短信,email,加速计。课程收官之作ios真机短信,email,加速计。课程收官之作

#import <UIKit/UIKit.h>

#import <MessageUI/MessageUI.h>

@interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,MFMessageComposeViewControllerDelegate,MFMailComposeViewControllerDelegate,UIAccelerometerDelegate>//前两个是图片和照相机共用的。

@property (retain, nonatomic) IBOutletUIImageView *showView;


#pragma mark========photoLibrary=========

//图片

- (IBAction)photoLibrary:(id)sender {

//判断相册是否可以用。

if ([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

//创建图片选取控制器。

UIImagePickerController *imagePicker=[[UIImagePickerControlleralloc]init];

imagePicker.delegate=self;//给图片选取器设置代理。

imagePicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//设置源类型位相册。

[selfpresentViewController:imagePicker animated:YEScompletion:^{

UIAlertView *alert=[[UIAlertViewalloc]initWithTitle:@"您好"message:@"欢迎光临" delegate:selfcancelButtonTitle:@"OK"otherButtonTitles:nil, nil];

[alert show];

[alert release];

}];//显示该视图控制器。

[imagePicker release];

}

else{

NSLog(@"当前相册无法使用。");

}

}

//当我们选中图片的时候进入的代理//其实这里图片,照相机共用一个代理

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];

self.showView.image=image;

// [self dismissModalViewControllerAnimated:YES];

// Dismiss the current modal child. Uses a vertical sheet transition if animated. This method has been replaced by dismissViewControllerAnimated:completion:

// // It will be DEPRECATED, plan accordingly.

[picker dismissViewControllerAnimated:YEScompletion:^{

UIAlertView *alert=[[UIAlertViewalloc]initWithTitle:@"您好"message:@"欢迎下次再来" delegate:selfcancelButtonTitle:@"OK"otherButtonTitles:nil, nil];

[alert show];

[alert release];

}];

}

#pragma mark========camera=========

//照相机.

- (IBAction)camera:(id)sender {

if ([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

//创建图片选取控制器。

UIImagePickerController *cameraPicker=[[UIImagePickerControlleralloc]init];

cameraPicker.delegate=self;//给图片选取器设置代理。

cameraPicker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置源类型位相册。

[selfpresentViewController:cameraPicker animated:YEScompletion:^{

UIAlertView *alert=[[UIAlertViewalloc]initWithTitle:@"您好"message:@"欢迎光临" delegate:selfcancelButtonTitle:@"OK"otherButtonTitles:nil, nil];

[alert show];

[alert release];

}];//显示该视图控制器。

[cameraPicker release];

}

else{

NSLog(@"当前相册无法使用。");

}

}

#pragma mark========accelerometer=========

//加速计、

- (IBAction)accelerometer:(id)sender {//不用导入新的框架,内置了一个功能简单的。

//创建加速计对象。

UIAccelerometer *acceler=[UIAccelerometersharedAccelerometer];

//设置传感器的更新数据的时间。

[acceler setUpdateInterval:0.1];//不太精准、

//设置代理。

acceler.delegate=self;

}

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{

NSLog(@"acceleration.x===%f,,,acceleration.y===%f,,,acceleration.z===%f,,",acceleration.x,acceleration.y,acceleration.z );

}

#pragma mark========outSMS=========

//外部短信:就是接短信时候推出程序。

- (IBAction)outSMS:(id)sender {

NSURL *url=[NSURLURLWithString:[NSStringstringWithFormat:@"sms:13269991562"]];//这里是指定的电话号码,用的时候可以用%@和传来的形参代替。

if ([[UIApplicationsharedApplication]canOpenURL:url]) {

[[UIApplicationsharedApplication]openURL:url];

}

else{

NSLog(@"设备不支持短信。");

}

}

#pragma mark========inSMS=========

- (IBAction)inSMS:(id)sender {

if ([MFMessageComposeViewControllercanSendText]) {//是否可以发短信。

//创建短信发送控制器。

MFMessageComposeViewController *compose=[[MFMessageComposeViewControlleralloc]init];

compose.messageComposeDelegate=self;//消息写代理。

//设置消息内容。

compose.body=@"设置消息内容";

//设置电话。

compose.recipients=[NSArray arrayWithObjects:@"13269991562", nil];

//打开发送界面。

[selfpresentModalViewController:compose animated:YES];

[compose release];

}

else{

NSLog(@"不支持外部短信功能");

}

}

//短信发送结束的代理

-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{

if (result==MessageComposeResultSent) {

NSLog(@"消息发送成功。");

}

elseif(result==MessageComposeResultFailed){

NSLog(@"消息发送失败");

}

[selfdismissModalViewControllerAnimated:YES];

}

#pragma mark========outEmail=========

- (IBAction)outEmail:(id)sender {

NSURL *url=[NSURLURLWithString:[NSStringstringWithFormat:@"mailto:%@?cc=%@&subject=%@&body=%@",@"[email protected]",@"[email protected]",@"test",@"ceshi"]];//mailto协议,cc后面是抄送。他们都是收件人

if ([[UIApplicationsharedApplication]canOpenURL:url]) {

[[UIApplicationsharedApplication]openURL:url];

}

else{

NSLog(@"设备不支持短信。");

}

}

#pragma mark========inEmail=========

- (IBAction)inEmail:(id)sender {

if ([MFMailComposeViewControllercanSendMail]) {//是否可以发邮件。

//创建邮件发送控制器。

MFMailComposeViewController *compose=[[MFMailComposeViewControlleralloc]init];

compose.mailComposeDelegate=self;//消息写代理。

//设置邮件标题。

[compose setSubject:@"test"];

//设置邮件内容。

[compose setMessageBody:@"hello" isHTML:YES];

//设置邮件发送的对象。

[compose setToRecipients:[NSArrayarrayWithObjects:@"[email protected]", nil]];

//设置邮件抄送对象。

[compose setCcRecipients:[NSArrayarrayWithObjects:@"[email protected]", nil]];

//显示邮件视图控制器。

[selfpresentModalViewController:compose animated:YES];

[compose release];

}

else{

NSLog(@"不支持外部短信功能");

}

}

//邮件结束时的代理。

-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{

if (result==MFMailComposeResultSent) {

NSLog(@"成功了");

}

elseif(result==MFMailComposeResultFailed){

NSLog(@"失败了");

}

//收起视图控制器。

[controller dismissModalViewControllerAnimated:YES];

}

#if 0

http://www.cocoachina.com/iphonedev/sdk/2010/0811/1996.html

Core Motion的大体介绍就是这些。下面说说Core Motion具体负责的采集,计算和处理。Core Motion的使用就是一三部曲:初始化,获取数据,处理后事。

在初始化阶段,不管你要获取的是什么数据,首先需要做的就是

motionManager = [[CMMotionManager alloc] init];

所有的操作都会由这个manager接管。后面的初始化操作相当直观,以加速度的pull方式为例

if (!motionManager.accelerometerAvailable) {

// fail code // 检查传感器到底在设备上是否可用

}

motionManager.accelerometerUpdateInterval = 0.01; // 告诉manager,更新频率是100Hz

[motionManager startAccelerometerUpdates]; // 开始更新,后台线程开始运行。这是pull方式。

如果是push方式,更新的代码可以写成这样

[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *latestAcc, NSError *error)

{

// Your code here

}];

接下来就是获取数据了。Again,很简单的代码

CMAccelerometerData *newestAccel = motionManager.accelerometerData;

filteredAcceleration[0] = newestAccel.acceleration.x;

filteredAcceleration[1] = newestAccel.acceleration.y;

filteredAcceleration[2] = newestAccel.acceleration.z;

通过定义的CMAccelerometerData变量,获取CMAcceleration信息。和以前的UIAccelerometer类的使用方式一样,CMAcceleration在Core Motion中是以结构体形式定义的

typedefstruct {

double x;

double y;

double z;

}

对应的motion信息,比如加速度或者旋转速度,就可以直接从这三个成员变量中得到。

最后是处理后事,就是在你不需要Core Motion进行处理的时候,释放资源

[motionManager stopAccelerometerUpdates];

//[motionManager stopGyroUpdates];

//[motionManager stopDeviceMotionUpdates];

[motionManager release];

你看,就是这么简单。当然,如果这么Core Motion这么简单,就太无趣了。实际上,Core Motion最好玩的地方,既不是加速度,也不是角速度,而是经过sensor fusing算法处理的Device Motion信息的提供。Core Motion里面提供了一个叫做CMDeviceMotion的类,用来把下图所示的这些数据封装成Device Motion信息:

#endif

相关推荐