C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 我应该使用哪个第三方Imageview类?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_1@我的要求是:

>需要从服务器URL&amp ;;在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,请注明来意。