ViewController.m 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. #import <SDWebImageWebPCoder/SDWebImageWebPCoder.h>
  11. @interface ViewController ()
  12. @property (weak) IBOutlet NSImageView *imageView1;
  13. @property (weak) IBOutlet NSImageView *imageView2;
  14. @property (weak) IBOutlet SDAnimatedImageView *imageView3;
  15. @property (weak) IBOutlet SDAnimatedImageView *imageView4;
  16. @property (weak) IBOutlet NSButton *clearCacheButton;
  17. @end
  18. @implementation ViewController
  19. - (void)viewDidLoad {
  20. [super viewDidLoad];
  21. [[SDImageCodersManager sharedManager] addCoder:[SDImageWebPCoder sharedCoder]];
  22. // For animated GIF rendering, set `animates` to YES or will only show the first frame
  23. self.imageView2.animates = YES; // `SDAnimatedImageRep` can be used for built-in `NSImageView` to support better GIF & APNG rendering as well. No need `SDAnimatedImageView`
  24. self.imageView4.animates = YES;
  25. // NSImageView + Static Image
  26. self.imageView1.sd_imageIndicator = SDWebImageProgressIndicator.defaultIndicator;
  27. [self.imageView1 sd_setImageWithURL:[NSURL URLWithString:@"https://raw.githubusercontent.com/recurser/exif-orientation-examples/master/Landscape_2.jpg"] placeholderImage:nil options:SDWebImageProgressiveLoad];
  28. // NSImageView + Animated Image
  29. self.imageView2.sd_imageIndicator = SDWebImageActivityIndicator.largeIndicator;
  30. [self.imageView2 sd_setImageWithURL:[NSURL URLWithString:@"https:raw.githubusercontent.com/onevcat/APNGKit/master/TestImages/APNG-cube.apng"]];
  31. NSMenu *menu1 = [[NSMenu alloc] initWithTitle:@"Toggle Animation"];
  32. NSMenuItem *item1 = [menu1 addItemWithTitle:@"Toggle Animation" action:@selector(toggleAnimation:) keyEquivalent:@""];
  33. item1.tag = 1;
  34. self.imageView2.menu = menu1;
  35. // SDAnimatedImageView + Static Image
  36. [self.imageView3 sd_setImageWithURL:[NSURL URLWithString:@"https://nr-platform.s3.amazonaws.com/uploads/platform/published_extension/branding_icon/275/AmazonS3.png"]];
  37. // SDAnimatedImageView + Animated Image
  38. self.imageView4.sd_imageTransition = SDWebImageTransition.fadeTransition;
  39. self.imageView4.imageScaling = NSImageScaleProportionallyUpOrDown;
  40. self.imageView4.imageAlignment = NSImageAlignLeft; // supports NSImageView's layout properties
  41. [self.imageView4 sd_setImageWithURL:[NSURL URLWithString:@"http://littlesvr.ca/apng/images/SteamEngine.webp"] placeholderImage:nil options:SDWebImageForceTransition];
  42. NSMenu *menu2 = [[NSMenu alloc] initWithTitle:@"Toggle Animation"];
  43. NSMenuItem *item2 = [menu2 addItemWithTitle:@"Toggle Animation" action:@selector(toggleAnimation:) keyEquivalent:@""];
  44. item2.tag = 2;
  45. self.imageView4.menu = menu2;
  46. self.clearCacheButton.target = self;
  47. self.clearCacheButton.action = @selector(clearCacheButtonClicked:);
  48. [self.clearCacheButton sd_setImageWithURL:[NSURL URLWithString:@"https://png.icons8.com/color/100/000000/delete-sign.png"]];
  49. [self.clearCacheButton sd_setAlternateImageWithURL:[NSURL URLWithString:@"https://png.icons8.com/color/100/000000/checkmark.png"]];
  50. }
  51. - (void)clearCacheButtonClicked:(NSResponder *)sender {
  52. NSButton *button = (NSButton *)sender;
  53. button.state = NSControlStateValueOn;
  54. [[SDImageCache sharedImageCache] clearMemory];
  55. [[SDImageCache sharedImageCache] clearDiskOnCompletion:^{
  56. button.state = NSControlStateValueOff;
  57. }];
  58. }
  59. - (void)toggleAnimation:(NSMenuItem *)sender {
  60. NSImageView *imageView = sender.tag == 1 ? self.imageView2 : self.imageView4;
  61. if (imageView.animates) {
  62. imageView.animates = NO;
  63. } else {
  64. imageView.animates = YES;
  65. }
  66. }
  67. - (void)setRepresentedObject:(id)representedObject {
  68. [super setRepresentedObject:representedObject];
  69. // Update the view, if already loaded.
  70. }
  71. @end