objective-c – 我应该使用哪个第三方Imageview类?

前端之家收集整理的这篇文章主要介绍了objective-c – 我应该使用哪个第三方Imageview类?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的要求是:

>需要从服务器URL&amp ;;在imageview中显示图像保存以供离线使用.
>但可能有可能更新相同的URL图像.

我试过EGOImageview,AsyncImageview,FXImageview,Haneke thsese我试过的所有课程.
我的第一部分要求已经实现.但不是第二次..如果第一次显示“xxxxx”链接图像….如果在同一链接图像上升,app只显示旧图像…

解决方法

您可以使用以下完全满足您要求的课程

DImageView.h

#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

#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];
    }
}

这堂课会做什么?
它将从服务器下载图像并将其保存到应用程序文档目录,如果可用,则从本地获取.

怎么用?
在你的nib文件中为UIImageView设置DImageView类.

然后,您只需在.m文件中使用它,如下所示.

[imgViewName processImageDataWithURLString:imageURl];
原文链接:https://www.f2er.com/c/118329.html

猜你在找的C&C++相关文章