carrierwave-ios 是一款易于使用的 iOS 库,它提供了灵活的方式下载、上传和编辑资产文件。设计用于与 CarrierWave Ruby gem 集成,可以让你工作得更快。
carrierwave-ios 处理
sudo gem install cocoapods --pre 安装它!)只需在源文件中添加 @import Carrierwave,您想要使用 carrierwave-ios。
要连接 carrierwave-ios 与 Rails 后端,只需将 serverURL 属性设置在 [CRVNetworkManager sharedManager] 中的后端服务器 URL。我们推荐在 AppDelegate 类的 application:didFinishLaunchingWithOptions: 方法中这样做。
CRVNetworkManager 封装了常见任务,包括上传、下载和删除资产。所有支持资产都应该使用 CRVAssetType 协议进行封装。
声明
- (NSString *)uploadAsset:(id<CRVAssetType>)asset progress:(CRVProgressBlock)progress completion:(CRVUploadCompletionBlock)completion;
- (NSString *)uploadAsset:(id<CRVAssetType>)asset toURL:(NSURL *)url progress:(CRVProgressBlock)progress completion:(CRVUploadCompletionBlock)completion;创建上传过程
NSString *proccessId;
proccessId = [[CRVNetworkManager sharedManager] uploadAsset:asset progress:^(double progress) {
NSLog(@"Progress: %f", progress);
} completion:^(CRVUploadInfo *info, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"Success: %@", info);
}
}]如果在成功完成上传,方法将返回封装上传资产的 assetIdentifier 和服务器端路径(存储在 assetPath 属性中)的 CRVUploadInfo 对象。对于动态服务器 URL,请使用 uploadAsset:toURL:progress:completion 方法。
声明
- (NSString *)downloadAssetWithIdentifier:(NSString *)identifier progress:(CRVProgressBlock)progress completion:(CRVDownloadCompletionBlock)completion;
- (NSString *)downloadAssetFromURL:(NSURL *)url progress:(CRVProgressBlock)progress completion:(CRVDownloadCompletionBlock)completion;创建下载过程
NSString *proccessId
proccessId = [[CRVNetworkManager sharedManager] downloadAssetWithIdentifier:identifier progress:^(double progress) {
NSLog(@"Progress: %f", progress);
} completion:^(CRVImageAsset *asset, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"Success");
}
}对于动态服务器 URL,请使用 uploadAsset:toURL:progress:completion 方法。
声明
- (void)deleteAssetWithIdentifier:(NSString *)identifier completion:(CRVCompletionBlock)completion;
- (void)deleteAssetFromURL:(NSURL *)url completion:(CRVCompletionBlock)completion;调用删除
[[CRVNetworkManager sharedManager] deleteAssetWithIdentifier:identifier completion:^(BOOL success, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"Success");
}
}对于动态服务器 URL,请使用 uploadAsset:toURL:progress:completion 方法。
如前所述,所有上传对象都应该遵守 CRVAssetType 协议。carrierwave-ios 携带用于常见图像和视频文件类型的可用的类。
CRVImageAsset提供了从NSURL创建图片资源的基本接口,可以是本地图片文件、NSData实例或UIImage对象。它支持gif、jpeg、tiff和png文件格式。创建后,通过image属性可以访问UI表示形式。您可以使用某些用法创建图像的压缩副本:
- (instancetype)compressedImageAssetWithQuality:(CGFloat)quality;CRVVideoAsset提供了方便的创建资源对象的接口,可以来自NSData实例或本地视频文件。它支持mov和mp4文件格式。此外,CRVVideoAsset可以使用方法将选定的视频加载到AVPlayerItem
- (void)loadVideoWithCompletion:(CRVVideoLoadCompletionBlock)completion; 使用示例
[asset loadVideoWithCompletion:^(AVPlayerItem *videoItem, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"Video loaded");
}
}];CRVNetworkManager提供了处理上传或下载过程生命周期的额外方法,这些方法非常直接且易于理解。所有函数的参数都是通过创建方法返回的标识符。
- (void)cancelProccessWithIdentifier:(NSString *)identifier;
- (void)pauseProccessWithIdentifier:(NSString *)identifier;
- (void)resumeProccessWithIdentifier:(NSString *)identifier;此外,“carrierwave-ios”还提供了用于编辑所选照片的手动UI组件。CRVImageEditViewController负责缩放、旋转和裁剪照片。以下是它在演示应用中的预览:
使用非常简单,只需创建新实例并显示它
CRVImageEditViewController *controller = [[CRVImageEditViewController alloc] initWithImageAsset:imageAsset];
controller.delegate = self;
[self presentViewController:controller animated:YES completion:nil];如果您使用的是故事板,您也可以在InterfaceBuilder中将新视图控制器拖入,并将它的类设置为CRVImageEditViewController。
我们尽了最大努力让CRVImageEditViewController尽可能可配置,因此其接口公开了大量有用的属性以适应任何应用程序。
设置CRVImageEditViewControllerDelegate提供将自定义UI组件注入中的可能性
其余空间用于缩放、旋转和裁剪图像。
可以通过实现方法引入自己的UI组件
- (UIView *)viewForHeaderInImageEditViewController:(CRVImageEditViewController *)controller;
- (UIView *)viewForFooterInImageEditViewController:(CRVImageEditViewController *)controller;要创建一个具有通信功能视图,你必须使CRVHeaderFooterView类派生,并使用eventMessenger来发布消息
- (void)postCancelMessage;
- (void)postDoneMessage;
- (void)postShowRatioSheetMessage;
- (void)postResetTransformationMessage;这里是一个示例。
指定标题和页脚高度也是可能的
- (CGFloat)heightForHeaderInImageEditViewController:(CRVImageEditViewController *)controller; //default 20 points
- (CGFloat)heightForFooterInImageEditViewController:(CRVImageEditViewController *)controller; //default 60 points裁剪边界也可以自定义。它有一系列选项,有助于其适应您的应用程序风格。更多详细信息,请参阅CRVScalableView和CRVScalableBorder
@property (assign, nonatomic) NSTimeInterval animationDuration;
@property (assign, nonatomic) UIViewAnimationOptions animationCurve;
@property (assign, nonatomic) CGFloat springDamping;
@property (assign, nonatomic) CGFloat springVelocity;
@property (assign, nonatomic) CRVGridDrawingMode gridDrawingMode;
@property (assign, nonatomic) CRVGridStyle gridStyle;
@property (strong, nonatomic) UIColor *gridColor;
@property (assign, nonatomic) NSUInteger gridThickness;
@property (assign, nonatomic) NSInteger numberOfGridlines;@property (assign, nonatomic) CRVBorderDrawingMode borderDrawinMode;
@property (assign, nonatomic) CRVBorderStyle borderStyle;
@property (strong, nonatomic) UIColor *borderColor;
@property (assign, nonatomic) NSUInteger borderThickness;
@property (assign, nonatomic) NSUInteger borderInset;@property (assign, nonatomic) CRVAnchorsDrawingMode anchorsDrawingMode;
@property (strong, nonatomic) UIColor *anchorsColor;
@property (assign, nonatomic) NSUInteger anchorThickness;虽然公开的属性可以对裁剪边界进行大量定制,但也提供了一个特殊的方法,在现有上下文中进行自己的绘制
- (void)drawRect:(CGRect)rect withinContext:(CGContextRef)context;还可以接收用户事件并对它们做出响应。您需要做的只是确认CRVScalableViewDelegate协议并实现感兴趣的函数
- (void)scalableViewDidBeginScaling:(CRVScalableView *)view;
- (void)scalableViewDidEndScaling:(CRVScalableView *)view;
- (void)scalableViewDidBeginMoving:(CRVScalableView *)view;
- (void)scalableViewDidEndMoving:(CRVScalableView *)view;
- (void)scalableViewDidMove:(CRVScalableView *)view;
- (void)scalableViewDidScale:(CRVScalableView *)view;使裁剪视图动画到指定的帧
- (void)animateToFrame:(CGRect)frame completion:(void (^)(BOOL finished))completion;使裁剪视图动画到其中心的指定尺寸
- (void)animateToSize:(CGSize)size completion:(void (^)(BOOL finished))completion;使裁剪视图动画到其中心的指定比例。最终尺寸取决于父视图的范围
- (void)animateToRatio:(CGFloat)ratio completion:(void (^)(BOOL finished))completion;动画算法足够聪明,可以验证指定的/计算出的帧是否位于父视图中。如果不是,则将原点和/或大小更改为有效值。所以您不必担心裁剪视图会移出父视图的界限。
carrierwave-ios附带有简单的演示应用程序,实现了库的基本功能,如上传文件和编辑图像资产。要运行演示,请按照以下说明操作
$ git clone --recursive [email protected]:netguru/carrierwave-ios.git
$ carthage update
$ pod install或者如果您已经使用--recursive克隆了项目
$ git submodule update --init --recursive
$ carthage update
$ pod installcarrierwave-ios受MIT 许可协议保护。
首先,感谢您的贡献!
以下是您需要遵循的一些指导方针
有任何疑问?请提交问题!
Adrian Kashivskyy
Patryk Kaczmarek
Wojciech Trzasko
Grzegorz Lesiak
Paweł Białecki
版权© 2014-2015 Netguru