YYImageProgressiveExample.m 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. //
  2. // YYImageProgressiveExample.m
  3. // YYKitExample
  4. //
  5. // Created by ibireme on 15/8/24.
  6. // Copyright (c) 2015 ibireme. All rights reserved.
  7. //
  8. #import "YYImageProgressiveExample.h"
  9. #import "YYImage.h"
  10. #import "UIView+YYAdd.h"
  11. #import "UIControl+YYAdd.h"
  12. @interface NSData(YYAdd)
  13. @end
  14. @implementation NSData(YYAdd)
  15. + (NSData *)dataNamed:(NSString *)name {
  16. NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@""];
  17. if (!path) return nil;
  18. NSData *data = [NSData dataWithContentsOfFile:path];
  19. return data;
  20. }
  21. @end
  22. @interface YYImageProgressiveExample () {
  23. UIImageView *_imageView;
  24. UISegmentedControl *_seg0;
  25. UISegmentedControl *_seg1;
  26. UISlider *_slider0;
  27. }
  28. @end
  29. @implementation YYImageProgressiveExample
  30. - (void)viewDidLoad {
  31. [super viewDidLoad];
  32. self.view.backgroundColor = [UIColor whiteColor];
  33. _imageView = [UIImageView new];
  34. _imageView.size = CGSizeMake(300, 300);
  35. _imageView.backgroundColor = [UIColor colorWithWhite:0.790 alpha:1.000];
  36. _imageView.centerX = self.view.width / 2;
  37. _seg0 = [[UISegmentedControl alloc] initWithItems:@[@"baseline",@"progressive/interlaced"]];
  38. _seg0.selectedSegmentIndex = 0;
  39. _seg0.size = CGSizeMake(_imageView.width, 30);
  40. _seg0.centerX = self.view.width / 2;
  41. _seg1 = [[UISegmentedControl alloc] initWithItems:@[@"JPEG", @"PNG", @"GIF"]];
  42. _seg1.frame = _seg0.frame;
  43. _seg1.selectedSegmentIndex = 0;
  44. _slider0 = [UISlider new];
  45. _slider0.width = _seg0.width;
  46. [_slider0 sizeToFit];
  47. _slider0.minimumValue = 0;
  48. _slider0.maximumValue = 1.05;
  49. _slider0.value = 0;
  50. _slider0.centerX = self.view.width / 2;
  51. _imageView.top = 64 + 10;
  52. _seg0.top = _imageView.bottom + 10;
  53. _seg1.top = _seg0.bottom + 10;
  54. _slider0.top = _seg1.bottom + 10;
  55. [self.view addSubview:_imageView];
  56. [self.view addSubview:_seg0];
  57. [self.view addSubview:_seg1];
  58. [self.view addSubview:_slider0];
  59. __weak typeof(self) _self = self;
  60. [_seg0 addBlockForControlEvents:UIControlEventValueChanged block:^(id sender) {
  61. [_self changed];
  62. }];
  63. [_seg1 addBlockForControlEvents:UIControlEventValueChanged block:^(id sender) {
  64. [_self changed];
  65. }];
  66. [_slider0 addBlockForControlEvents:UIControlEventValueChanged block:^(id sender) {
  67. [_self changed];
  68. }];
  69. }
  70. - (void)changed {
  71. NSString *name = nil;
  72. if (_seg0.selectedSegmentIndex == 0) {
  73. if (_seg1.selectedSegmentIndex == 0) {
  74. name = @"mew_baseline.jpg";
  75. } else if (_seg1.selectedSegmentIndex == 1) {
  76. name = @"mew_baseline.png";
  77. } else {
  78. name = @"mew_baseline.gif";
  79. }
  80. } else {
  81. if (_seg1.selectedSegmentIndex == 0) {
  82. name = @"mew_progressive.jpg";
  83. } else if (_seg1.selectedSegmentIndex == 1) {
  84. name = @"mew_interlaced.png";
  85. } else {
  86. name = @"mew_interlaced.gif";
  87. }
  88. }
  89. NSData *data = [NSData dataNamed:name];
  90. float progress = _slider0.value;
  91. if (progress > 1) progress = 1;
  92. NSData *subData = [data subdataWithRange:NSMakeRange(0, data.length * progress)];
  93. YYImageDecoder *decoder = [[YYImageDecoder alloc] initWithScale:[UIScreen mainScreen].scale];
  94. [decoder updateData:subData final:NO];
  95. YYImageFrame *frame = [decoder frameAtIndex:0 decodeForDisplay:YES];
  96. _imageView.image = frame.image;
  97. }
  98. @end