ViewController.m 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*
  2. * This file is part of the SDWebImage package.
  3. * (c) Olivier Poitrey <rs@dailymotion.com>
  4. *
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. */
  8. #import "ViewController.h"
  9. #import <SDWebImage/SDWebImage.h>
  10. @interface ViewController ()
  11. @property (strong) NSImageView *imageView1;
  12. @property (strong) SDAnimatedImageView *imageView2;
  13. @property (strong) NSImageView *imageView3;
  14. @property (strong) SDAnimatedImageView *imageView4;
  15. @property (strong) NSImageView *imageView5;
  16. @property (strong) NSImageView *imageView6;
  17. @property (weak) IBOutlet NSButton *clearCacheButton;
  18. @end
  19. @implementation ViewController
  20. - (void)viewDidLoad {
  21. [super viewDidLoad];
  22. self.imageView1 = [NSImageView new];
  23. self.imageView2 = [SDAnimatedImageView new];
  24. self.imageView3 = [NSImageView new];
  25. self.imageView4 = [SDAnimatedImageView new];
  26. self.imageView5 = [NSImageView new];
  27. self.imageView6 = [NSImageView new];
  28. [self.view addSubview:self.imageView1];
  29. [self.view addSubview:self.imageView2];
  30. [self.view addSubview:self.imageView3];
  31. [self.view addSubview:self.imageView4];
  32. [self.view addSubview:self.imageView5];
  33. [self.view addSubview:self.imageView6];
  34. // For animated GIF rendering, set `animates` to YES or will only show the first frame
  35. self.imageView3.animates = YES; // `SDAnimatedImageRep` can be used for built-in `NSImageView` to support better GIF & APNG rendering as well. No need `SDAnimatedImageView`
  36. self.imageView4.animates = YES;
  37. #pragma mark - Static Image
  38. // NSImageView + Static Image
  39. self.imageView1.sd_imageIndicator = SDWebImageProgressIndicator.defaultIndicator;
  40. [self.imageView1 sd_setImageWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/recurser/exif-orientation-examples/master/Landscape_2.jpg"] placeholderImage:nil options:SDWebImageProgressiveLoad];
  41. // SDAnimatedImageView + Static Image
  42. [self.imageView2 sd_setImageWithURL:[NSURL URLWithString:@"https://nr-platform.s3.amazonaws.com/uploads/platform/published_extension/branding_icon/275/AmazonS3.png"]];
  43. #pragma mark - Animated Image
  44. // NSImageView + Animated Image
  45. self.imageView3.sd_imageIndicator = SDWebImageActivityIndicator.largeIndicator;
  46. [self.imageView3 sd_setImageWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/onevcat/APNGKit/2.2.0/Tests/APNGKitTests/Resources/General/APNG-cube.apng"]];
  47. NSMenu *menu1 = [[NSMenu alloc] initWithTitle:@"Toggle Animation"];
  48. NSMenuItem *item1 = [menu1 addItemWithTitle:@"Toggle Animation" action:@selector(toggleAnimation:) keyEquivalent:@""];
  49. item1.tag = 1;
  50. self.imageView3.menu = menu1;
  51. // SDAnimatedImageView + Animated Image
  52. self.imageView4.sd_imageTransition = SDWebImageTransition.fadeTransition;
  53. self.imageView4.imageScaling = NSImageScaleProportionallyUpOrDown;
  54. self.imageView4.imageAlignment = NSImageAlignLeft; // supports NSImageView's layout properties
  55. [self.imageView4 sd_setImageWithURL:[NSURL URLWithString:@"http://littlesvr.ca/apng/images/SteamEngine.webp"]];
  56. NSMenu *menu2 = [[NSMenu alloc] initWithTitle:@"Toggle Animation"];
  57. NSMenuItem *item2 = [menu2 addItemWithTitle:@"Toggle Animation" action:@selector(toggleAnimation:) keyEquivalent:@""];
  58. item2.tag = 2;
  59. self.imageView4.menu = menu2;
  60. #pragma mark - HDR Image
  61. // HDR Image
  62. if (@available(macOS 14.0, *)) {
  63. self.imageView5.preferredImageDynamicRange = NSImageDynamicRangeHigh;
  64. self.imageView6.preferredImageDynamicRange = NSImageDynamicRangeHigh;
  65. }
  66. [self.imageView5 sd_setImageWithURL:[NSURL URLWithString:@"https://lightroom.adobe.com/v2c/spaces/113ab046f0d04b40aa7f8e10285961a7/assets/cd191116be514e1288ca6ea372303139/revisions/2749aff3294e404c9ffce3518e467d4a/renditions/99673919d096b42650b448f6516089cc.avif"] placeholderImage:nil options:0 context:@{SDWebImageContextImageDecodeToHDR : @(YES)}];
  67. // SDR Image
  68. [self.imageView6 sd_setImageWithURL:[NSURL URLWithString:@"https://lightroom.adobe.com/v2c/spaces/113ab046f0d04b40aa7f8e10285961a7/assets/cd191116be514e1288ca6ea372303139/revisions/2749aff3294e404c9ffce3518e467d4a/renditions/99673919d096b42650b448f6516089cc"] placeholderImage:nil options:0 context:@{SDWebImageContextImageDecodeToHDR : @(NO)}];
  69. self.clearCacheButton.target = self;
  70. self.clearCacheButton.action = @selector(clearCacheButtonClicked:);
  71. [self.clearCacheButton sd_setImageWithURL:[NSURL URLWithString:@"https://png.icons8.com/color/100/000000/delete-sign.png"]];
  72. [self.clearCacheButton sd_setAlternateImageWithURL:[NSURL URLWithString:@"https://png.icons8.com/color/100/000000/checkmark.png"]];
  73. }
  74. - (void)viewDidLayout {
  75. [super viewDidLayout];
  76. CGFloat space = 20;
  77. CGFloat imageWidth = (self.view.frame.size.width - space * 4) / 3;
  78. CGFloat imageHeight = (self.view.frame.size.height - space * 3) / 2;
  79. self.imageView1.frame = CGRectMake(space * 1 + imageWidth * 0, space, imageWidth, imageHeight);
  80. self.imageView2.frame = CGRectMake(self.imageView1.frame.origin.x, self.imageView1.frame.origin.y + imageHeight + space, imageWidth, imageHeight);
  81. self.imageView3.frame = CGRectMake(space * 2 + imageWidth * 1, space, imageWidth, imageHeight);
  82. self.imageView4.frame = CGRectMake(self.imageView3.frame.origin.x, self.imageView3.frame.origin.y + imageHeight + space, imageWidth, imageHeight);
  83. self.imageView5.frame = CGRectMake(space * 3 + imageWidth * 2, space, imageWidth, imageHeight);
  84. self.imageView6.frame = CGRectMake(self.imageView5.frame.origin.x, self.imageView5.frame.origin.y + imageHeight + space, imageWidth, imageHeight);
  85. }
  86. - (void)clearCacheButtonClicked:(NSResponder *)sender {
  87. NSButton *button = (NSButton *)sender;
  88. button.state = NSControlStateValueOn;
  89. [[SDImageCache sharedImageCache] clearMemory];
  90. [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
  91. button.state = NSControlStateValueOff;
  92. }];
  93. }
  94. - (void)toggleAnimation:(NSMenuItem *)sender {
  95. NSImageView *imageView = sender.tag == 1 ? self.imageView3 : self.imageView4;
  96. if (imageView.animates) {
  97. imageView.animates = NO;
  98. } else {
  99. imageView.animates = YES;
  100. }
  101. }
  102. - (void)setRepresentedObject:(id)representedObject {
  103. [super setRepresentedObject:representedObject];
  104. // Update the view, if already loaded.
  105. }
  106. @end