对于ios调用相册,首先要确定但前场景就是程序运行的场景,如果不是,需要讲场景添加到当前场景
获取当前场景并将场景添加到当前场景
RootViewController* vc = (RootViewController*)viewController;
UIViewController *vcNow = [vc getCurrentVC];
[vcNow.view addSubview:vc.view];
UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:(@"res/CSres/public/publicUI/public_head.png")]];
[vc setHeadPicture:iv];
//获取当前场景代码
- (UIViewController *)getCurrentVC
{
UIViewController *result = nil;
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
if (window.windowLevel != UIWindowLevelNormal)
{
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow * tmpWin in windows)
{
if (tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
UIView *frontView = [[window subviews] objectAtIndex:0];
id nextResponder = [frontView nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]])
result = nextResponder;
else
result = window.rootViewController;
return result;
}
//获取当前场景代码//////
调用相册::///RootViewController(方法中)
- (void) setHeadPicture:(UIImageView*) iv
{
self.imageV = iv;
[iv release];
[self.view addSubview:self.imageV];
NSLog(@"%s","setHeadPicture");
UIImagePickerController *pickerImage = [[UIImagePickerController alloc] init];
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
pickerImage.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
// pickerImage.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
pickerImage.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:pickerImage.sourceType];
}
pickerImage.delegate = self;
pickerImage.allowsEditing = NO;
[self presentModalViewController:pickerImage animated:YES];
[pickerImage release];
}
添加调用相册的回调(这些方法不需要定义在类中,直接实现)
//把图片添加到当前view中
- (void)saveImage:(UIImage *)image {
//保存
NSLog(@"%s","saveImage");
self.imageV.image = image;
}
#pragma mark –
#pragma mark Camera View Delegate Methods
//点击相册中的图片或者照相机照完后点击use 后触发的方法
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSLog(@"***info == %@",info);
UIImage *image;
if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary){//如果打开相册
[self.imagePicker dismissPopoverAnimated:YES];//关掉相册
image = [[info objectForKey:UIImagePickerControllerOriginalImage] retain];
NSLog(@"***333%@",image);
}
else{//照相机
[picker dismissModalViewControllerAnimated:YES];//关掉照相机
image = [[info objectForKey:UIImagePickerControllerEditedImage] retain];
NSLog(@"***222%@",image);
}
[picker dismissModalViewControllerAnimated:YES];//关掉照相机
NSLog(@"***111%@",image);
UIImageWriteToSavedPhotosAlbum(image, self, NULL, NULL);
//保存图片到app document
NSData* imageData = UIImagePNGRepresentation(image);
NSString* documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* totalPath = [documentPath stringByAppendingPathComponent:@"aabbcc.png"];
[imageData writeToFile:totalPath atomically:NO];//将图片保存在当前应用程序下的docoment中
[imageData writeToURL:[NSURL fileURLWithPath:@""] atomically:NO];
NSLog(@"***%@",totalPath);
// [UIImage ]
//把选中的图片添加到界面中
[self performSelector:@selector(saveImage:)
withObject:image
afterDelay:0.5];
}
//点击cancel调用的方法
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissModalViewControllerAnimated:YES];
}