我有一个UIViewController,我想在加载视图 - 以打开相机的UIImagePickerController。
答:我写了以下内容:编辑 - 我现在用的viewDidAppear
- (void)viewDidAppear:(BOOL)animated{
imagePicker = [[UIImagePickerController alloc] init];
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
}
else{
[imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
[imagePicker setDelegate:self];
[self presentModalViewController:imagePicker animated:YES];
}
问题是,用户需要一个快照或从文件夹中选择图像后 - 它不断重新加载UIImagePicker - 我怎么可以把它称之为一次?
B.我想一个矩形内所显示的摄像头(可的UIImage或UIView的),而不是全屏,所以我就可以离开我的顶部导航栏。
我怎样才能实现以上?
对于情况A,更好地把这个viewDidAppear
而不是viewWillAppear
,以避免碰撞的动画(和wait_fences错误)
在B的情况,您可能需要捕获会话,或者需要tweek的UIImagePickerController
使用变换。 你可以做,由于后续UIImagePickerController
属性:
-
cameraViewTransform
改变CGAffineTransform
应用于显示摄像机/视频的图。 因此,你将能够将其缩小例如 -
showsCameraControls
,你可以设置为NO
隐藏默认iOS的控制,如果你打算添加自己的UIButtons
代替 -
cameraOverlayView
,可以让你把一个任意UIView
顶上的摄像机画面。 通常使用具有一个视图backgroundColor = [UIColor clearColor]
和一些子视图添加到它,特别是一些装饰UIImageView
如果需要的话(例如,帧),一些UIButton
s到触发摄像机(并使用takePicture
, startVideoCapture
和stopVideoCapture
方法UIImagePickerController
在其相应的IBAction
如需要),并取代你与以前的财产藏集结其相机控制,等等
在你的情况,如果你想保持普通相机的按钮,但只是想改变的框架,使之不能全屏,在cameraTransform
属性是那么通常你所需要的。 添加装饰框周围会简单地由使用的UIImageView
为cameraOverlayView
财产,并使用它来显示装饰框的图像(图像与它的中心透明的,使得相机视图是通它可见,当然)
[编辑]需要注意的是(根据文档)的cameraTransform
属性只可拍摄电影时(当sourceType == UIImagePickerControllerSourceTypeCamera
)。 所以,你可以用它来让用户从相机拍摄一张照片,但如果你想用你UIImagePickerController
选择从库中的图片,你不能使用cameraTransform
(这很符合逻辑,因为这看起来很奇怪以显示在屏幕上)。 所以,要确保只有在这种情况下使用它,特别是避免当UIImagePickerControllerSourceTypeCamera
源类型不可用在设备上。
只要实现你的行动统一到viewDidLoad方法。 这是我做的,现在可完全正常。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self getMediaFromSource:UIImagePickerControllerSourceTypeCamera];
}
- (IBAction)TakePhoto:(id)sender {
[self getMediaFromSource:UIImagePickerControllerSourceTypeCamera];
}
- (void)getMediaFromSource:(UIImagePickerControllerSourceType)sourceType{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = NO;
picker.sourceType = sourceType;
[self presentModalViewController:picker animated:YES];
[picker release];
}
#pragma mark - UIImagePickerController delegate methods
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
[picker dismissModalViewControllerAnimated:YES];
[self.tabBarController setSelectedIndex:1];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissModalViewControllerAnimated:YES];
[self.tabBarController setSelectedIndex:1];
}
cameraOverlayView的更新部分B.实施例的代码
- (void)setupImagePicker:(UIImagePickerControllerSourceType)sourceType
{
self.imagePickerController.sourceType = sourceType;
if (sourceType == UIImagePickerControllerSourceTypeCamera)
{
// user wants to use the camera interface
//
self.imagePickerController.showsCameraControls = NO;
if ([[self.imagePickerController.cameraOverlayView subviews] count] == 0)
{
// setup our custom overlay view for the camera
//
// ensure that our custom view's frame fits within the parent frame
CGRect overlayViewFrame = self.imagePickerController.cameraOverlayView.frame;
CGRect newFrame = CGRectMake(0.0,
CGRectGetHeight(overlayViewFrame) -
self.view.frame.size.height - 10.0,
CGRectGetWidth(overlayViewFrame),
self.view.frame.size.height + 10.0);
self.view.frame = newFrame;
[self.imagePickerController.cameraOverlayView addSubview:self.view];
}
}
}
http://developer.apple.com/library/ios/#samplecode/PhotoPicker/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010196
我建议用打“cameraOverlayView,”试图建立某种形式的伪导航栏在你预期的相互作用会工作。
“你可以自定义图像选取器控制器,自己管理的用户交互。要做到这一点,提供包含要显示控件覆盖视图,并使用所描述的方法‘捕获静止图像或电影。’您可以显示您的自定义覆盖对于UIImagePickerController类视图除了或替代,默认的控制。自定义覆盖的观点是在IOS 3.1及更高版本由cameraOverlayView财产的方式。有关代码示例,请参阅PhotoPicker示例代码项目。
重要的UIImagePickerController类仅支持肖像模式。 这个类是打算按原样使用,不支持子类。 这个类的视图层次是私人的,不能修改,但有一个例外。 您可以将自定义视图的cameraOverlayView属性,并使用该视图来显示其他信息或管理的互动拍照界面和代码之间“。
http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html