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

#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>

@interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate,MFMessageComposeViewControllerDelegate,MFMailComposeViewControllerDelegate,UIAccelerometerDelegate>//前两个是图片和照相机共用的。
@property (retain, nonatomic) IBOutlet UIImageView *showView;

#pragma mark========photoLibrary=========
//图片
- (IBAction)photoLibrary:(id)sender {
    //判断相册是否可以用。
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        //创建图片选取控制器。
        UIImagePickerController *imagePicker=[[UIImagePickerController alloc]init];
        imagePicker.delegate=self;//给图片选取器设置代理。
        imagePicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//设置源类型位相册。
        [self presentViewController:imagePicker animated:YES completion:^{
            UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"您好" message:@"欢迎光临" delegate:self cancelButtonTitle:@"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:YES completion:^{
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"您好" message:@"欢迎下次再来" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }];
   
}

#pragma mark========camera=========
//照相机.
- (IBAction)camera:(id)sender {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        //创建图片选取控制器。
        UIImagePickerController *cameraPicker=[[UIImagePickerController alloc]init];
        cameraPicker.delegate=self;//给图片选取器设置代理。
        cameraPicker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置源类型位相册。
        [self presentViewController:cameraPicker animated:YES completion:^{
            UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"您好" message:@"欢迎光临" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
            [alert release];
        }];//显示该视图控制器。
        [cameraPicker release];
    }
    else{
        NSLog(@"当前相册无法使用。");
    }
   
   
}
#pragma mark========accelerometer=========
//加速计、
- (IBAction)accelerometer:(id)sender {//不用导入新的框架,内置了一个功能简单的。
    //创建加速计对象。
    UIAccelerometer *acceler=[UIAccelerometer sharedAccelerometer];
    //设置传感器的更新数据的时间。
    [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=[NSURL URLWithString:[NSString stringWithFormat:@"sms:13269991562"]];//这里是指定的电话号码,用的时候可以用%@和传来的形参代替。
    if ([[UIApplication sharedApplication]canOpenURL:url]) {
        [[UIApplication sharedApplication]openURL:url];
    }
    else{
        NSLog(@"设备不支持短信。");
    }
   
   
}
#pragma mark========inSMS=========
- (IBAction)inSMS:(id)sender {
    if ([MFMessageComposeViewController canSendText]) {//是否可以发短信。
        //创建短信发送控制器。
        MFMessageComposeViewController *compose=[[MFMessageComposeViewController alloc]init];
        compose.messageComposeDelegate=self;//消息写代理。
        //设置消息内容。
        compose.body=@"设置消息内容";
        //设置电话。
        compose.recipients=[NSArray arrayWithObjects:@"13269991562", nil];
        //打开发送界面。
        [self presentModalViewController:compose animated:YES];
        [compose release];
    }
    else{
        NSLog(@"不支持外部短信功能");
    }
   
}
//短信发送结束的代理
-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
    if (result==MessageComposeResultSent) {
        NSLog(@"消息发送成功。");
    }
    else if(result==MessageComposeResultFailed){
        NSLog(@"消息发送失败");
    }
    [self dismissModalViewControllerAnimated:YES];
}

#pragma mark========outEmail=========
- (IBAction)outEmail:(id)sender {
    NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"mailto:%@?cc=%@&subject=%@&body=%@",@"[email protected]",@"[email protected]",@"test",@"ceshi"]];//mailto协议,cc后面是抄送。他们都是收件人
    if ([[UIApplication sharedApplication]canOpenURL:url]) {
        [[UIApplication sharedApplication]openURL:url];
    }
    else{
        NSLog(@"设备不支持短信。");
    }

   
}
#pragma mark========inEmail=========
- (IBAction)inEmail:(id)sender {
    if ([MFMailComposeViewController canSendMail]) {//是否可以发邮件。
        //创建邮件发送控制器。
        MFMailComposeViewController *compose=[[MFMailComposeViewController alloc]init];
        compose.mailComposeDelegate=self;//消息写代理。
        //设置邮件标题。
        [compose setSubject:@"test"];
        //设置邮件内容。
        [compose setMessageBody:@"hello" isHTML:YES];
        //设置邮件发送的对象。
        [compose setToRecipients:[NSArray arrayWithObjects:@"[email protected]", nil]];
        //设置邮件抄送对象。
        [compose setCcRecipients:[NSArray arrayWithObjects:@"[email protected]", nil]];
        //显示邮件视图控制器。
        [self presentModalViewController:compose animated:YES];
        [compose release];
    }
    else{
        NSLog(@"不支持外部短信功能");
    } 
}
//邮件结束时的代理。
-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{
    if (result==MFMailComposeResultSent) {
        NSLog(@"成功了");
    }
    else if(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中是以结构体形式定义的

typedef struct {
    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

你可能感兴趣的:(ios,Objective-C)