大佬教程收集整理的这篇文章主要介绍了objective-c – 我应该使用哪个第三方Imageview类?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>需要从服务器URL& ;;在imageview中显示图像保存以供离线使用.
>但可能有可能更新相同的URL图像.@H_197_3@
我试过EGOImageview,AsyncImageview,FXImageview,Haneke thsese我试过的所有课程.
我的第一部分要求已经实现.但不是第二次..如果第一次显示“xxxxx”链接图像….如果在同一链接图像上升,app只显示旧图像…@H_197_3@
DImageView.h@H_197_3@
#import <UIKit/UIKit.h> @interface DImageView : UIImageView @property (nonatomic,strong) UIActivityInDicatorView *activityView; - (void)processImageDataWithURLString:(NSString *)urlString; + (UIImage *)getSavedImage :(NSString *)filename; + (void)saveImageWithFolderName:(NSString *)folderName AndFilename:(NSString *)filename AndImage:(NSData *) imageData;
DImageView.m@H_197_3@
#import "DImageView.h" #define IMAGES_FOLDER_NAME @"DImages" @implementation DImageView #pragma mark - App Life Cycle - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { } return self; } - (void)dealloc { self.activityView = nil; [super dealloc]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self initWithFrame:[self frame]]; } return self; } #pragma mark - Download images - (void)processImageDataWithURLString:(NSString *)urlString //andBlock:(void (^)(UIImage * img))processImage { @autoreleasepool { UIImage * saveImg = [DImageView getSavedImage:urlString]; if (saveImg) { dispatch_queue_t callerQueue = dispatch_get_main_queue(); dispatch_async(callerQueue,^{ @autoreleasepool { [self setImage:saveImg]; } }); } else { [self showActivityInDicator]; NSURL *url = [NSURL URLWithString:[urlString StringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; dispatch_queue_t callerQueue = dispatch_get_main_queue(); dispatch_queue_t downloadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0); __block NSError* error = nil; dispatch_async(downloadQueue,^{ NSData * imageData = [[[NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error] retain] autorelease]; if (error) { NSLog(@"DImg Error %@",[error debugDescription]); } else { dispatch_async(callerQueue,^{ @autoreleasepool { UIImage *image = [UIImage imageWithData:imageData]; [self setImage:image]; [self hideActivityInDicator]; /* Below code is to save image*/ [DImageView saveImageWithFolderName:IMAGES_FOLDER_NAME AndFilename:urlString AndImage:imageData]; } }); } }); dispatch_release(downloadQueuE); } } } #pragma mark - File Save methods + (void)saveImageWithFolderName:(NSString *)folderName AndFilename:(NSString *)filename AndImage:(NSData *) imageData { @autoreleasepool { NSFileManager *filemanger = [NSFileManager defaultManager] ; NSString *directoryPath = [NSString StringWithFormat:@"%@/%@",[DImageView applicationDocumentsDirectory],folderName] ; if (![filemanger fileExistsAtPath:directoryPath]) { NSError *error = nil; [filemanger createDirectoryAtPath:directoryPath withIntermediateDirectories:YES attributes:nil error:&error]; } filename = [DImageView filenameValidate:filename]; NSString *filePath = [NSString StringWithFormat:@"%@/%@",directoryPath,filename] ; BOOL isSaved = [imageData writeToFile:filePath atomically:YES]; if (!isSaved) { NSLog(@" ** Img Not Saved"); } } } + (NSString *)applicationDocumentsDirectory { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *basePath = ([paths count] > 0) ? [paths objectATindex:0] : nil; return basePath; } + (UIImage *)getSavedImage :(NSString *)filename { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; filename = [DImageView filenameValidate:filename]; NSFileManager * filemanger = [NSFileManager defaultManager] ; NSString * directoryPath = [NSString StringWithFormat:@"%@/%@",[DImageView applicationDocumentsDirectory],IMAGES_FOLDER_NAME] ; NSString * filePath = [NSString StringWithFormat:@"%@/%@",filename] ; if ([filemanger fileExistsAtPath:directoryPath]) { UIImage *image = [UIImage imageWithContentsOfFile:filePath] ; if (imagE) { return image; } else { NSLog(@"** Img Not Found **"); return nil; } } [pool release]; return nil; } + (NSString*) filenameValidate : (NSString*) name { name = [name StringByreplacingoccurrencesOfString:@"://" withString:@"##"]; name = [name StringByreplacingoccurrencesOfString:@"/" withString:@"#"]; name = [name StringByreplacingoccurrencesOfString:@"%20" withString:@""]; return name; } #pragma mark - Activity Methods - (void) showActivityInDicator { self.activityView = [[UIActivityInDicatorView alloc]initWithFrame:CGRectMake(0,self.frame.size.width,self.frame.size.height)]; self.activityView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; self.activityView.hidesWhenStopped = TRUE; self.activityView.BACkgroundColor = [UIColor clearColor]; self.activityView.activityInDicatorViewStyle = UIActivityInDicatorViewStyleGray; [self addSubview:self.activityView]; [self.activityView startAnimaTing]; } - (void) hideActivityInDicator { CAAnimation *animation = [NSClassFromString(@"CATransition") animation]; [animation SETVALue:@"kCATransitionFade" forKey:@"type"]; animation.duration = 0.4;; [self.layer addAnimation:animation forKey:nil]; [self.activityView stopAnimaTing]; [self.activityView removeFromSuperview]; for (UIView * view in self.subviews) { if([view isKindOfClass:[UIActivityInDicatorView class]]) [view removeFromSuperview]; } }
这堂课会做什么?
它将从服务器下载图像并将其保存到应用程序文档目录,如果可用,则从本地获取.@H_197_3@
怎么用?
在你的nib文件中为UIImageView设置DImageView类.@H_197_3@
然后,您只需在.m文件中使用它,如下所示.@H_197_3@
[imgViewName processImageDataWithURLString:imageURl];
以上是大佬教程为你收集整理的objective-c – 我应该使用哪个第三方Imageview类?全部内容,希望文章能够帮你解决objective-c – 我应该使用哪个第三方Imageview类?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。