<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iPhoneGeek 爱疯极客 &#187; UIImagePckerController</title>
	<atom:link href="http://www.iphone-geek.cn/tag/uiimagepckercontroller/feed" rel="self" type="application/rss+xml" />
	<link>http://www.iphone-geek.cn</link>
	<description>iPhone 新闻，编程，技巧与提示，代码，教程</description>
	<lastBuildDate>Thu, 08 Dec 2011 01:18:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>使用UIImagePickerController从iPhone照片库或照相机获取图像</title>
		<link>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bd%bf%e7%94%a8uiimagepickercontroller%e4%bb%8eiphone%e7%85%a7%e7%89%87%e5%ba%93%e6%88%96%e7%85%a7%e7%9b%b8%e6%9c%ba%e8%8e%b7%e5%8f%96%e5%9b%be%e5%83%8f</link>
		<comments>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bd%bf%e7%94%a8uiimagepickercontroller%e4%bb%8eiphone%e7%85%a7%e7%89%87%e5%ba%93%e6%88%96%e7%85%a7%e7%9b%b8%e6%9c%ba%e8%8e%b7%e5%8f%96%e5%9b%be%e5%83%8f#comments</comments>
		<pubDate>Fri, 05 Feb 2010 10:16:10 +0000</pubDate>
		<dc:creator>bagusflyer</dc:creator>
				<category><![CDATA[图形图像]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[UIImagePckerController]]></category>

		<guid isPermaLink="false">http://www.iphone-geek.cn/?p=873</guid>
		<description><![CDATA[本文讲述使用3.0的方法怎样从iPhone的照片库或照相机获取图像。

我们将创建一个应用程序从图片库或照相机获取图像并显示与屏幕之上。下面是截图：



1. 创建一个新的 View Based 程序

我将其命名为 photoApp
 
2. 创建IBOutlet 和 IBAction

打开 photoAppViewController.h 加入下面代码：


#import 
 
@interface PhotoAppViewController : UIViewController
    &#60; UIImagePickerControllerDelegate, UINavigationControllerDelegate &#62; {
	UIImageView * imageView;
	UIButton * choosePhotoBtn;
	UIButton * takePhotoBtn;
}
 
@property (nonatomic, retain) IBOutlet UIImageView * imageView;
@property (nonatomic, retain) IBOutlet UIButton * choosePhotoBtn;
@property (nonatomic, retain) IBOutlet UIButton * takePhotoBtn;
 
-(IBAction) getPhoto:(id) sender;
 
@end



注意我们实现了 UIImagePickerControlDelegate 和 UINavigationControllerDelegate 协议。为了与图像拾取器正确地接口，这两者都是必需的。其余部分应该很简单。我们设定了要使用按钮的IBOutlet以及按下这些按钮时被调用的IBAction。getPhoto方法将显示图像拾取器。
 
3. 创建接口

在Interface Builder中打开photoAppViewController.xib [...]]]></description>
			<content:encoded><![CDATA[<p>本文讲述使用3.0的方法怎样从iPhone的照片库或照相机获取图像。</p>
<p><br class="spacer_" /></p>
<p>我们将创建一个应用程序从图片库或照相机获取图像并显示与屏幕之上。下面是截图：</p>
<p><br class="spacer_" /></p>
<p><a href="http://icodeblog.com/wp-content/uploads/2009/07/photo-21.jpg"><img title="photo 2" src="http://icodeblog.com/wp-content/uploads/2009/07/photo-21.jpg" alt="photo 2" width="320" height="480" /></a></p>
<p><span id="more-873"></span></p>
<h3>1. 创建一个新的 View Based 程序</h3>
<p><br class="spacer_" /></p>
<p>我将其命名为 photoApp</p>
<h2> </h2>
<h2>2. 创建IBOutlet 和 IBAction</h2>
<p><br class="spacer_" /></p>
<p>打开 <strong>photoAppViewController.h </strong>加入下面代码：</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #6e371a;">#import </span>
 
<span style="color: #a61390;">@interface</span> PhotoAppViewController <span style="color: #002200;">:</span> UIViewController
    &lt; UIImagePickerControllerDelegate, UINavigationControllerDelegate &gt; <span style="color: #002200;">{</span>
	UIImageView <span style="color: #002200;">*</span> imageView;
	UIButton <span style="color: #002200;">*</span> choosePhotoBtn;
	UIButton <span style="color: #002200;">*</span> takePhotoBtn;
<span style="color: #002200;">}</span>
 
<span style="color: #a61390;">@property</span> <span style="color: #002200;">(</span>nonatomic, retain<span style="color: #002200;">)</span> IBOutlet UIImageView <span style="color: #002200;">*</span> imageView;
<span style="color: #a61390;">@property</span> <span style="color: #002200;">(</span>nonatomic, retain<span style="color: #002200;">)</span> IBOutlet UIButton <span style="color: #002200;">*</span> choosePhotoBtn;
<span style="color: #a61390;">@property</span> <span style="color: #002200;">(</span>nonatomic, retain<span style="color: #002200;">)</span> IBOutlet UIButton <span style="color: #002200;">*</span> takePhotoBtn;
 
<span style="color: #002200;">-</span><span style="color: #002200;">(</span>IBAction<span style="color: #002200;">)</span> getPhoto<span style="color: #002200;">:</span><span style="color: #002200;">(</span><span style="color: #a61390;">id</span><span style="color: #002200;">)</span> sender;
 
<span style="color: #a61390;">@end</span></pre>
</div>
</div>
<p><br class="spacer_" /></p>
<p>注意我们实现了 <strong>UIImagePickerControlDelegate</strong> 和<strong> UINavigationControllerDelegate </strong>协议。为了与图像拾取器正确地接口，这两者都是必需的。其余部分应该很简单。我们设定了要使用按钮的IBOutlet以及按下这些按钮时被调用的IBAction。getPhoto方法将显示图像拾取器。</p>
<h2> </h2>
<h2>3. 创建接口</h2>
<p><br class="spacer_" /></p>
<p>在Interface Builder中打开photoAppViewController.xib 并遵循下面步骤：</p>
<ol>
<li>将 UIImageView 拖入main view</li>
<li>在Attribute inspector（属性检查器）中将 UIImageView 的 <strong>Mode （模式）</strong> 设置为 <strong>Aspect Fit</strong></li>
<li>将 UIButton 拖入view 中并命名为<strong> Choose Photo （选取照片）</strong></li>
<li>将另一个 UIButton 拖入view 中并命名为 <strong>Take Photo （照相）</strong></li>
</ol>
<p><br class="spacer_" /></p>
<p>接口看上去像这样：</p>
<p><br class="spacer_" /></p>
<p><a href="http://icodeblog.com/wp-content/uploads/2009/07/screenshot_013.png"><img title="screenshot_01" src="http://icodeblog.com/wp-content/uploads/2009/07/screenshot_013.png" alt="screenshot_01" width="320" height="502" /></a></p>
<h2>4. 连接IBoutlets 和 IBAction</h2>
<ol>
<li>将 choosePhotoBtn 连接到名为 <strong>Choose Photo </strong>的UIButton上</li>
<li>将 imageView 连接到 UIImageView</li>
<li>将各按钮的<strong>Touch Up Inside</strong> 回调连接到 <strong>getPhoto</strong>方法</li>
</ol>
<p><br class="spacer_" /></p>
<p>当你按下 <strong>File’s Owner</strong> 时，Connection Inspector （连接检查器）应该像这样：</p>
<div id="in_post_ad_middle_1" style="margin: 5px; padding: 0px;">
<div id="ad-article"><noscript></noscript><!-- END NetShelter Ad Tag for TGDaily second rectangle 300x250,336x280,300x600 --></div>
</div>
<p><br class="spacer_" /></p>
<p><a href="http://icodeblog.com/wp-content/uploads/2009/07/screenshot_014.png"><img title="screenshot_01" src="http://icodeblog.com/wp-content/uploads/2009/07/screenshot_014.png" alt="screenshot_01" width="289" height="213" /></a></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p>关闭 Interface Builder</p>
<p><br class="spacer_" /></p>
<h2>5. 实现 getPhoto 方法</h2>
<p><br class="spacer_" /></p>
<p>打开 <strong>PhotoAppViewController.m </strong>a并nd add the following code:</p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #a61390;">@synthesize</span> imageView,choosePhotoBtn, takePhotoBtn;
 
<span style="color: #002200;">-</span><span style="color: #002200;">(</span>IBAction<span style="color: #002200;">)</span> getPhoto<span style="color: #002200;">:</span><span style="color: #002200;">(</span><span style="color: #a61390;">id</span><span style="color: #002200;">)</span> sender <span style="color: #002200;">{</span>
	UIImagePickerController <span style="color: #002200;">*</span> picker <span style="color: #002200;">=</span> <span style="color: #002200;">[</span><span style="color: #002200;">[</span>UIImagePickerController alloc<span style="color: #002200;">]</span> init<span style="color: #002200;">]</span>;
	picker.delegate <span style="color: #002200;">=</span> self;
 
	<span style="color: #a61390;">if</span><span style="color: #002200;">(</span><span style="color: #002200;">(</span>UIButton <span style="color: #002200;">*</span><span style="color: #002200;">)</span> sender <span style="color: #002200;">==</span> choosePhotoBtn<span style="color: #002200;">)</span> <span style="color: #002200;">{</span>
		picker.sourceType <span style="color: #002200;">=</span> UIImagePickerControllerSourceTypeSavedPhotosAlbum;
	<span style="color: #002200;">}</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">{</span>
		picker.sourceType <span style="color: #002200;">=</span> UIImagePickerControllerSourceTypeCamera;
	<span style="color: #002200;">}</span>
 
	<span style="color: #002200;">[</span>self presentModalViewController<span style="color: #002200;">:</span>picker animated<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">]</span>;
<span style="color: #002200;">}</span></pre>
</div>
</div>
<p><br class="spacer_" /></p>
<p>首先创建一个新的UIImagePickerController对象。它是一个视图控制器，可以按任意视图控制器方式正常显示出来（显示于导航视图，加载于表格视图，呈现为模型视图控制器等）。然后，设置代理为我们的视图控制器。它表示当用户选取照片时，拾取器将调用类中的某个方法。</p>
<p><br class="spacer_" /></p>
<p>接着，确定哪个按钮被按下。由于两个按钮都连接到此方法上，我们需要使用 == 来确定到底哪个被按下。到底是显示照相机图片还是显示照片库图片是由拾取器的一个属性决定的。看看代码你就会很清楚。</p>
<p><br class="spacer_" /></p>
<p>最后，调用presentModalViewController。它将使拾取器以动画的形式从屏幕底向上移动，切换到视图。根据按下的按钮的不同，你将看到下面图像：</p>
<p><br class="spacer_" /></p>
<p><a href="http://icodeblog.com/wp-content/uploads/2009/07/photo-3.jpg"><img title="photo 3" src="http://icodeblog.com/wp-content/uploads/2009/07/photo-3.jpg" alt="photo 3" width="320" height="480" /></a><a href="http://icodeblog.com/wp-content/uploads/2009/07/photo.jpg"><img title="photo" src="http://icodeblog.com/wp-content/uploads/2009/07/photo.jpg" alt="photo" width="320" height="480" /></a></p>
<h2> </h2>
<h2>6. 显示选择的图像</h2>
<p><br class="spacer_" /></p>
<p>一旦选择了照片， ImagePicker 将回调 <strong>didFinishPickingMediaWithInfo。</strong>在<strong>PhotoAppViewController.m </strong>文件中进入下列代码：<strong> </strong></p>
<div>
<div>
<pre style="font-family: monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">(</span><span style="color: #a61390;">void</span><span style="color: #002200;">)</span>imagePickerController<span style="color: #002200;">:</span><span style="color: #002200;">(</span>UIImagePickerController <span style="color: #002200;">*</span><span style="color: #002200;">)</span>picker
    didFinishPickingMediaWithInfo<span style="color: #002200;">:</span><span style="color: #002200;">(</span><span style="color: #400080;">NSDictionary</span> <span style="color: #002200;">*</span><span style="color: #002200;">)</span>info <span style="color: #002200;">{</span>
	<span style="color: #002200;">[</span>picker dismissModalViewControllerAnimated<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">]</span>;
	imageView.image <span style="color: #002200;">=</span> <span style="color: #002200;">[</span>info objectForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">"UIImagePickerControllerOriginalImage"</span><span style="color: #002200;">]</span>;
<span style="color: #002200;">}</span></pre>
<pre style="font-family: monospace;"><span style="color: #002200;"> </span> </pre>
</div>
</div>
<p>第一行代码隐藏拾取器。随后将图像视图的<strong>image</strong> 属性设置为返回的图像。拾取器返回一个NSDictionary对象。这是由于 <a href="http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIImagePickerControllerDelegate_Protocol/UIImagePickerControllerDelegate/UIImagePickerControllerDelegate.html#//apple_ref/doc/c_ref/UIImagePickerControllerMediaType">UIImagePickerControllerMediaType</a> 将指示返回的是视频还是图像。</p>
<p><br class="spacer_" /></p>
<p><a href="http://icodeblog.com/wp-content/uploads/2009/07/PhotoApp.zip">iPhone Tutorial – PhotoApp.zip</a></p>
<p><br class="spacer_" /></p>
<p>原文见：<a title="Permanent Link to Getting Images From The iPhone Photo Library Or Camera Using UIImagePickerController" rel="bookmark" href="http://icodeblog.com/2009/07/28/getting-images-from-the-iphone-photo-library-or-camera-using-uiimagepickercontroller/">Getting Images From The iPhone Photo Library Or Camera Using UIImagePickerController </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bd%bf%e7%94%a8uiimagepickercontroller%e4%bb%8eiphone%e7%85%a7%e7%89%87%e5%ba%93%e6%88%96%e7%85%a7%e7%9b%b8%e6%9c%ba%e8%8e%b7%e5%8f%96%e5%9b%be%e5%83%8f/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

