ios 编程--使用代码创建新的相册随加项目

2013-04-23 13:29:04|  分类: 默认分类 |举报|字号 订阅
编写ios 编程--使用代码创建新的相册,是参考http://www.touch-code-magazine.com/ios5-saving-photos-in-custom-photo-album-category-for-download/来写的。

ALAssetsLibrary+CustomPhotoAlbum.h 里的代码是:
#import <Foundation/Foundation.h>
#import <AssetsLibrary/AssetsLibrary.h>
typedef void(^SaveImageCompletion)(NSError* error);
@interface ALAssetsLibrary(CustomPhotoAlbum)
-(void)saveImage:(UIImage*)image toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock;

-(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock;
@end

ALAssetsLibrary+CustomPhotoAlbum.m里的代码是:

#import "ALAssetsLibrary+CustomPhotoAlbum.h"

@implementation ALAssetsLibrary(CustomPhotoAlbum)

-(void)saveImage:(UIImage*)image toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock

{
    [self writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation 

                        completionBlock:^(NSURL* assetURL, NSError* error) {
                          if (error!=nil) {
                              completionBlock(error);
                              return;

                          }
                          [self addAssetURL: assetURL
                                    toAlbum:albumName
                        withCompletionBlock:completionBlock];
                      }];
}
-(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock{

    __block BOOL albumWasFound = NO;
    [self enumerateGroupsWithTypes:ALAssetsGroupAlbum 

    usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if ([albumName compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) {
                                albumWasFound = YES;
                                [self assetForURL: assetURL
                                      resultBlock:^(ALAsset *asset) {
                                          [group addAsset: asset];
                                          completionBlock(nil);
                                      } failureBlock: completionBlock];
                                return;
                            }
                            if (group==nil && albumWasFound==NO) {
                                __weak ALAssetsLibrary* weakSelf = self;
                                [self addAssetsGroupAlbumWithName:albumName
                                                      resultBlock:^(ALAssetsGroup *group) {
                                                          [weakSelf assetForURL: assetURL
                                                                        resultBlock:^(ALAsset *asset) {
                                                                            [group addAsset: asset];
                                                                            completionBlock(nil);
                                                                        } failureBlock: completionBlock];
                                                      } failureBlock: completionBlock];
                                return;
                            }
                        } failureBlock: completionBlock];
}
@end 接下来,在AppDelegate.m导入RootViewController。
RootViewController.h 里的代码是:
#import <UIKit/UIKit.h>
#import <AssetsLibrary/AssetsLibrary.h>

@interface RootViewController : UIViewController <UIImagePickerControllerDelegate>

@property (strong, atomic) ALAssetsLibrary * library;

@end

在RootViewController.m里的代码是:
#import "RootViewController.h"

@interface RootViewController ()

@end

@implementation RootViewController

@synthesize library;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;

}

-(void)dealloc
{
    [library release];
    library = nil;
    [super dealloc];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.

    library = [[ALAssetsLibrary alloc] init];

    UIButton * createGroup = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    createGroup.frame = CGRectMake( 20, 150, 100, 40);
    [createGroup setTitle:@"takePhoto" forState:UIControlStateNormal];

    [createGroup addTarget:self action:@selector(takePhotoClick) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:createGroup];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.
}

- (void)takePhotoClick
{
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

    imagePickerController.editing = YES;
    imagePickerController.delegate = (id)self;

    [self presentModalViewController:imagePickerController animated:YES];

}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
    [library saveImage:image toAlbum:@"Touch Code Magazine" withCompletionBlock:^(NSError *error) {

        if (error!=nil) {
            NSLog(@"Big error: %@", [error description]);
        }
    }];
    [picker dismissModalViewControllerAnimated:NO];

}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [picker dismissModalViewControllerAnimated:NO];

}
@end

接下来,导入AssetsLibrary.framework。就可以运行了。
时间: 2024-11-12 05:51:41

ios 编程--使用代码创建新的相册随加项目的相关文章

iOS开发 纯代码创建UICollectionView

转:http://jingyan.baidu.com/article/eb9f7b6d8a81a5869364e8a6.html iOS开发 纯代码创建UICollectionView 习惯了使用xib和StoryBoard创建UICollectionView项目工程的伙伴,需要转换使用纯代码来实现,想避免碰更多的壁,就需要认真了解创建UICollectionView过程了.创建UICollectionView比创建UITableView更加复杂,初始化方式也是相对奇特.以下是使用纯代码创建UI

