zoukankan      html  css  js  c++  java
  • FirstApp,iphone开发学习总结7,相机

    首先需要一个Nav,在FirstAppAppDelegate.m里添加:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        //...
        ImageViewController *imgTab = [[ImageViewController alloc] init];
        UINavigationController *navImg = [[UINavigationController alloc] initWithRootViewController:imgTab];//添加
        
        NSArray *tabArray = [[NSArray alloc] initWithObjects:navImg, tableTab, btnTab, textTab, navigation, nil];//修改
        [navImg release];//添加
        //...
    }

    进入ImageViewController.h文件,添加委托,并创建imageView变量:

    @interface ImageViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>{
        UIImageView *imageView;
    }//UIImagePickerControllerDelegate继承至UINavigationControllerDelegate

    ImageViewController.m的- viewDidLoad略做修改,并添加相机按钮://直接使用UIBarButtonSystemItemCamera了

    - (void)viewDidLoad
    {
        imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50.050.048.048.0)];
        imageView.image = [UIImage imageNamed:@"China.gif"];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        [self.view addSubview:imageView];
        [imageView release];
            
        UIBarButtonItem *imgRightBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(openCamera:)];
        [[self navigationItem] setRightBarButtonItem:imgRightBtn];
    }

    实现按钮事件:

    - (void)openCamera:(id)sender
    {
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];//initWithRootViewController:
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
            [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
        }else {
            [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
        }
        [imagePicker setDelegate:self];
        [self presentModalViewController:imagePicker animated:YES];
        [imagePicker release];
    }

     此处代码:

         isSourceTypeAvailable判定此设备是否支持相机,不然从图片目录获取图片。

         UIImagePickerController实例以模态展示,需要presentModalViewController它。

         souceType分别代表:Camera(打开相机),PhotoLibrary(打开相册),SavedPhotoAlbums(最近拍摄)

    图片选择完成,则触发委托事件:

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
        [imageView setImage:image];
        
        [self dismissModalViewControllerAnimated:YES];
    }

     如果关闭了界面,则取消操作,触发:

    imagePickerControllerDidCancel:

    可以工作了,此处的一个问题就是当拍摄图片过大,内存警告回收资源,图片则不会显示。通过保存图片等操作解决,后面说。

    求指点!

  • 相关阅读:
    review01
    在win+r中常用的命令
    shutdown命令
    XML解析,出现ClassCastException 原因
    XML解析,出现ClassCastException 原因
    韩顺平循序渐进学JAVA从入门到精通 视频全套,需要的联系我
    韩顺平循序渐进学JAVA从入门到精通 视频全套,需要的联系我
    线程池,以后有时间看
    线程池,以后有时间看
    利用线程分离发送和接受,这样每个客服端都可以分离
  • 原文地址:https://www.cnblogs.com/maxfong/p/2482847.html
Copyright © 2011-2022 走看看