Update our iOS demo to modern way, add a UIProgressView to show image download progress
This commit is contained in:
parent
821c2f3b8a
commit
efb7c4ebf9
|
@ -7,55 +7,66 @@
|
|||
*/
|
||||
|
||||
#import "DetailViewController.h"
|
||||
#import <SDWebImage/UIImageView+WebCache.h>
|
||||
#import <SDWebImage/FLAnimatedImageView.h>
|
||||
#import <SDWebImage/FLAnimatedImageView+WebCache.h>
|
||||
|
||||
@interface DetailViewController ()
|
||||
|
||||
@property (strong, nonatomic) IBOutlet FLAnimatedImageView *imageView;
|
||||
|
||||
- (void)configureView;
|
||||
@property (strong, nonatomic) UIActivityIndicatorView *activityIndicator;
|
||||
@property (strong, nonatomic) UIProgressView *progressView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DetailViewController
|
||||
|
||||
@synthesize imageURL = _imageURL;
|
||||
@synthesize imageView = _imageView;
|
||||
|
||||
#pragma mark - Managing the detail item
|
||||
|
||||
- (void)setImageURL:(NSURL *)imageURL
|
||||
- (UIActivityIndicatorView *)activityIndicator
|
||||
{
|
||||
if (_imageURL != imageURL)
|
||||
{
|
||||
_imageURL = imageURL;
|
||||
[self configureView];
|
||||
if (!_activityIndicator) {
|
||||
_activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
|
||||
_activityIndicator.center = self.imageView.center;
|
||||
_activityIndicator.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
|
||||
[self.imageView addSubview:_activityIndicator];
|
||||
|
||||
}
|
||||
return _activityIndicator;
|
||||
}
|
||||
|
||||
- (UIProgressView *)progressView
|
||||
{
|
||||
if (!_progressView) {
|
||||
_progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
|
||||
_progressView.frame = CGRectMake(0, CGRectGetMaxY(self.navigationController.navigationBar.frame), CGRectGetWidth(self.view.frame), 2.0);
|
||||
_progressView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;
|
||||
[self.view addSubview:_progressView];
|
||||
}
|
||||
return _progressView;
|
||||
}
|
||||
|
||||
- (void)configureView
|
||||
{
|
||||
if (self.imageURL) {
|
||||
__block UIActivityIndicatorView *activityIndicator;
|
||||
__weak UIImageView *weakImageView = self.imageView;
|
||||
[self.imageView sd_setImageWithURL:self.imageURL
|
||||
placeholderImage:nil
|
||||
options:SDWebImageProgressiveDownload
|
||||
progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL *targetURL) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (!activityIndicator) {
|
||||
[weakImageView addSubview:activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]];
|
||||
activityIndicator.center = weakImageView.center;
|
||||
[activityIndicator startAnimating];
|
||||
}
|
||||
});
|
||||
}
|
||||
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
|
||||
[activityIndicator removeFromSuperview];
|
||||
activityIndicator = nil;
|
||||
}];
|
||||
}
|
||||
self.activityIndicator.hidden = NO;
|
||||
[self.activityIndicator startAnimating];
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[self.imageView sd_setImageWithURL:self.imageURL
|
||||
placeholderImage:nil
|
||||
options:SDWebImageProgressiveDownload
|
||||
progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL *targetURL) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
float progress = 0;
|
||||
if (expectedSize != 0) {
|
||||
progress = (float)receivedSize / (float)expectedSize;
|
||||
}
|
||||
weakSelf.progressView.hidden = NO;
|
||||
[weakSelf.progressView setProgress:progress animated:YES];
|
||||
});
|
||||
}
|
||||
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
|
||||
weakSelf.progressView.hidden = YES;
|
||||
[weakSelf.activityIndicator stopAnimating];
|
||||
weakSelf.activityIndicator.hidden = YES;
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
@ -64,12 +75,6 @@
|
|||
[self configureView];
|
||||
}
|
||||
|
||||
- (void)viewDidUnload
|
||||
{
|
||||
[super viewDidUnload];
|
||||
self.imageView = nil;
|
||||
}
|
||||
|
||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
|
||||
{
|
||||
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
|
||||
|
|
|
@ -8,10 +8,6 @@
|
|||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@class DetailViewController;
|
||||
|
||||
@interface MasterViewController : UITableViewController
|
||||
|
||||
@property (strong, nonatomic) DetailViewController *detailViewController;
|
||||
|
||||
@end
|
||||
|
|
|
@ -7,13 +7,10 @@
|
|||
*/
|
||||
|
||||
#import "MasterViewController.h"
|
||||
#import <SDWebImage/UIImageView+WebCache.h>
|
||||
#import "DetailViewController.h"
|
||||
#import <SDWebImage/FLAnimatedImageView.h>
|
||||
#import <SDWebImage/FLAnimatedImageView+WebCache.h>
|
||||
#import <SDWebImage/UIView+WebCache.h>
|
||||
|
||||
|
||||
@interface MyCustomTableViewCell : UITableViewCell
|
||||
|
||||
@property (nonatomic, strong) UILabel *customTextLabel;
|
||||
|
@ -21,7 +18,6 @@
|
|||
|
||||
@end
|
||||
|
||||
|
||||
@implementation MyCustomTableViewCell
|
||||
|
||||
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
|
@ -39,17 +35,14 @@
|
|||
|
||||
@end
|
||||
|
||||
@interface MasterViewController ()
|
||||
|
||||
@property (nonatomic, strong) NSMutableArray<NSString *> *objects;
|
||||
|
||||
@interface MasterViewController () {
|
||||
NSMutableArray *_objects;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation MasterViewController
|
||||
|
||||
@synthesize detailViewController = _detailViewController;
|
||||
|
||||
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
||||
{
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
|
@ -66,7 +59,7 @@
|
|||
[SDWebImageManager sharedManager].imageDownloader.username = @"httpwatch";
|
||||
[SDWebImageManager sharedManager].imageDownloader.password = @"httpwatch01";
|
||||
|
||||
_objects = [NSMutableArray arrayWithObjects:
|
||||
self.objects = [NSMutableArray arrayWithObjects:
|
||||
@"http://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx?0.35786508303135633", // requires HTTP auth, used to demo the NTLM auth
|
||||
@"http://assets.sbnation.com/assets/2512203/dogflops.gif",
|
||||
@"https://raw.githubusercontent.com/liyong03/YLGIFImage/master/YLGIFImageDemo/YLGIFImageDemo/joy.gif",
|
||||
|
@ -80,7 +73,7 @@
|
|||
nil];
|
||||
|
||||
for (int i=0; i<100; i++) {
|
||||
[_objects addObject:[NSString stringWithFormat:@"https://s3.amazonaws.com/fast-image-cache/demo-images/FICDDemoImage%03d.jpg", i]];
|
||||
[self.objects addObject:[NSString stringWithFormat:@"https://s3.amazonaws.com/fast-image-cache/demo-images/FICDDemoImage%03d.jpg", i]];
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -109,7 +102,7 @@
|
|||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||
{
|
||||
return _objects.count;
|
||||
return self.objects.count;
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
|
@ -130,7 +123,7 @@
|
|||
[cell.customImageView sd_setIndicatorStyle:UIActivityIndicatorViewStyleGray];
|
||||
|
||||
cell.customTextLabel.text = [NSString stringWithFormat:@"Image #%ld", (long)indexPath.row];
|
||||
[cell.customImageView sd_setImageWithURL:[NSURL URLWithString:_objects[indexPath.row]]
|
||||
[cell.customImageView sd_setImageWithURL:[NSURL URLWithString:self.objects[indexPath.row]]
|
||||
placeholderImage:placeholderImage
|
||||
options:indexPath.row == 0 ? SDWebImageRefreshCached : 0];
|
||||
return cell;
|
||||
|
@ -138,13 +131,11 @@
|
|||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
if (!self.detailViewController)
|
||||
{
|
||||
self.detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
|
||||
}
|
||||
NSString *largeImageURL = [_objects[indexPath.row] stringByReplacingOccurrencesOfString:@"small" withString:@"source"];
|
||||
self.detailViewController.imageURL = [NSURL URLWithString:largeImageURL];
|
||||
[self.navigationController pushViewController:self.detailViewController animated:YES];
|
||||
NSString *largeImageURLString = [self.objects[indexPath.row] stringByReplacingOccurrencesOfString:@"small" withString:@"source"];
|
||||
NSURL *largeImageURL = [NSURL URLWithString:largeImageURLString];
|
||||
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
|
||||
detailViewController.imageURL = largeImageURL;
|
||||
[self.navigationController pushViewController:detailViewController animated:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0900"
|
||||
LastUpgradeVersion = "0910"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
@ -66,7 +66,7 @@
|
|||
<EnvironmentVariables>
|
||||
<EnvironmentVariable
|
||||
key = "OS_ACTIVITY_MODE"
|
||||
value = "disable"
|
||||
value = "default"
|
||||
isEnabled = "YES">
|
||||
</EnvironmentVariable>
|
||||
</EnvironmentVariables>
|
||||
|
|
Loading…
Reference in New Issue