iOS开发之代码创建常用控件(UIButton、UILabel)的思路

代码创建按钮UIButton: (一)基本设置 //创建中间“+”按钮 UIButton *addBtn = [[UIButton alloc] init]; //设置默认背景图片 [addBtn setBackgroundImage:[UIImage imageNamed:@"AddButtonIcon"] forState:UIControlStateNormal]; //设置按下时背景图片 [addBtn setBackgroundImage:[UIImage imageName

[Cocos2d-x v3.x]Mac OX 创建新的Cocos2d-x 3.0 项目

文章内容来自于: http://cocos2d-x.org/wiki/How_to_Start_A_New_Cocos2D-X_Game Mac OS X 10.9 Software Requirements Xcode 4.6 (for iOS or Mac) gcc 4.7 for Linux or Android. For Android ndk-r9 or newer is required. Visual Studio 2012 (for Windows) Python 2.7.5 C

解决iOS8.0以上系统下无法通过代码创建被删除过的同名相册 ( iOS 8 Photos framework: Create a albums with iOS8 )

问题描述: 在苹果的 iOS8.0以上, 当你创建完一个相册, 例如名为"Rd", 然后在相册中手动删除了这个"Rd"相册, 再次通过代码 #import <AssetsLibrary/ALAssetsLibrary.h> ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; [assetsLibrary addAssetsGroupAlbumWithName:@"Rd

另辟蹊径创建移动应用:iOS和Android代码共享

过去几年,移动应用席卷了整个世界,在工作和生活的方方面面改变着我们使用互联网的方式.创建移动应用的各种技术也随之兴起,各种开发流程也 将移动应用视为一等公民,开始考虑适应移动开发的流程.尽管已经让人感觉无处不在,真正的移动应用时代才刚刚开始.我们即将面对新一代的移动设备,如可穿戴设备或组成物联网的各种各样的移动装置.我们将面临全新的用于数据展示和命令接收的用户交互接口.我们也认识到越来越多的公司将真正采取移动优先的战 略.所有的这些都将对我们未来几年设计.开发和测试软件的方式产生巨大影响. 在苹

IOS 开发笔记-基础 UI(5)使用代码创建按钮

在实际开发中,很多的时候是需要手动写代码来创建按钮的. 在开发过程中,并不是每次都通过storyboard拖控件完成UI界面,因为storyboard上面的界面是“固定死”的,有时候可能会在程序运行过程中动态地添加一些新的控件到界面上,比如QQ,微信的聊天信息,是有人发出一条信息后才动态显示出来的.因此,需要掌握如何用代码动态地添加控件.实际上,storyboard的本质就是根据图形界面描述转成相应的代码(xml 文件).还有一个原因,就是有的国内的公司,或者一些 IOS 开发的团队,并不使用故

Swift编程中字符转为类,代码创建控件详解

在swift编程(http://www.maiziedu.com/course/ios/16-161/)中,我们都会遇到这样两个问题,如何把字符转为类和代码创建控件的方法,下面就具体讲解这两个知识点 在使用类之前要先获得 命名空间 通过json来获取 字符型的类名 然后创建类对象,这时候就要用到字符转类 // 从info字典中获取到 命名空间 转为字符型 let NS = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"

设备中创建新相册(粘贴)

二:在手机相册(ios设备相册)中创建相册 第一步:向工程里添加AssetsLibrary 库文件 第二步:在项目中"import" 导入库(在哪用就在哪导入) ? 1 #import <AssetsLibrary/AssetsLibrary.h> 核心代码 在需要添加相册的地方调用代码 ? 1 2 3 4 5 6 //添加到相册我让它执行是异步执行的方式,如果不想用这种方式,可以不去开一个线程 dispatch_async(dispatch_get_global_queu

Linux环境编程之进程(四):创建新进程、执行程序和进程终止

引言: 对于每个进程,都有一个非负整数表示的唯一进程ID.虽然进程的ID是唯一的,但却是可重用的.系统中有一些专用的进程.如ID为0的进程通常是调度进程,也成交换进程或系统进程(它是内核进程).进程ID为1通常是init进程,它是一个普通的用户进程.一些与进程ID有关的函数: #include <unistd.h> pid_t getpid(void);   //返回值:调用进程的进程ID pit_t getppid(void); //返回值:调用进程的父进程ID uid_t getuid(v